我正在尝试比较在9个服务器上运行的服务,这些服务都应该是同一设置,但当前不是那样。我决定创建一个将所有服务从PowerShell导出到CSV文件的脚本,因此我将服务器A与B,A到C,A到D等。
每个CSV文件包含以下列:名称,标题,状态,StartMode
我希望能够比较差异,并提出下面显示的小powershell脚本
$IWB06 = import-csv C:PS_TempPIN-VUHOIWB06_Services.csv
$IWB09 = import-csv C:PS_TempPIN-VUHOIWB09_Services.csv
Compare-Object -ReferenceObject $IWB06 -DifferenceObject $IWB09 -Property 'Unique ID', 'name', 'caption', 'state', 'startmode', 'comparrison' -PassThru -IncludeEqual |
Format-Table -AutoSize
我唯一的问题是在PowerShell控制台上显示,但我无法将结果导出到CSV文件。
有关如何导出控制台中显示的内容到CSV文件
用以下内容替换最后一行:
$Results = Compare-Object -ReferenceObject $IWB06 -DifferenceObject $IWB09 -Property 'Unique ID', 'name', 'caption', 'state', 'startmode', 'comparrison' -PassThru -IncludeEqual
$Results | Export-Csv -NoTypeInformation -Encoding Unicode -Path C:tempMyResult.csv #Replace with your output csv destination
一次比较两个文件听起来很效率。为什么不将所有CSV组合到一个对象中,并用代表源的附加列组合。然后,您可以使用Group-Object
进行总结。这样的东西:
$path = 'C:PS_Temp{0}'
(ls *.csv).Name | % {
$file = $_
Write-Host $_
(Import-Csv ($path -f $_)).'Unique ID' | % {
New-Object psobject -Property @{
file = $file
id = $_
}
}
} | Group-Object id | % {
$_ | Add-Member -MemberType NoteProperty -Name Files -Value ($_.Group.file -Join '|') -PassThru
} | Select Name, Files, Count
这是一个仅使用唯一ID,但您可以将其扩展到其他列。
的简单示例。输出将是这样的:
Name Files Count
---- ----- -----
3 PIN-VUHOIWB06.csv|PIN-VUHOIWB09.csv 2
4 PIN-VUHOIWB06.csv|PIN-VUHOIWB09.csv 2
5 PIN-VUHOIWB06.csv|PIN-VUHOIWB09.csv 2
6 PIN-VUHOIWB06.csv|PIN-VUHOIWB09.csv 2
7 PIN-VUHOIWB06.csv 1
8 PIN-VUHOIWB06.csv 1
9 PIN-VUHOIWB06.csv 1
1 PIN-VUHOIWB09.csv 1
2 PIN-VUHOIWB09.csv 1
将其添加到您的代码:
$comparison = Compare-Object -ReferenceObject $IWB06 -DifferenceObject $IWB09 -Property 'Unique ID', 'name', 'caption', 'state', 'startmode', 'comparrison' -PassThru -IncludeEqual |
$comparison | Export-CSV -path $someFullPath