1

AD の特定の OU の 1 つ以上のグループのメンバーである無効なユーザーを見つけるスクリプトを作成しようとしています。次に、すべての無効なユーザーのすべてのグループを削除します。csv ファイル内のユーザーからすべてのグループを削除するこのスクリプトを見つけましたが、これをスケジュールされたタスクとして実行しようとしているので、別の OU に移動することなく、既にグループが削除されているユーザーを処理したくありません。

Import-Csv $csvFile | ForEach-Object {
    # Disable the account
    Disable-ADAccount -Identity $_.samAccountName
    # Retrieve the user object and MemberOf property
    $user = Get-ADUser -Identity $_.samAccountName -Properties MemberOf
    # Remove all group memberships (will leave Domain Users as this is NOT in the MemberOf property returned by Get-ADUser)
    foreach ($group in ($user | Select-Object -ExpandProperty MemberOf))
    {
        Remove-ADGroupMember -Identity $group -Members $user -Confirm:$false
    }
}

複数のグループを持つユーザーを除外する方法について何か考えはありますか? このスクリプトを使用して、60 日間ログオンしていない無効なユーザーをエクスポートしています。

Get-QADUser -searchRoot $OuDomain -searchScope OneLevel -InactiveFor 61 -NotLoggedOnFor 61 -disabled -sizelimit 0

どうも

4

1 に答える 1

0

良いオウパートダウンでフィルターをかけているようです。投稿の最初にいくつかの考えがありますが、唯一の実際の問題は、複数のグループを持つユーザーを除外する方法です。それがタイプミスかどうかはわかりませんが、ユーザーが持っているグループの数をチェックしていると読みました。より現実的な解釈は、グループのリストの少なくとも 1 つを持つことができるフィルター ユーザーです。私は両方をカバーするつもりです。

カウント

これはあなたが望むものではないと確信していますが、ベースをカバーしたいだけです。以下もWhere-Object節で機能します

If((get-aduser $user -Properties MemberOf).MemberOf.Count -gt 0){Process...}

複数のグループ

これはあなたの意図だったと確信しています。サーバー グループの 1 つを含む可能性のあるユーザーを見つけます。これは正規表現で処理するのが最適です。

$groupsFilter = "citrix_GateKeeper","barracuda_spam_alerts"
$groupsFilter = "($($groupsFilter -join '|'))"
# $groupsFilter in this example is: (citrix_GateKeeper|barracuda_spam_alerts)

If(((Get-ADUser $user -Properties MemberOf).MemberOf) -match $groupsFilter){Process....}

複数のグループの文字列配列に基づいて正規表現一致文字列を作成します。$user がこれらのグループのいずれかのメンバーである場合、true が返されます。

ここに何も役に立たない場合は、質問をより明確にすることをお勧めします。うまくいけば、これが役に立ちます。

于 2014-11-01T01:47:21.413 に答える