我只想 select PowerShell 中 CSV 文件中的唯一项目

I would like to select only unique items from a CSV file in PowerShell

我有一个没有 header 或列名的 CSV 文件。 数据是 IP 地址列表

 112.64.127.98
 112.64.127.98
 112.64.127.98
 58.18.221.37
 58.18.221.37
 89.165.3.1
 89.165.3.1
 89.165.3.1
 89.165.3.1
 89.165.3.1
 89.165.3.1

我想select每组只有一个。 我似乎找不到任何方法来做到这一点,因为我没有 header 或列名。 我找到的所有方法都指向带有 header.

的 select 语句

我试过使用这种方法:

$SQLFailedIPcsv =  $SQLFailedIPcsv|sort-object | Get-Unique –AsString

但这似乎不起作用。知道如何 select 这些 IP 中的每一个吗?

您可以使用 Import-Csv 导入文件并使用 -Header IP 创建一个 header。这将为您的 IP 地址数据提供一个名称为 IP 的 header。

要获得唯一的 IP 地址,我们可以将其通过管道传输到 Select-Object,用 -ExpandProperty 扩展列 属性,然后用 -Unique 获得唯一的项目。

Import-Csv -Path .\ip.csv -Header IP | Select-Object -ExpandProperty IP -Unique

这将给出唯一的 IP 地址:

112.64.127.98
58.18.221.37
89.165.3.1

如果我们想保留 IP 列 header,我们可以使用 -Property 代替:

Import-Csv -Path .\ip.csv -Header IP | Select-Object -Property IP -Unique

这将给出:

IP
--
112.64.127.98
58.18.221.37
89.165.3.1

更新

如果我们想使用 foreach 枚举,我们可以将其包装在脚本块中并使用 Call operator &。然后我们可以将它通过管道传递给 Select-Object -Unique

$csv = Import-Csv -Path .\ip.csv -Header IP

& {
    foreach ($row in $csv) {
        $row.IP
    }
} | Select-Object -Unique

# 112.64.127.98
# 58.18.221.37
# 89.165.3.1

因为这只是一个 IP 地址列表,每个都在其自己的行上,您可以这样做

Get-Content -Path 'X:\TheFile.csv' | Select-Object -Unique