通过WMI远程确定PowerShell版本

时间:2015-04-16 05:04:40

标签: powershell wmi powershell-remoting

我在这里和其他地方搜索过,找不到答案,所以这是我的问题。

使用WMI在远程计算机上确定PowerShell版本的最佳方法是什么?

背景

我的任务是审核并更新大约1000台服务器到最新版本的PowerShell。其中一些有PowerShell v1,有些没有配置WinRM,因此调用命令不是一个选项。 PSExec 在此环境中也不是一个选项。这就是为什么我需要使用 WMI 来执行此任务。

任何帮助都将不胜感激。

修改

经过大量研究后,我仍然倾向于WMI。特别是检索“powershell.exe”的文件版本。在我看来,这是涵盖所有版​​本的唯一方法。

我到目前为止的代码在这里:

$path = "C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe" 
$query = "SELECT Version FROM CIM_DataFile WHERE Name = '$path'" 
$PSFileVer = Get-WmiObject -Query $query -ComputerName $servername -Credential $creds 
$BuildVer = [version]$PSFileVer.Version.Split()[0]

我现在需要的是一个全面的列表,将文件版本(内部版本号)映射到powershell版本。任何想法?

2 个答案:

答案 0 :(得分:2)

来自here的解决方案

$command = "ipconfig/all > C:\temp\result.txt"
$cmd = "cmd /c $command"

Invoke-WmiMethod -class Win32_process -name Create -ArgumentList $cmd -ComputerName "remotepc"
sleep 1
Get-Content \\remotepc\C$\temp\result.txt

您也可以通过this方法执行类似操作。如果您这样做,则无法直接获取返回值,您必须重定向到文件。

您可以为结果设置共享,而不是将结果放在本地计算机上

答案 1 :(得分:1)

如果有帮助,这是命令:

$command = "powershell -command "+'"$PSVersionTable.PsVersion.Major | out-file c:\temp\version.txt"'