0

我试图用一个 sql 数据库表来保持和 AD 组的最新状态。但我无法让我的逻辑正常工作,这是我的意思的一个示例:

    $group = "<ADGroupName>"
    $user = (Get-ADUser -Identity <sAMAccountName> -Properties MemberOf,sAMAccountName | Select-Object MemberOf,sAMAccountName)

    Function Add-ADUserToGroup{
        if ($user.MemberOf -notmatch $group){
            Add-ADGroupMember -Identity $group -Members $user.sAMAccountName
            }
        else{
            Wirte-Host "User is already a member of $group"
            }
        }

    Add-ADUserToGroup

如果我将我的 sAMAccountName 放入$user变量集中,并且如果我存在$group变量中指定的组,它仍然会尝试将我添加到组中并且失败,因为我已经存在于组中。我已经尝试过其他操作数来代替-notmatch诸如,-notin -ne但似乎没有任何东西可以正确评估 if 语句,我不知道为什么。谢谢你的帮助。

4

2 回答 2

2

试试这个:

$group = "<ADGroupName>"
$user = (Get-ADUser -Identity <sAMAccountName> -Properties MemberOf,sAMAccountName | Select-Object MemberOf,sAMAccountName)

Function Add-ADUserToGroup{
    if (-not ($user.MemberOf -match $group)){
        Add-ADGroupMember -Identity $group -Members $user.sAMAccountName
        }
    else{
        Wirte-Host "User is already a member of $group"
        }
    }

Add-ADUserToGroup

您正在对数组进行匹配,然后将结果转换为 IF 中的 [bool]。

$user.MemberOf -notmatch $group将返回用户所属的所有不匹配的组$group。如果返回任何结果,则 IF 的结果将为 True,并且它可能总是会找到一些。

于 2013-04-09T13:10:45.597 回答
0

所以,我找到了一个解决方案,它在操作数中。所以如果我用这个:

if ($user.MemberOf -notmatch $group){
     <Foo>
     }

if 语句根本无法正确评估,但是如果我使用它:

if (!($user.MemberOf -match $group)){
     <Foo>
     }

if 语句确实评估正确。我没有解释,但它有效。

于 2013-04-09T13:01:24.833 回答