2

Powershell で Compare-object を使用して、サイズ、最終書き込み時間、およびバージョン番号に基づいて dll ファイルを比較しています。これらのファイルはリモート サーバーに保存されます。私は結果を得ています。唯一の問題は、結果からバージョン番号の値を取得する方法です。以前の質問では、最適化されていない別のアプローチに従っていました。ここで表示できます:バージョン番号とその他の基準に基づいてファイルを比較し、出力をフォーマットしています 。私の更新されたスクリプトは次のとおりです。

$s1=New-PSSession -ComputerName $c1
$first=Invoke-Command -Session $s1 -ScriptBlock{param($path1) Get-ChildItem -Path $path1 -Filter *.dll} -ArgumentList $path1

$s2=New-PSSession -ComputerName $c2
$second=Invoke-Command -Session $s2 -ScriptBlock{param($path2) Get-ChildItem -Path $path2 -Filter *.dll} -ArgumentList $path2

$diff = Compare-Object -ReferenceObject $first -DifferenceObject $second -Property Name, Length, LastWriteTime, VersionInfo -PassThru  | Select Name, Length, LastWriteTime, sideindicator,@{n="VersionInfo";e= { $_.VersionInfo.Productversion }}
$diff

ここで、c1 と c2 はコンピューター名であり、path1 と path2 はそれぞれ c1 と c2 内のフォルダーのパスです。出力にはバージョン番号が含まれていません。次の形式です。

Name          : PhotoViewer.dll
Length        : 20480
LastWriteTime : 8/9/2015 4:46:08 PM
SideIndicator : <=
VersionInfo   : 
4

1 に答える 1

1

オブジェクトのプロパティが逆シリアル化される深さにはおそらく制限があります。とにかく、ここにうまくいく可能性のある1つのアプローチがあります。

詳細については、このリンクを確認してくださいリンク

$first=Invoke-Command -Session $s1 -ScriptBlock{param($path1) Get-ChildItem -Path $path1 -Filter *.dll | Export-Clixml -Path '\\networkshare\first.xml' } -ArgumentList $path1

$second=Invoke-Command -Session $s2 -ScriptBlock{param($path2) Get-ChildItem -Path $path2 -Filter *.dll |  Export-Clixml -Path '\\networkshare\second.xml'} -ArgumentList $path2

$first_xml = Import-Clixml -Path '\\networkshare\first.xml'
$second_xml = Import-Clixml -Path '\\networkshare\second.xml'

Compare-Object -ReferenceObject $first_xml -DifferenceObject $second_xml -Property Name, Length, LastWriteTime, VersionInfo -PassThru  | 
 Select-Object Name, Length, LastWriteTime, sideindicator,@{n='VersionInfo';e= { $_.VersionInfo.productversion }}
于 2015-12-15T08:28:57.043 に答える