我有一个powershell脚本,可以生成发送到Dynamic.txt文件的数据。该脚本生成满足特定条件的服务器列表。然后处理该列表。但是,我有大约20台服务器符合我不想要的标准。
这是我的静态列表。我可以使用Foreach-Object {$_ -replace "xxx", ""}
命令从列表中删除服务器。然而,这是凌乱的,我想要更清洁的代码。如何根据Static.txt中的数据从Dynamic.txt中删除数据?
答案 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