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 に答える