Powershell与属性的比较

Powershell与属性的比较,powershell,server,active-directory,Powershell,Server,Active Directory,我是powershell的初学者,需要你的帮助。 我需要比较包含一些文本的广告中的department属性,并替换为另一个值。 但它不起作用。我犯了下面的错误吗?干杯 //Find the user and save the user in the variable $member = get-Aduser -f {GivenName -eq 'Jack'} //check if the Departement field match with "Dep20 " if($member.dep

我是powershell的初学者,需要你的帮助。 我需要比较包含一些文本的广告中的department属性,并替换为另一个值。 但它不起作用。我犯了下面的错误吗?干杯

//Find the user and save the user in the variable 
$member = get-Aduser -f {GivenName -eq 'Jack'}

//check if the Departement field match with "Dep20 "
if($member.department -eq "Dep20")
{
    //Set "Dep21" in department field
    $member.Department = 'Dep21';
    set-AdUser -f {GivenName -eq $member.givenName} -departement $member.Department;
}

您的初始脚本存在一些问题

首先 默认情况下,Get AdUser不会为您提供物业部门。 您可以通过实际查看Get AdUser语句的输出来确认这一点。您确实需要明确地将其添加到属性列表中

get-Aduser -f {GivenName -eq 'Jack'} -Properties Department
此外,您在Set-AdUser cmdlet中确实犯了错误。在我回答时,您编写的参数名是-department。相反,您需要设置-department

最后,Get AdUser可以返回多个用户(或无用户)。 因此,您需要通过检查返回了多少$member来说明这一点,或者执行foreach来处理任何一个(如果为0)或所有相同的成员。 至少,这一部分是主观的,你需要什么,但这里将是我的方法

$member = get-Aduser -Filter 'GivenName -like "Jack*"' -Properties Department
$member | foreach {
    if ($member.Department -eq 'Dep20')
    {
        $_.Department = 'Dep21'
        set-AdUser $_  -Department $_.Department;
    }
}

编辑:

我修改了我的答案,根据mklement0注释将筛选参数从scriptblock(如您的问题)切换为字符串筛选

因为Filter参数实际上是一个字符串,给它一个脚本块会在多种情况下产生问题,您最好将自己限制为该参数的字符串类型


有关此问题的详细说明,请参阅。

欢迎使用StackOverflow。你能用收到的错误更新问题吗?