我对 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 操作系统中处理字符串的方式存在差异,但没有连接点。
任何帮助是极大的赞赏。
#由于某种原因,比较不起作用。似乎是服务器名称后空格数量的差异。这会导致结果不准确,因为服务器实际上位于这两个地方,但比较使它们看起来很独特。
两个文本文件都有类似 server1.somedomain.com 的内容(最后一个字符后的空格)
我知道我需要去掉空格并尝试过 .Trimend 但是当我在记事本中查看文件时仍然有空格。我需要一个 CRLF,但仅此而已。
foreach ($SERVERSINAD 中的 $line) { $SERVERSINAD = $line.TrimEnd(); $line += "$line`n" $SERVERSINAD >FormattedFile }