我有一个来自两个独立域的用户列表。 这些列表是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。