Nachdem ich mich umgesehen und mehrere Orte gefunden hatte, die dazu führten, dass in meiner Umgebung nichts brauchbares war, konnte ich dies finden. Dies funktioniert auf Systemen ohne Powershell, sodass es für andere Registrierungsscans verwendet werden kann.
$hostA = “RemoteComputer”
$cred = Get-Credential "domain\username"
$RegPath = "SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine"
$ValueName = "PowerShellVersion"
$tmp = $(gwmi -computername $hostA -class win32_service -Credential $cred | Where-Object { $_.Name -eq “RemoteRegistry” })
if ( $($tmp.State) -eq "Stopped") {$tmp.StartService()}
$reg = Get-WmiObject -credential $Cred -List -Namespace root\default -computername $hosta | Where-Object {$_.Name -eq "StdRegProv"}
$ref = ($reg.GetStringValue(2147483650,$RegPath,$ValueName)).sValue
if ($ref -eq $null ) {Write-Host $hostA "doesn't have Powershell"} else {Write-Host $hostA "has Powershell version" $ref}
Bearbeiten: Nachdem Sie sich umgesehen haben, stellt sich heraus, dass dies nicht funktioniert, wenn der Remote-Registrierungsdienst nicht ausgeführt wird. Ich habe Code hinzugefügt, um nach Remote-Registrierung zu suchen und zu starten, wenn gestoppt. Das $cred = Get-Credential "domain\username"kann zusammen mit -Credential $credabhängig von Ihrem Domain-Setup entfernt werden.
Edit2: Ok, ich habe Berechtigungsprobleme bei der Verwendung von .OpenSubKey () gefunden. Ich wechsle es zu .GetValueKind (), da wir nur überprüfen müssen, ob der Schlüssel vorhanden ist. Hoffentlich funktioniert das für Sie. Ich habe nicht die Berechtigungen, mit denen ich arbeite, um dies für Sie vollständig zu testen.
Edit3: Ich hatte viele Probleme mit der Berechtigung in meiner Umgebung, da ich nicht vertrauenswürdige Domänen überquere. Ich habe den obigen Code neu geschrieben, um in meiner Umgebung zu funktionieren. Es funktioniert remote und erfordert keine Installation von Powershell. Lassen Sie mich wissen, wenn Sie weitere Fehler erhalten.