Depois de cavar e encontrar vários lugares que levam a nada utilizável no meu ambiente, eu fui capaz de encontrar isso. Isso funcionará em sistemas que não possuem o Powershell, portanto, ele pode ser usado para outras verificações de registro.
$hostA = “RemoteComputer”
$cred = Get-Credential "domain\username"
$RegPath = "SOFTWARE\Microsoft\PowerShell\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}
Editar: Depois de olhar em volta, isso não funcionará se o serviço Registro Remoto não estiver em execução. Eu adicionei código para verificar o registro remoto e iniciar, se parado. O $cred = Get-Credential "domain\username"
pode ser removido juntamente com -Credential $cred
dependendo da configuração do seu domínio.
Edit2: Ok, eu encontrei problemas de permissão com o uso de .OpenSubKey (). Estou mudando para .GetValueKind (), já que tudo o que precisamos fazer é verificar se a chave existe. Espero que isso funcione para você. Eu não tenho as permissões onde trabalho para testar isso totalmente para você.
Edit3: Eu estava tendo muitos problemas com permissão no meu ambiente desde que passei por domínios não confiáveis. Eu reescrevi o código acima para trabalhar no meu ambiente. Ele funciona remotamente e não requer que o Powershell seja instalado. Deixe-me saber se você tiver algum outro erro.