Como podemos verificar se o PowerShell v2.0 está instalado em uma lista de servidores?

7

Como posso verificar se o PowerShell v2.0 está instalado em uma lista de servidores? A lista de servidores é uma combinação do Windows Server 2003 e do Windows Server 2008. Um script vbscript ou PS seria maravilhoso.

Eu sei que o PowerShell está instalado, por padrão, no Windows Server 2008, embora eu apenas queira ter certeza de que alguém não está mexendo com os servidores.

    
por whizkid 11.07.2012 / 17:19

2 respostas

2

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.

    
por 11.07.2012 / 20:47
3

Eu verificaria essa chave HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ PowerShellEngine \ powershellversion.

    
por 11.07.2012 / 17:37