Назад | Перейти на главную страницу

Как мы можем проверить, что PowerShell v2.0 установлен в списке серверов?

Как я могу проверить, установлен ли PowerShell v2.0 в списке серверов? Список серверов представляет собой комбинацию Windows Server 2003 и Windows Server 2008. Было бы замечательно использовать сценарий vbscript или PS.

Я знаю, что PowerShell по умолчанию установлен в Windows Server 2008, хотя я просто хочу убедиться, что кто-то не возился с серверами.

Я бы проверил этот ключ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ PowerShellEngine \ powershellversion.

Покопавшись и обнаружив несколько мест, которые ни к чему не приводят в моем окружении, я смог найти это. Это будет работать в системах, в которых нет Powershell, поэтому его можно использовать для других сканирований реестра.

$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}

Изменить: осмотревшись, оказалось, что это не сработает, если служба удаленного реестра не запущена. Я добавил код для проверки удаленного реестра и запуска в случае остановки. В $cred = Get-Credential "domain\username" можно удалить вместе с -Credential $cred в зависимости от настройки вашего домена.

Edit2: Хорошо, я обнаружил проблемы с разрешениями при использовании .OpenSubKey (). Я переключаю его на .GetValueKind (), поскольку все, что нам нужно сделать, это проверить, существует ли ключ. Надеюсь, это сработает для вас. У меня нет разрешений, в которых я работаю, чтобы полностью проверить это для вас.

Edit3: у меня было много проблем с разрешением в моей среде, так как я пересекаю ненадежные домены. Я переписал приведенный выше код для работы в моей среде. Он работает удаленно и не требует установки Powershell. Сообщите мне, если возникнут другие ошибки.