我使用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
它会给你唯一的主机名列表。