0

指定したユーザー アカウントのグループ メンバーシップを見つけようとしています。多くの場合、1 つのドメインのユーザー アカウントは、他のドメインのグループのメンバーです (ドメインによっては、別の管理者アカウントが必要です)。get-QAQgroup を使用すると、各ドメインを個別に検索できますが、ドメインをループしようとすると、ログインしているドメインでしか結果が見つかりません。#ドメインを変更し、指定されたユーザー アカウントのグループ メンバーシップを探すスクリプト。

$domains = "dom1.ad.state.company.com","dom2.ad.state.company.com","dom3.ad.state.company.com","dom4.ad.state.company.com","corporate.state.company.com","OddNamedDom.com"
$CRED=GET-CREDENTIAL
$userAcc = read-host "Enter domain\username for Group Membership Search"

foreach ($domain in $domains)
  {
     write-host "In the domain $domain "," $userAcc is a direct member of..."
     Get-QADGroup -service $domain -Credential $cred -Containsmember $userAcc | select name
  } #foreach domain

Connect-QADService -Service 'dom1.ad.state.company.com'

スクリプトを実行すると、dom1 (ログインしているドメイン) の結果が得られ、残りは次のエラーをスローします。「Ref 1:..」行が「dom1」を指している理由がわかりません。それが問題の原因かもしれないと思いました。エラー メッセージを示す以下の Powershell 出力をコピーしました。

In the domain dom1.ad.state.company.com   dom1\brownd2.admin.dom1 is a direct member of...

Name                                                                                                                                            
----                                                                                                                                        
DOM1-G-ITS-DS-Company Services                                                                                                                 
DOM1PGUELFP00003-Exmerge-R                                                                                                                   
DOMPGUELFP00003-Exmerge-C                                                                                                                   
ITSPPTBOSHFS003-FSSHARE-C                                                                                                                   
Domain Users                                                                                                                                

In the domain dom2.ad.state.company.com   dom1\brownd2.admin.dom1 is a direct member of...
Get-QADGroup : 0000202B: RefErr: DSID-03100742, data 0, 1 access points
    ref 1: 'dom1.ad.state.company.com'
At C:\TestScripts\tGet-UserAllMemberships.ps1:24 char:6
+      Get-QADGroup -service $domain -Credential $cred -Containsmember $userAcc |  ...
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-QADGroup], DirectoryAccessException
    + FullyQualifiedErrorId : Quest.ActiveRoles.ArsPowerShellSnapIn.DirectoryAccess.DirectoryAccessException,Quest.ActiveRoles.ArsPowerShel 
   lSnapIn.Powershell.Cmdlets.GetGroupCmdlet

In the domain dom3.ad.state.company.com   dom1\brownd2.admin.dom1 is a direct member of...
Get-QADGroup : 0000202B: RefErr: DSID-03100742, data 0, 1 access points
    ref 1: 'dom1.ad.state.company.com'
At C:\TestScripts\tGet-UserAllMemberships.ps1:24 char:6
+      Get-QADGroup -service $domain -Credential $cred -Containsmember $userAcc |  ...
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-QADGroup], DirectoryAccessException
    + FullyQualifiedErrorId : Quest.ActiveRoles.ArsPowerShellSnapIn.DirectoryAccess.DirectoryAccessException,Quest.ActiveRoles.ArsPowerShel 
   lSnapIn.Powershell.Cmdlets.GetGroupCmdlet

私がチェックしている各ドメインには、同様のエラー セットがあります。エラー メッセージの完全なリストは掲載していません。

配列内のドメインの順序を変更すると、成功した 1 つのドメインのエラーと結果の順序が配列に一致するように変更されます。ループの最初の繰り返しで成功するかもしれないと思いました。しかし、そうではありません。

アカウントが Dom2 のグループのメンバーであり、Dom3 のどのグループにも属していないことはわかっています。コマンドを foreach ループから取り出し、コンソールでドメインごとに個別に実行すると、期待どおりの結果が得られます。個々の結果に基づいて、これはループで実行する簡単な例だと思っていましたが、ドメインに正しく接続していません。

何を変更できますか?

4

1 に答える 1

0

これは、 C# コードから PowerShell に適合したSystem.DirectoryServices.AccountManagement名前空間を使用したソリューションです。これは一種の再帰的ソリューションです。「 C# を使用した再帰的なグループ メンバーシップの検索 (Active Directory)」では、配布グループでも機能する再帰的なソリューション (PowerShell 1.0 から利用できる基本的な ADSI を使用) を示しています。

# Retreiving a principal context for the administrator on the Global Catalog
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
$domainContext = New-Object DirectoryServices.AccountManagement.PrincipalContext([DirectoryServices.AccountManagement.ContextType]::Domain, "VMESS01:3268" , "administrator", "adminPasswd")
# Retreive the groups
try {
  $userPrincipal = [DirectoryServices.AccountManagement.UserPrincipal]::FindByIdentity($domainContext, "jpb")
  $groups = $userPrincipal.GetAuthorizationGroups()
  foreach($group in $groups)
  {
    $group.name;
  }
}
finally {
    $pc.domainContext()
}
于 2014-05-21T14:01:24.900 に答える