【发布时间】:2014-10-04 08:31:10
【问题描述】:
我从两个不同的工具Array1 和Array2 中提取了两个计算机列表。
现在我需要提取Array1 中的那些,而不是Array2 中的那些。
我设法通过这样做获得了所有匹配的:
$matchingComp = @()
foreach ($SCCMcomputer in $SCCMcomputers) {
foreach ($eWPTcomputer in $eWPTcomputers) {
if ($SCCMcomputer.Computername -eq $eWPTComputer.Computername) {
$obj = New-Object PSObject
$obj | Add-Member -MemberType NoteProperty -Name "ComputerName" -Value $SCCMcomputer.Computername
$matchingComp +=$obj
}
}
}
$matchingComp | Export-Csv $inEWPT -Delimiter "," -NoTypeInformation
但我仍然需要$SCCMcomputer 中但不在$eWPTcomputers 中的那些...
我在 SO 上找到了一些使用其他语言(例如 Perl)的解决方案,但不适用于 PowerShell。
更新
我仍然没有得到正确的输出,在 Excel 中使用这个公式:
输出如下:
表示有些在这里,有些不在。 powershell中的输出是这样的
表示 0KB 是空的。
$SCCMcomputers | Export-Csv $sccmexport -Delimiter "," -NoTypeInformation
$eWPTcomputers | Export-Csv $ewptexport -Delimiter "," -NoTypeInformation
Compare-Object -ReferenceObject $SCCMcomputers -DifferenceObject $eWPTcomputers | ?{$_.sideIndicator -eq "=>"} |select inputobject | Export-Csv $inEWPT -NoTypeInformation
Compare-Object -ReferenceObject $SCCMcomputers -DifferenceObject $eWPTcomputers | ?{$_.sideIndicator -eq "=="} |select inputobject | Export-Csv $inBoth -NoTypeInformation
Compare-Object -ReferenceObject $SCCMcomputers -DifferenceObject $eWPTcomputers | ?{$_.sideIndicator -eq "<="} |select inputobject | Export-Csv $inSCCM -NoTypeInformation
并且来自 SCCMcomptuers/eWPTcomputers 的列名(或它的名称)都是“计算机名”
知道我做错了什么吗?这两个计算机数组都是从 SQL 和哈希表中生成的(我认为它被称为):@{Computername=......}@{Computername....,类似这样。
更新 2
foreach ($t in $sccmComputers) {
$Test1 += $t.computername
}
$Test2 = @()
foreach ($t in $ewptComputers) {
$Test2 += $t.computername
}
通过删除 Hashtable 的 Header 并让数组充满字符串的效果非常棒......即使 -Property computername 也不起作用......:S
【问题讨论】:
-
也许很高兴知道:我从两个不同服务器上的 PS SQL-Query 获得两个数组,当然还有两个不同的数据库 - 也许还有一种方法可以用 SQL 做到这一点?
标签: arrays powershell foreach