我对PS很陌生,并且一直在解决特定问题。我试图了解AD中的内容与SCOM正在监控的内容之间的差异。基于此,我将运行发现或推出某些服务以及端口是否打开。
我已经能够使用Get-SCOMAgent和Get-ADComputer构建两个文件进行比较,它就像一个冠军。我的问题是比较对象在获取一个文件中存在而不存在于另一个文件中的内容方面有所限制。所以我想我会循环,看看我能找到什么。
"Looping through to compare files"
ForEach ($SERVER in Get-Content "c:\SCOM\XXXX\ServersInADFormatted.txt")
{
Compare-Object -ReferenceObject $(Get-Content "$SERVER") -DifferenceObject $(Get-Content "c:\scom\XXXX\ServersWithSCOMAgentsFormatted.txt") | Export-Csv -Path "c:\scom\XXXX\DIFFERENCES.csv"
}
更新:我现在尝试这个但没有得到任何输出:
ForEach ($SERVER in Get-Content "c:\SCOM\XXXX\ServersInADFormatted.txt")
{
select-string -path "c:\SCOM\XXXX\ServersWithSCOMAgentsFormatted.txt" -pattern $SERVER
}
实际上所有这些都需要像sdiff或grep一样,我可以导出到一个文件,我可以用它来使用SCOM PS API进行发现。我知道在win os中处理字符串的方式有所不同,但没有连接点。
非常感谢任何帮助。
#由于某些原因,比较不起作用。看似是服务器名后的空格数量的差异。这导致了不准确的结果,因为服务器实际上在两个地方,但比较maks看起来很独特。
两个文本文件都有这样的东西 server1.somedomain.com(最后一个字符后的空格)
我知道我需要去除空白并尝试过.Trimend但是当我在记事本中查看文件时仍然有空格。我需要一个CRLF,但这就是全部。
foreach($ SERVERSINAD中的$行) {$ SERVERSINAD = $ line.TrimEnd(); $ line + =" $ line`n" $ SERVERSINAD> FormattedFile }