powershell foreach显示重复的结果



我使用powershell自动从CSV文件中提取选定的数据。我的$target_servers也包含两个相同的服务器名称,但它在每一行有不同的数据。

下面是我的代码:
$target_servers = Get-Content -Path  D:UsersToolswindowstarget_prd_servers.txt
foreach($server in $target_servers) {
Import-Csv $pathServerlist_Template.csv | Where-Object {$_.Hostname -Like $server} | Export-Csv -Path $path/windows_prd.csv -Append -NoTypeInformation
}

在执行上述代码后,它根据TXT文件提取CSV数据,但我的问题是一些结果是重复的。

我期待大约28个结果,但它给了我大约49个。

如前所述,-Append是这里的罪魁祸首,您应该检查新添加的记录是否已经存在于输出文件中:

# read the Hostname column of the target csv file as array to avoid duplicates
$existingHostsNames = @((Import-Csv -Path "$path/windows_prd.csv").Hostname)
$target_servers = Get-Content -Path  D:UsersToolswindowstarget_prd_servers.txt
foreach($server in $target_servers) {
Import-Csv "$pathServerlist_Template.csv" |
Where-Object {($_.Hostname -eq $server) -and ($existingHostsNames -notcontains $_.HostName)} | 
Export-Csv -Path "$path/windows_prd.csv" -Append -NoTypeInformation
}

您可以将数据转换为对象数组,然后使用select -Unique,如下所示:

$target_servers = Get-Content -Path  D:UsersToolswindowstarget_prd_servers.txt
$data = @()
foreach($server in $target_servers) {
$data += Import-Csv $pathServerlist_Template.csv| Where-Object {$_.Hostname -Like $server}
}
$data | select -Unique | Export-Csv -Path $path/windows_prd.csv -Append -NoTypeInformation

只有当重复的行在每列中具有相同的值时才会工作。如果没有,您可以将列名传递给select,这对您很重要。为例:

$data | select Hostname -Unique | Export-Csv -Path $path/windows_prd.csv -Append -NoTypeInformation

它会给你唯一的主机名列表。

相关内容

  • 没有找到相关文章

最新更新