我们如何检查 PowerShell v2.0 是否安装在服务器列表中?

我们如何检查 PowerShell v2.0 是否安装在服务器列表中?

如何检查 PowerShell v2.0 是否安装在服务器列表中?服务器列表是 Windows Server 2003 和 Windows Server 2008 的组合。vbscript 或 PS 脚本会很棒。

我知道 Windows Server 2008 中默认安装了 PowerShell,但我只是想确保没有人干扰服务器。

答案1

在搜索并发现在我的环境中没有可用的地方后,我终于找到了这个。这将在没有 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您的域设置将其删除。

编辑 2:好的,我发现使用 .OpenSubKey() 存在权限问题。我将其切换到 .GetValueKind(),因为我们需要做的就是验证密钥是否存在。希望这对您有用。我没有工作的地方的权限来为您全面测试这一点。

编辑 3:由于我跨越不受信任的域,因此在我的环境中遇到了很多权限问题。我重写了上述代码以在我的环境中工作。它可以远程工作,并且不需要安装 Powershell。如果您遇到任何其他错误,请告诉我。

答案2

我会检查此键 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine\powershellversion。

相关内容