从另一个文本文件中删除一个文本文件中的String

时间:2016-05-06 20:33:19

标签: powershell

我有两个文本文件。一个拥有域中的所有服务器(servers_all.txt),另一个只有虚拟服务器(virtual_servers.txt)。我想得到两者之间的差异所以我可以找到物理服务器。我一直在使用compare-object而无济于事

Compare-Object (gc servers_all.txt) (gc .\VIRTUAL_SERVERS.TXT) -IncludeEqual

有没有办法可以从servers_all.txt删除virtual_servers.txt中列出的服务器。

两个txt文件的格式相同,只有一列中的服务器名称,即:

ServerA
ServerB
ServerC

2 个答案:

答案 0 :(得分:2)

比较对象有点迟钝(说得客气一点)。我避免它。

$VirtualServers = Get-Content .\VIRTUAL_SERVERS.TXT;
$NonVirtualServers = Get-Content servers_all.txt | Where-Object { $_ -notin $VirtualServers };

这里唯一需要注意的是文件格式错误,如前导或尾随空格。如果你想处理它,你可以做类似的事情:

$VirtualServers = Get-Content .\VIRTUAL_SERVERS.TXT | ForEach-Object { $_.Trim() };
$NonVirtualServers = Get-Content servers_all.txt | ForEach-Object { $_.Trim() } | Where-Object { $_ -notin $VirtualServers };

答案 1 :(得分:0)

$all = 'a','b','c','d'
$virtual = 'b','c'

Compare-Object $all $virtual -PassThru

- >

a
d