根据静态文件中的数据从动态文件中删除文本

时间:2011-11-02 13:15:19

标签: powershell

我有一个powershell脚本,可以生成发送到Dynamic.txt文件的数据。该脚本生成满足特定条件的服务器列表。然后处理该列表。但是,我有大约20台服务器符合我不想要的标准。

这是我的静态列表。我可以使用Foreach-Object {$_ -replace "xxx", ""}命令从列表中删除服务器。然而,这是凌乱的,我想要更清洁的代码。如何根据Static.txt中的数据从Dynamic.txt中删除数据?

3 个答案:

答案 0 :(得分:1)

您可以使用Compare-Object cmdlet。

  

Compare-Object cmdlet比较两组对象。一套   objects是Reference集,另一个是Difference集。

这是一些示例代码。

colors.txt的内容:

red
green
blue
pink

notcolors.txt的内容:

green

命令和输出:

compare-object (Get-Content "notcolors.txt") (Get-Content "colors.txt") | FL


InputObject   : red
SideIndicator : =>

InputObject   : blue
SideIndicator : =>

InputObject   : pink
SideIndicator : =>

只需从结果中选择InputObject即可为您提供正确的服务器列表。

这是powershell,还有其他方法。您可以在脚本中的某处使用过滤器,这可能类似于此(您可能需要切换$ _.Name和Get-Content部分以使逻辑正确。)

...| Where-Object {$_.Name -notmatch (Get-Content serverlist.txt)} | ...

答案 1 :(得分:1)

根据另一个文本文件中的条目从一个文本文件中删除条目

$dynamic = Get-Content .\Dynamic.txt
$static = Get-Content .\Static.txt

$dynamic| where { $static -notcontains $_ }| Set-Content .\Dynamic.txt

答案 2 :(得分:0)

说diff.txt的内容应该等于fileX和fileY的差异然后使用下面的代码

$fileA = 'fileA.txt'
$fileB = 'fileB.txt'
$diff = 'diff.txt'

$fileAContent = Get-Content $fileA -Encoding UTF8
$fileBContent = Get-Content $fileB -Encoding UTF8
$fileAContent| where { $fileBContent -notcontains $_ }| Set-Content $diff