0

知道为什么我在下面一无所获吗?该文件在我查询的服务器上,如果我在本地执行它,它可以很好地获取文件版本。

$computer = Get-Content -Path c:\temp\servers1.txt

foreach ($server in $computer){

$path = Get-WmiObject Win32_Service -Filter "Name = 'SysMgmtHp'" -ComputerName $server | select pathname

(Get-Command $path).FileVersionInfo.FileVersion

}
4

2 回答 2

1

尝试:

(Get-Command $path.pathname).FileVersionInfo.FileVersion

当您使用| select pathname它时,本质上是创建一个具有pathname属性的新对象。您可以通过将输出Get-Member提供给您的类型信息和类型成员列表来查看这一点,例如:

PS> Get-WmiObject Win32_Service -Filter "Name = 'Spooler'" | Get-Member


   TypeName: System.Management.ManagementObject#root\cimv2\Win32_Service

Name                    MemberType    Definition
----                    ----------    ----------
PSComputerName          AliasProperty PSComputerName = __SERVER
...

相对

PS> Get-WmiObject Win32_Service -Filter "Name = 'Spooler'" | select pathname| Get-Member


   TypeName: Selected.System.Management.ManagementObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
pathname    NoteProperty System.String pathname=C:\Windows\System32\spoolsv.exe

综上所述,您正在获取远程计算机上的服务路径,然后检查本地计算机上的版本。如果您可以在服务器上启用远程处理,您可以这样做:

Invoke-Command $server { $path = (Get-WmiObject Win32_Service -Filter "Name = 'SysMgmtHp'").PathName; (Get-Command $path).FileVersionInfo.FileVersion }

这将获得远程计算机上服务二进制文件的文件版本。

于 2013-01-15T16:15:08.013 回答
0

$path.pathname您可以发布名为“SysMgmtHp”的服务的输出吗?一些服务在 .pathname 属性中有附加参数或用引号括起来,您可能需要修剪这些参数/引号。另外,发布Get-ChildItem $path.pathname | select *结果。

于 2013-01-15T17:16:02.443 回答