比较两个 CSV 文件并输出现有的相等性

Compare two CSV Files and output existing equalities

我主要是将 PC 名称的简短列表与我们的活动目录进行比较,第一个文件是我必须检查的电脑列表,第二个文件是我通过以下命令获得的广告列表

$ADcomputer = get-adcomputer -Filter "name -Like '*'" -Searchbase "DC=**,DC=******,DC=**"

($ADcomputer).name | Out-file "C:\temp\ADComputer.csv"

在这两个列表中,只有电脑名称在拆分“A”中,其中大多数都是像“PC23425”一样构建的,只是带有不同的数字(当然有一些例外,但我不需要只为电脑检查它们这个模式)。

list.csv是这样搭建的

PC020682
PC020891
PC020953
PC021999

我阅读了几篇关于此的文章,我非常确定我需要为此使用 foreach 循环,但由于我不经常使用 powershell,所以我不确定如何实现它。

我尝试的是

$Path = "C:\temp"
$ComputerList = Import-Csv -Path "$($path)\ADcomputer.csv"
$ComputerAchiv = Import-Csv -Path "$($path)\List.csv"
   

但我不知道如何构建 foreach 循环。

尽管是 CSV file format is not fully standardized, as mentioned by @Theo PowerShell expects the first row to be the header record by default. The header row will be used to define the property names of the object(s) eventually emitted by the Import-Csv cmdlet。如果您的 CSV 文件不包含 header 行,您可以使用 -Header参数,例如:-Header username.
对于 PowerShell,您的文件是简单的列表(没有属性),您可以使用 Get-Content cmdlet:

读取它们
$ComputerList = Get-Content -Path "$($path)\ADcomputer.csv"
$ComputerAchiv = Get-Content -Path "$($path)\List.csv"

要找出列表共享的项目,您可以使用 Where-Object cmdlet:
(另见:Comparing two arrays & get the values which are not common

$ComputerList |Where-Object { $ADcomputer.name -eq $_ }

下一级

尽管这可能是对您问题的直接回答。它可能不会给你带来太多,因为你可能 do 想要处理 PowerShell 标准 CSV 文件(意思是 PowerShell object 列表)并加入这些文件。为此,请参见例如:In Powershell, what's the best way to join two tables into one?