2016-05-11 5 views
0

にADユーザグループメンバーシップを比較する場合のコマンド:PowerShellは、私はこのような何かをするためのロジックを把握しようとしているベースライン

  • クエリの特定のOU内のすべてのADグループが
  • クエリのすべてのユーザー任意のユーザが任意のユーザがグループのどれに属している場合の情報
  • 初期グループクエリ内の1つのまたは複数のグループ、出力に属している場合、特定のOUに
  • クエリのすべてのユーザーのグループが
  • をメンバーシップ初期のグループクエリでもその情報を出力する

私はこのサイトを掘り下げて、ほとんどの部分で動作するスクリプトを見つけましたが、ユーザーのグループメンバーシップを元のものと比較する方法が残っています私が引っ張っているグループクエリー。 compare-objectコマンドレットを使用できるように見えますが、パラメータには2つのオブジェクトが共通するグループの数を把握できるようなものは含まれていないようです。

私はオンラインで見つけるのコードは以下の通りです:

$groups = Get-ADGroup -Filter * | where {$_.distinguishedname -like "*,OU=TUNE_TEST_GROUPS,OU=TUNE_TEST,DC=tune,DC=priv"} 
$users = Get-ADUser -Filter * | where {$_.distinguishedname -like "*,OU=TUNE_TEST_USERS,OU=TUNE_TEST,DC=tune,DC=priv"} 

foreach ($User in $Users) { 
    $userGroups = Get-ADPrincipalGroupMembership $User 
    if ($userGroups.Count -gt 1) { 
     "{0} is a member of the following {1} groups:" -f $User.SamAccountName, $userGroups.Count 
     foreach ($group in $userGroups) { 
      "`t{0}" -f $group.Name 
     } 
    } elseif ($userGroups.Count -lt 1) { 
     "{0} is a member of the following {1} groups:" -f $User.SamAccountName, $userGroups.Count 
     foreach ($group in $userGroups) { 
      "`t{0}" -f $group.Name 
     } 
     } 
} 
これに伴う問題は、私はライン1 Iでグループクエリの名前のユーザーグループ名を比較する方法を持っていないということです

ユーザーがそのリストの1つ以上のグループに所属していると判断することもできません。私は同じカウント方法を使用できるかどうかはわかりません。

+0

実際に、私はただの中にネストされた場合/ else文でそれらを介して、CSVやループに両方の初期グループとユーザーのクエリをエクスポートすることができるかもしれないと思いますforeachループ。これを試してみましょう。 –

答えて

2

あなたはアカウントがCompare-Objectを使用して、参照リストから少なくとも1つのグループのメンバーであることを検証することができます

foreach ($User in $Users) { 
    $userGroups = Get-ADPrincipalGroupMembership $User 
    if (!(Compare-Object $userGroups $groups -IncludeEqual -ExcludeDifferent)) { 
     "{0} doesn't belong to any reference group." -f $User.SamAccountName 
    } 
} 

サイドノート:代わりにGet-ADUserGet-ADGroupの結果をフィルタリングする-SearchBaseパラメータを使用します識別名のワイルドカード一致によって:

$groups = Get-ADGroup -Filter * -SearchBase 'OU=TUNE_TEST_GROUPS,OU=TUNE_TEST,DC=tune,DC=priv' -SearchScope Subtree 
$users = Get-ADUser -Filter * -SearchBase 'OU=TUNE_TEST_USERS,OU=TUNE_TEST,DC=tune,DC=priv' -SearchScope Subtree 
+0

私の前のコメントは無視してください。これはうまくいくようです。私はちょうどチェックを逆にして+ $ userGroups.nameを追加し、見つけたそれぞれのマッチを追加しました。これが解決したと考えてください。 –

+0

奇妙なことは、そのグループが参照リストに存在しないにもかかわらず、リスト内の "Domain Users"グループを出力することだけです。大したことではない –

+0

実際には、これは両方の場所に同じグループが存在するかどうかを確認するためにのみ機能します。両方の場所に表示されるグループの名前を実際に出力したい場合、動作していないようです。ユーザーが所属するすべてのグループを出力するだけです。 –

0

私はフォローそれは私が必要とするもののためにうまくいきます。誰もが興味を持っている場合は、以下のサンプルコードは、次のとおりです。

#gets a list of all groups in a given OU and stores the objects in the $groups variable 
$groups = Get-ADGroup -Filter * -SearchBase 'OU=TUNE_TEST_GROUPS,OU=TUNE_TEST,DC=tune,DC=priv' -Properties name | select name 

#pipe each group object into a foreach loop and output a string value of the same group name and stores it into the $groups_string variable 
$groups_string = $groups | % {$_.name} 

#gets a list of all users in a given OU and stores the objects in the $users variable 
$users = Get-ADUser -Filter * -SearchBase 'OU=TUNE_TEST_USERS,OU=TUNE_TEST,DC=tune,DC=priv' 


[email protected]{ 
"Username" = "" 
"Groupname" = "" 
} 

[email protected]() 

#iterates through every user in the $users variable and retrieves their group memberships 
foreach ($user in $users) { 
    #selects each group name and stores it in the $groupMembership variable 
    $groupMembership = Get-ADPrincipalGroupMembership $user | select name 

    #compares the names of each user's group to the baseline group name. 
    $groupMembership | foreach ($_) { 

     #If there is a match add the group name and the username to the $results hash table 
     if ($groups_string -contains $_.name) { 
      $results."Groupname" = $_.name 
      $results."Username" = $user.Name 

      #create a new PS object and supply the properties of the $results hash table to each object 
      $objresults = New-Object psobject -Property $results 

      #add each object to the $table array 
      $table += $objresults 
     } 
    } 

} 

#display/output the $table array and format it to fit 
$table | ft -AutoSize 
関連する問題