Ecco lo script:
# Percorso completo di PsGetSid.exe - By Marco Mira
$psGetSidPath = ".\PsGetSid.exe"
# Importa modulo Active Directory
Import-Module ActiveDirectory
# Ottieni lista nomi computer dominio
$computers = Get-ADComputer -Filter * | Select-Object -ExpandProperty Name
# Array per risultati
$result = @()
foreach ($computer in $computers) {
# Verifica raggiungibilità con ping
$pingable = Test-Connection -ComputerName $computer -Count 1 -Quiet
if (-not $pingable) {
$sid = "NON raggiungibile"
} else {
try {
# Esegui PsGetSid e cattura output come stringa
$outputRaw = & $psGetSidPath "\\$computer" 2>&1 | Out-String
# Dividi output in righe
$outputLines = $outputRaw -split '\r?\n'
# Trova la riga con "SID for" e prendi la riga successiva se presente e non vuota
$sid = $null
for ($i = 0; $i -lt $outputLines.Count; $i++) {
if ($outputLines[$i] -match "SID for") {
if ($i + 1 -lt $outputLines.Count -and $outputLines[$i+1].Trim() -ne '') {
$sid = $outputLines[$i+1].Trim()
break
}
}
}
if (-not $sid) {
$sid = "SID non trovato"
}
} catch {
$sid = "Errore durante il comando"
}
}
# Pulisce output da eventuali spazi indesiderati
$sidClean = $sid.Trim()
# Scrive a schermo nome computer e SID pulito
Write-Output "$computer - $sidClean"
# Aggiungi al report
$result += [PSCustomObject]@{
ComputerName = $computer
LocalSID = $sidClean
}
}
# Esporta risultati in CSV (modifica se serve percorso)
$result | Select-Object ComputerName, LocalSID | Export-Csv -Path .\LocalSIDs_Report.csv -NoTypeInformation
Write-Host "`nReport creato: LocalSIDs_Report.csv"
https://learn.microsoft.com/en-us/sysinternals/downloads/psgetsid