针对GivenName和Surname

时间:2018-10-04 23:25:45

标签: powershell powershell-remoting

我有下面的函数,但是运行它时在第12行出现语法错误。

如果我在Powershell ISE中隔离Get-ADuser命令并使用相同的拆分代码等为它传递名称,它将返回预期的用户对象。但是,我知道在本地计算机上运行代码可能与脚本有所不同,因为它建立了一个远程pssession来获取脚本另一部分的Exchange命令集。

我还尝试了几种变体:

$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是活动目录参数的数组,例如:giveName,sn,samAccountName,职称,部门,经理等。

功能:

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:解析查询时出错:'(GivenName像$ fn)-和(Surname像$ sn)'。错误消息:位置“ 12”处出现“语法错误”。

1 个答案:

答案 0 :(得分:0)

我已经通过使用以下方法解决了这个问题:

$firstlast = get-aduser -server $adDomainControllerHostName -filter "(surname -eq '$($sn)') -and (givenname -eq '$($fn)')"

轻微的语法更改,例如删除其周围的{},用引号替换并使用$()包围变量