使用比较对象比较CSV的两个特定属性并没有给出预期的结果

我有一个来自两个独立域的用户列表。 这些列表是CSV格式,我只关心SAMAccountName,这是CSV中的一个字段。

我正在使用的代码是:

$domain1 = Import-CSV C:\Scripts\Temp\domain1.xxx.org.csv | Select-Object SAMAccountName $domain2 = Import-CSV C:\Scripts\Temp\domain2.xxx.org.csv | Select-Object SAMAccountName Compare-Object ($domain1) ($domain2) 

这只是返回一些结果(这是不准确的)在这种格式:

 @{samaccountname=SomeUser} => 

显然,比较对象不会将对象评估为string。 我该如何做这项工作?

给定示例CSV文件“domain1.xxx.org.csv”,内容为:

 "name","samaccountname","description","distinguishedname","enabled","lastlogondate" "ADAUser01","ADAUser01",,"CN=ADAUser01,OU=Users,OU=ADA,DC=phl,DC=xxx,DC=ORG","True","8/7/2012 2:28:37 PM" 

我们可以看到Import-Csv如何使用标题将文本转换为PSCustomObject:

 Import-Csv domain1.xxx.org.csv | Select-Object -First 1 | Get-Member TypeName: Selected.System.Management.Automation.PSCustomObject Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() description NoteProperty System.String description= distinguishedname NoteProperty System.String distinguishedname=CN=ADAUser01,OU=Users,OU=ADA,DC=phl,DC=xxx,DC=ORG enabled NoteProperty System.String enabled=True lastlogondate NoteProperty System.String lastlogondate=8/7/2012 2:28:37 PM name NoteProperty System.String name=ADAUser01 samaccountname NoteProperty System.String samaccountname=ADAUser01 

通过Select-Object SAMAccountName过滤这个结果如下:

 Import-Csv domain1.xxx.org.csv | Select-Object -First 1 SamAccountName TypeName: Selected.System.Management.Automation.PSCustomObject Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() samaccountname NoteProperty System.String samaccountname=ADAUser01 

如果你想比较两个PSCustomObjects中的NoteProperty,因为我们不只是评估一个string,你只需要告诉Compare-Object哪个属性你想比较:

 Compare-Object $domain1 $domain2 -Property SamAccountName 

另一种达到同样效果的方法是在select对象中使用-ExpandProperty:

 $domain1 = Import-CSV C:\Scripts\Temp\domain1.xxx.org.csv | Select-Object -ExpandProperty SAMAccountName $domain2 = Import-CSV C:\Scripts\Temp\domain2.xxx.org.csv | Select-Object -ExpandProperty SAMAccountName 

在几乎所有的情况下,当我只是select一个属性与select对象时,-ExpandProperty得到我真正想要的 – 在这种情况下,原始string。