在Get-ADUser筛选参数中传递string会导致在pscustomobject中找不到错误属性
我正在尝试创build一个新的Active Directory用户,但首先validation用户不存在与Get-ADUser
。 我从我们的人力资源部门导入用户数据并构build自定义属性:
$newUsers = Import-Csv $csvFile | Select-Object -Property @{n='EmpNum';e={$_.'Employee Number'}}, @{n='UPN';e={$_.'Email Address'}}, @{n='Alias';e={$_.'Email Address'.Split("@")[0]}} #### etc
当我从CSV文件中循环访问对象时,我使用UPN属性在Active Directory中search用户:
foreach ($newUser in $newUsers) { $exists = Get-ADUser -Filter {UserPrincipalName -eq $newUser.UPN} -Properties * -Server $adServer -Credential $adCred ... }
该filter导致错误:
Get-ADUser : Property: 'UPN' not found in object of type: 'System.Management.Automation.PSCustomObject'. At C:\Users\bphillips.NEWHOPEOFIN\Dropbox\Powershell\NewHire\AddNewDSP.ps1:50 char:15 + $exists = Get-ADUser -Filter {UserPrincipalName -eq $newUser.UPN} -Propertie ...
我试过这样做:-Filter {UserPrincipalName -eq $(“$ newUser.UPN”)但这并没有帮助; 我得到另一个错误
Get-ADUser : Cannot process argument because the value of argument "path" is not valid. Change the value of the "path" argument and run the operation again. At C:\Users\bphillips.NEWHOPEOFIN\Dropbox\Powershell\NewHire\AddNewDSP.ps1:50 char:15 + $exists = Get-ADUser -Filter {UserPrincipalName -eq $("$newUser.UPN")} -Prop ...
$newUser
是一个string,所以我不明白为什么会导致一个问题。 对UserPrincipalName进行硬编码,例如“test@ourcompany.com”,但$newUser.UPN
不起作用。**
PS C:\> $newUser.UPN.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True String System.Object
和
PS C:\> $newUser.UPN | gm TypeName: System.String
$newUser.UPN
包含一个有效的string值
PS C:\> $newUser.UPN ypope@ourcompany.net
我需要做些什么来获得$newUser.UPN
被识别为filter参数的string? 怎么回事,我不明白?
filter查询string的BNF不允许expression式作为比较中的第二个操作数,只有值(强调我的):
句法:
以下语法使用Backus-Naur格式来显示如何使用PowerShellexpression式语言来使用此参数。<filter> :: =“{”<FilterComponentList>“}”
<FilterComponentList> :: = <FilterComponent> | <FilterComponent> <JoinOperator> <FilterComponent> | <NotOperator> <FilterComponent>
<FilterComponent> :: = <attr> <FilterOperator> <value> | “(”<FilterComponent>“)”
<FilterOperator> :: =“-eq”| “-le”| “-ge”| “-ne”| “-lt”| “-gt” | “-approx”| “-bor”| “ – 带”| “-recursivematch”| “-like”| “-不喜欢”
<JoinOperator> :: =“ – 和”| “-要么”
<NotOperator> :: =“ – 不”
<attr> :: = <PropertyName> | <属性的LDAPDisplayName>
<value> :: = <使用指定的<FilterOperator >>将此值与<attr>进行比较
将要比较的属性的值放入一个variables中,并在比较中使用该variables。 如果只是为了清楚起见(尽pipe它看起来像filter不是一个脚本块),您也可能想要将filter定义为一个实际的string。
$upn = $newUser.UPN $exists = Get-ADUser -Filter "UserPrincipalName -eq '$upn'" ...
expression式可以在Get-ADUser
的filter块中,但是它们需要用引号正确包装。
Get-ADUser -Filter "UserPrincipalName -eq '$($newUser.UPN)'"