我有一个csv文件,这个脚本可以正常工作。
$CCure = Import-csv C:\Scripts\file1.csv
ForEach ($user in $CCure) {
[string]$1Name = $User.FirstName
[string]$2Name = $User.LastName
[string]$GivenName = $1Name.Split(" ")[0]
[string]$SN = $2Name.Split(",")[0]
[string]$ID = $User.ObjectID
[string]$EmpID = $User.Int5 |
Select @{Name="First Name";Expression={$GivenName}}, @{Name="Last Name";Expression={$SN}}, @{Name="CCure ObjectID";Expression={$ID}}, @{Name="CCure Int5 Row";Expression={$EmpID}} |
Export-csv C:\Scripts\CCure\CCure-Names-Test.csv -Append -notypeinformation
}
然而,当我尝试使用类似的脚本进入AD并希望使用RegEx时,事情不起作用。它似乎挂起或运行时,SurName丢失。为什么第二个不起作用?我一定错过了一些简单的东西?
$Users = Get-ADUser -LDAPFilter "(&(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2))" -properties samaccountname,givenname,sn
ForEach ($User in $Users) {
[string]$1Name = $User.GivenName
[string]$2Name = $User.SN
[string]$GivenName = $1Name.Split(" ")[0]
[string]$SN = $2Name.Split(",")[0] |
Select @{Name="First Name";Expression={$GivenName}}, @{Name="Last Name";Expression={$SN}},@{Name="SID";Expression={$User.samaccountname}}| Export-Csv C:\scripts\ccure\AD-Active-Names3.csv -NoTypeInformation -append
}
答案 0 :(得分:1)
在您的第二个示例中,$sn
将为null。这是因为您具有尾随管道字符。此问题也出现在$EmpID
的第一个代码块中。最后一个命令Export-CSV
不返回输出流,因此两种情况下的变量都是$null
。
您正在获取$2Name.Split(",")[0]
的结果并将其发送到管道中,然后该管道将不会用于Select-Object
。
所以简单的答案是删除管道字符,这两行现在将分开工作。
[string]$SN = $2Name.Split(",")[0]
Select @{Name="First Name";Expression={$GivenName}}, @{Name="Last Name";Expression={$SN}},@{Name="SID";Expression={$User.samaccountname}}| Export-Csv C:\scripts\ccure\AD-Active-Names3.csv -NoTypeInformation -append
如果要更改属性名称和值,请考虑创建自己的对象。这应该完成同样的事情,更容易阅读和利用管道。
$Users = Get-ADUser -LDAPFilter "(&(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2))"
$Users | ForEach-Object {
$props = @{
"First Name" = ($_.GivenName).Split(" ")[0]
"Last Name" = ($_.SurName).Split(",")[0]
"SID" = $_.samaccountname
}
New-Object -TypeName psobject -Property $props
} | Select-Object "First Name","Last Name",SID | Export-Csv C:\scripts\ccure\AD-Active-Names3.csv -NoTypeInformation
您将注意到我使用$_.SurName
作为属性名称,因为PowerShell AD对象不直接匹配其LDAP属性名称。如果您尝试访问$_.SN
,则会获得空值。 GivenName
,Surname
和SID
是默认返回的值集的一部分,因此您不需要 来请求它们。
查看about_ActiveDirectory_ObjectModel,您会在AdUser下看到:
Surname - System.String类型的属性,派生自directory属性:sn
如果未填充Surname或GivenName,您仍会遇到此错误。如果这将是一个问题,那么这将是一个简单的if语句。