我有一个PowerShell脚本,用于生成发送到文件Dynamic.txt的数据。该脚本生成符合特定标准的服务器列表。该列表随后被处理。不过,我有大约20台符合列表中不需要的标准的服务器。根据静态文件中的数据从动态文件中删除文本
这是我的静态列表。我可以使用Foreach-Object {$_ -replace "xxx", ""}
命令从列表中删除服务器。然而,这是混乱的,我想要更干净的代码。如何根据Static.txt中的数据从Dynamic.txt中删除数据?
我有一个PowerShell脚本,用于生成发送到文件Dynamic.txt的数据。该脚本生成符合特定标准的服务器列表。该列表随后被处理。不过,我有大约20台符合列表中不需要的标准的服务器。根据静态文件中的数据从动态文件中删除文本
这是我的静态列表。我可以使用Foreach-Object {$_ -replace "xxx", ""}
命令从列表中删除服务器。然而,这是混乱的,我想要更干净的代码。如何根据Static.txt中的数据从Dynamic.txt中删除数据?
您可以使用Compare-Object cmdlet。
比较对象cmdlet比较两组对象。一组 对象是参考集,另一组是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,还有其他方法。你可以在可能会去像这样的脚本的某处使用过滤器(您可能需要切换各地$ _。名称和获取内容部分,以获得逻辑正确的。)
...| Where-Object {$_.Name -notmatch (Get-Content serverlist.txt)} | ...
要删除条目基于另一个文本文件中的条目一个文本文件,diff.txt的
$dynamic = Get-Content .\Dynamic.txt
$static = Get-Content .\Static.txt
$dynamic| where { $static -notcontains $_ }| Set-Content .\Dynamic.txt
说的内容应该等于文件X和法利的差异,然后用下面的代码
$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
这就是它。谢谢! – RaleighBP
将'Get-Content'放置在'Where-Object'语句中可能不是一个好主意,因为整个文件将被读取给每个通过管道的对象。运算符应该是'-notcontains',并且静态服务器数组应该位于运算符的左侧(尽管在PowerShell v3中有'-NotIn'运算符,它要求该数组位于右侧)。 'Where-Object'应该在条件语句周围有{}。 – Rynant
@RaleighBP - 请注意,如果在静态列表中出现任何不在动态列表中的服务器,“比较对象”CmdLet也会从静态列表中返回服务器,并且您必须检查'SideIndicator' – Rynant