搜索 GivenName 和 Surname 时出现 Get-ADUser 语法错误
Get-ADUser syntax error when searching against GivenName and Surname
我有下面的函数,但是当 运行 它时,我在第 12 行遇到语法错误。
如果我在 Powershell ISE 中隔离 Get-ADuser 命令并为其传递一个名称,使用相同的拆分代码等,它 returns 预期的用户对象。但是我知道我本地机器上的 运行 代码可能与我的脚本有点不同,因为它建立了一个远程 pssession
来为脚本的另一部分获取 Exchange commandlet。
我也尝试了几种变体:
$firstlast = get-aduser -server $adDomainControllerHostName -filter {sn -like $names[1] -and givenname -like $names[0]}
$firstlast = get-aduser -server $adDomainControllerHostName -filter {GivenName -like $fn -and Surname -like $sn}
函数是这样调用的:
$ADProps.manager = getManagerSAMAccountName -manager $ADProps.manager -adDomainControllerHostName $DC;
$ADProps
是一组活动目录参数,如 givenName、sn、samAccountName、title、department、manager 等
函数:
function getManagerSAMAccountName($manager, $adDomainControllerHostName){
if ($manager.trimEnd() -eq "") {
Write-Host ("*** WARNING *** : Manager name not provided.")
return ""
}
if ((test-user -samaccountname $manager -addomaincontrollerhostname $adDomainControllerHostName)) {
return $manager
} else {
$names = $manager.split("\s+")
$fn = $names[0]
$sn = $names[1]
if ($names -is [system.array]) {
$firstlast = get-aduser -server $adDomainControllerHostName -filter {(surname -eq $sn) -and (givenname -eq $fn)}
if ($firstlast -ne $null -and !($firstlast -is [array]) ) {
return $firstlast.samAccountName
}
$lastfirst = get-aduser -filter {(surname -eq $fn) -and (givenname -eq $sn)}
if ($lastfirst -ne $null -and !($lastfirst -is [array]) ) {
return $lastfirst.samAccountName
}
}
OutputLog("*** Warning: Manager name " + $manager + " appears to be ambiguous or invalid. Please provide a user id instead, such as ... Will try using the template's manager instead.")
return ""
}
}
错误行:
$firstlast = get-aduser -server $adDomainControllerHostName -filter {(surname -eq $sn) -and (givenname -eq $fn)}
Get-ADUser : Error parsing query: '(GivenName like $fn) -and (Surname like $sn)'. Error message: 'syntax error' at position '12'.
我已经通过使用解决了这个问题:
$firstlast = get-aduser -server $adDomainControllerHostName -filter "(surname -eq '$($sn)') -and (givenname -eq '$($fn)')"
轻微的语法更改,例如删除周围的 {}
,替换为引号并使用 $() 包围变量
我有下面的函数,但是当 运行 它时,我在第 12 行遇到语法错误。
如果我在 Powershell ISE 中隔离 Get-ADuser 命令并为其传递一个名称,使用相同的拆分代码等,它 returns 预期的用户对象。但是我知道我本地机器上的 运行 代码可能与我的脚本有点不同,因为它建立了一个远程 pssession
来为脚本的另一部分获取 Exchange commandlet。
我也尝试了几种变体:
$firstlast = get-aduser -server $adDomainControllerHostName -filter {sn -like $names[1] -and givenname -like $names[0]}
$firstlast = get-aduser -server $adDomainControllerHostName -filter {GivenName -like $fn -and Surname -like $sn}
函数是这样调用的:
$ADProps.manager = getManagerSAMAccountName -manager $ADProps.manager -adDomainControllerHostName $DC;
$ADProps
是一组活动目录参数,如 givenName、sn、samAccountName、title、department、manager 等
函数:
function getManagerSAMAccountName($manager, $adDomainControllerHostName){
if ($manager.trimEnd() -eq "") {
Write-Host ("*** WARNING *** : Manager name not provided.")
return ""
}
if ((test-user -samaccountname $manager -addomaincontrollerhostname $adDomainControllerHostName)) {
return $manager
} else {
$names = $manager.split("\s+")
$fn = $names[0]
$sn = $names[1]
if ($names -is [system.array]) {
$firstlast = get-aduser -server $adDomainControllerHostName -filter {(surname -eq $sn) -and (givenname -eq $fn)}
if ($firstlast -ne $null -and !($firstlast -is [array]) ) {
return $firstlast.samAccountName
}
$lastfirst = get-aduser -filter {(surname -eq $fn) -and (givenname -eq $sn)}
if ($lastfirst -ne $null -and !($lastfirst -is [array]) ) {
return $lastfirst.samAccountName
}
}
OutputLog("*** Warning: Manager name " + $manager + " appears to be ambiguous or invalid. Please provide a user id instead, such as ... Will try using the template's manager instead.")
return ""
}
}
错误行:
$firstlast = get-aduser -server $adDomainControllerHostName -filter {(surname -eq $sn) -and (givenname -eq $fn)}
Get-ADUser : Error parsing query: '(GivenName like $fn) -and (Surname like $sn)'. Error message: 'syntax error' at position '12'.
我已经通过使用解决了这个问题:
$firstlast = get-aduser -server $adDomainControllerHostName -filter "(surname -eq '$($sn)') -and (givenname -eq '$($fn)')"
轻微的语法更改,例如删除周围的 {}
,替换为引号并使用 $() 包围变量