1

複数のサーバーでPowershellを使用してdllのファイルバージョンをリモートで取得しようとしており、サーバー名、dllバージョン、およびdllファイルの場所をcsvまたはhtmlレポートに書き込んでいます。問題は、一部のサーバーが Win 2003 および Win 2008 であることです。したがって、ファイルは、たとえば C:\Program Files\WinZip\WZCAB.DLL または C:\Program Files (x86)\WinZip\WZCAB.DLL に存在する可能性があります。スクリプトは 1 つの場所をチェックし、存在しない場合は別の場所をチェックしてから書き出します。誰でも私を助けることができますか?

いくつかのこと - このスクリプトは、2003 と 2008 の両方で 200 以上のサーバーまたは VM にアクセスするために使用されます。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           
        }
    }
4

2 に答える 2

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 ブロックを配置する必要があります。それはあなたの研究開発に任せます。

于 2011-12-08T04:28:45.113 に答える
0

コマンドレットを使用してTest-Path、パスが存在するかどうかを確認します。そうでない場合は、代替パスを使用してください。

また、Program Files パスの違いは、Win 2003 または 2008 から生じるのではなく、OS が 32 ビットまたは 64 ビットであり、アプリケーションが 32 ビットまたは 64 ビットをサポートしているかどうかに起因します。

于 2011-12-08T00:14:48.160 に答える