任何想法为什么我在下面什么也得不到?该文件在我查询的服务器上,如果我在本地执行它,它可以正常获取文件版本。
$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
}
答案 0 :(得分: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 }
所有这些说明,您将获得远程计算机上的服务路径,然后检查本地计算机上的版本。如果您可以在服务器上启用远程处理,则可以执行以下操作:
{{1}}
这将获取远程计算机上服务二进制文件的文件版本。
答案 1 :(得分:0)
您可以为名为'SysMgmtHp'的服务发布$path.pathname
的输出吗?有几个服务在.pathname属性中有其他参数或用引号括起来,您可能需要修剪这些参数/引号。另外,发布Get-ChildItem $path.pathname | select *
个结果。