2011-12-08 5 views
1

Powershellを使用してリモートで複数のサーバ上でファイルバージョンのdllを取得しようとしていて、サーバ名、dllバージョン、およびdllファイルの場所をcsvまたはhtml報告する。このキャッチは、Windows 2003およびWindows 2008の一部です。そのため、ファイルはC:¥Program Files¥WinZip¥WZCAB.DLLやC:¥Program Files(x86)¥WinZip¥WZCAB.DLLなどにあります。スクリプトはある場所をチェックし、存在しなければ他の場所をチェックして書き出します。誰か助けてくれますか?リモートコンピュータからpowershellの.dllのファイルバージョンを取得する

このスクリプトは、200以上のサーバーまたはVMの2003年と2008年の両方にアクセスするために使用されます。2003年にはPowershell 2.0と2008が必要です。リモート処理を有効にするのがタイムリーになります。多分私はWMIを利用する必要があると思っていました。 WMIを利用してパッチを取得し、再起動する2つのスクリプトがあります。私はRavikanthスクリプト(もう一度ありがとう)を試してみましたが、サーバーのtxtファイルを渡すときに次のエラーが発生しました - 1つ以上のコンピュータ名が有効ではありません。 Uriを渡そうとする場合は、-ConnectionUriパラメータを使用するか、文字列ではなくUriオブジェクトを渡します。私は各サーバーでリモーティングを有効にする予定ではないので、これを行う別の方法はありますか?私はRavikanthスクリプト(下記)を修正し、ローカルで試してみました。遠隔操作しようとしたら、それはしません。何かご意見は?

$servers = "D:\scripts\winzip\servers.txt" 
$x86Path = 'C:\Program Files (x86)\WinZip\WZCAB.DLL' 
$x64Path = 'C:\Program Files\WinZip\WZCAB.DLL' 

    foreach ($computername in $servers){ 
     if (Test-Path $x86Path) { 
      (Get-Item $x86Path | Select -ExpandProperty VersionInfo).FileVersion 
     } elseif (Test-Path $x64Path) { 
      (Get-Item $x64Path | Select -ExpandProperty VersionInfo).FileVersion   
     } 
    } 
+0

クイックレスポンスのおかげで.. – user1086732

+0

あなたは本当にどのリモートサーバにもアクセスしません。実際には、配列としてservers.txtの内容を読み込んでいる間は、コレクションを繰り返すことさえありません。 CIM_DataFile WMIクラスを使用してこれを行うWMIの方法があります。 – ravikanth

答えて

0

パスが存在するかどうかを確認するためにTest-Pathコマンドレットを使用します。代替パスを使用しない場合

また、Windows 2003または2008では、OSが32ビットまたは64ビットで、アプリケーションが32ビットまたは64ビットをサポートしているかどうかによってProgram Filesパスの違いはありません。

5

あなたがそれらのコンピュータ上で有効リモーティングしている場合:

$servers = 'server1','server2' 
$x86Path = 'C:\Program Files (x86)\WinZip\WZCAB.DLL' 
$x64Path = 'C:\Program Files\WinZip\WZCAB.DLL' 
Invoke-Command $servers { 
    Param ($x86Path, $x64Path) 
    if (Test-Path $x86Path) { 
     (Get-Item $x86Path | Select -ExpandProperty VersionInfo).FileVersion 
    } elseif (Test-Path $x64Path) { 
     (Get-Item $x64Path | Select -ExpandProperty VersionInfo).FileVersion   
    } 
} -ArgumentList $x86Path,$x64Path 

をこれはそれを行うのWMIの方法です:

$servers = @(Get-Content C:\servers.txt) 
$servers | % { Get-WMIObject -ComputerName $_ -Query "SELECT * FROM CIM_DataFile WHERE Drive ='C:' AND Path='\\Program Files (x86)\\WinZip\\' AND FileName='WZCAB' AND Extension='dll'" } | select Version 

これは、あなたが必要なものの一部でしかありません。 try-catchブロックを配置して、そのパスにファイルが見つからない場合にエラーを処理する必要があります。私はあなたのためにそれを残すでしょう& D.

+0

OPが試したことがOPに表示されていないときは、正確なコードを入力しないでください。これはあなたが知っているように、誰かが望むコードを手に入れる場所ではありません。 – manojlds

+2

この場合はなぜそうは見えないのですか?これはかなり簡単です –

+0

どうしてですか?初心者、IMHOに助けを提供することに害はありません。 – ravikanth

関連する問題