Powershell Compare对象并将差异获取到文件中

Powershell Compare对象并将差异获取到文件中,powershell,compareobject,Powershell,Compareobject,我对PS真的是个新手,在一个特殊的问题上一直在绞尽脑汁。我试图找出AD中的内容与SCOM已经在监控的内容之间的差异。基于此,我将运行一个发现或推出一个特定服务的外观,如果端口是开放的 我已经能够使用Get-SCOMAgent和Get-ADComputer构建两个文件进行比较,它的工作方式就像champ。我的问题是,比较对象在获取一个文件中存在的内容而不是另一个文件中存在的内容时受到了一定的限制。所以我想我应该循环一下看看能找到什么 通过循环来比较文件 获取内容c:\SCOM\XXXX\Serve

我对PS真的是个新手,在一个特殊的问题上一直在绞尽脑汁。我试图找出AD中的内容与SCOM已经在监控的内容之间的差异。基于此,我将运行一个发现或推出一个特定服务的外观,如果端口是开放的

我已经能够使用Get-SCOMAgent和Get-ADComputer构建两个文件进行比较,它的工作方式就像champ。我的问题是,比较对象在获取一个文件中存在的内容而不是另一个文件中存在的内容时受到了一定的限制。所以我想我应该循环一下看看能找到什么

通过循环来比较文件 获取内容c:\SCOM\XXXX\ServersInADFormatted.txt中的ForEach$SERVER { 比较对象-引用对象$Get Content$SERVER-差异对象$Get Content c:\scom\XXXX\serverswithscomagntsformated.txt |导出Csv-路径c:\scom\XXXX\DIFFERENCES.Csv } 更新:我正在尝试此操作,但没有得到任何输出:

获取内容c:\SCOM\XXXX\ServersInADFormatted.txt中的ForEach$SERVER { 选择string-path c:\SCOM\XXXX\serverswithscomagntsformated.txt-pattern$SERVER } 实际上,所有这些都需要像sdiff或grep一样工作,我可以将其导出到一个文件,我可以使用SCOM PS API进行发现。我知道win操作系统处理字符串的方式存在差异,但不连接点

非常感谢您的帮助

由于某种原因,比较不起作用。表面上看,这是服务器名后面空格数量的差异。这导致了不准确的结果,因为服务器实际上在这两个地方,但比较使它们看起来独特

两个文本文件都有类似的内容 server1.somedomain.com最后一个字符后的空格

我知道我需要去掉空白,并尝试了.Trimend,但当我在记事本中查看文件时,仍然有空白。我需要一个CRLF,但仅此而已

$SERVERSINAD中的foreach$行 {$SERVERSINAD=$line.TrimEnd;$line+=$line`n $SERVERSINAD>FormattedFile
}

Compare对象无疑是一个更脆弱的cmdlet。它的行为和其他任何东西都不一样。如果包含-Passthru公共参数,它的行为通常会更明智。备份,选择两个文件,让语法按照您的意愿工作。然后让它在一个循环中工作。或者,您可以忽略Compare对象,使用GetContentCAT构建自己的循环,并选择String几乎grep。除此之外,我在这里看不到任何问题。能否在ForEach循环中添加一个写入主机$SERVER,并确保$SERVER与您期望的匹配?谢谢。我确实试过了,数据返回的时候看起来像是一个cat/类型的文件。然而,试图从select字符串获取输出不会产生任何结果。我尝试了直接文件重定向>和>>输出管道中的文件,但没有从文件中得到$SERVER in循环。我必须缺少一些东西你能编辑并添加一些文本文件内容和输出的例子吗?代码的第一个循环尝试加载名为servername的文件的内容,并将其与另一个文件进行比较,然后每次通过循环导出CSV,每次都覆盖输出文件。第二个文件看起来应该可以工作,但可能两个文件的格式不同或冲突。一个比较就可以了:compare-Ref gc ADservers.txt-Diff gc SCOMservers.txt | Where SideIndicator-eq谢谢!谢谢你,Tessellingheckler!!!就这样!!我是如此的快乐和感激!!!你太牛了