Après avoir creusé et trouvé plusieurs endroits qui ne menaient à rien d'utilisable dans mon environnement, j'ai pu trouver ceci. Cela fonctionnera sur des systèmes qui n'ont pas Powershell, donc cela pourrait être utilisé pour d'autres analyses de registre.
$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}
Edit : Après avoir cherché, il s'avère que cela ne fonctionne pas si le service de registre à distance n'est pas en cours d'exécution. J'ai ajouté du code pour vérifier le registre distant et le démarrer s'il est arrêté. Le site $cred = Get-Credential "domain\username"
peut être supprimé ainsi que -Credential $cred
en fonction de la configuration de votre domaine.
Edit2 : Ok, j'ai trouvé des problèmes de permission en utilisant .OpenSubKey(). Je le remplace par .GetValueKind(), puisque tout ce que nous devons faire est de vérifier que la clé existe. J'espère que cela fonctionnera pour vous. Je n'ai pas les permissions là où je travaille pour tester complètement ceci pour vous.
Edit3 : J'avais beaucoup de problèmes avec la permission dans mon environnement puisque je croise des domaines non fiables. J'ai réécrit le code ci-dessus pour qu'il fonctionne dans mon environnement. Il fonctionne à distance, et ne nécessite pas l'installation de Powershell. Faites-moi savoir si vous obtenez d'autres erreurs.