2017-07-18 8 views
0

マネージャの下にいるすべてのユーザーのリストを取得しようとしています(必要な場合は制御の範囲)。私は、Active Directoryモジュールで動作するコードを持っていますが、私はADSIでそれを行う方法を理解することができません。私が開始するには、このコードを使用してみましたがPowerShellの再帰型ダイレクトレポートADSI

Function GetManager($Manager, $Report) 
{ 
    # Output this manager and direct report. 
    """$Manager"",""$Report""" | Out-File -FilePath $File -Append 

    # Find the manager of this manager. 
    $User = [ADSI]"LDAP://$Manager" 
    $NextManager = $User.manager 
    If ($NextManager -ne $Null) 
    { 
     # Check for circular hierarchy. 
     If ($NextManager -eq $Report) {"Circular hierarchy found with $Report"} 
     Else 
     { 
      GetManager $NextManager $Report 
     } 
    } 
} 

$D = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain() 
$Domain = [ADSI]"LDAP://$D" 
$Searcher = New-Object System.DirectoryServices.DirectorySearcher 
$Searcher.PageSize = 200 
$Searcher.SearchScope = "subtree" 
$Searcher.PropertiesToLoad.Add("distinguishedName") > $Null 
$Searcher.PropertiesToLoad.Add("manager") > $Null 
$Searcher.SearchRoot = "LDAP://" + $Domain.distinguishedName 

$File = ".\ADOrganization.csv" 
"Organization: $D" | Out-File -FilePath $File 
"Manager,Direct Report" | Out-File -FilePath $File -Append 

# Find all direct reports, objects with a manager. 
$Filter = "(manager=*)" 

# Run the query. 
$Searcher.Filter = $Filter 

$Results = $Searcher.FindAll() 

ForEach ($Result In $Results) 
{ 
    $ReportDN = $Result.Properties.Item("distinguishedName") 
    $ManagerDN = $Result.Properties.Item("manager") 
    GetManager $ManagerDN $ReportDN 
} 

これはここhttps://social.technet.microsoft.com/Forums/windows/en-US/7bc3d133-e2b3-4904-98dd-b33993db628a/recursively-select-all-subordinates-for-all-users-from-ad?forum=winserverpowershell記事からです。私はこれが動作すると確信していますが、私は特定のマネージャーを検索する方法を把握することはできません。誰かが正しい方向に私をプッシュできますか?ありがとう!

+0

私はあなたが 'と、ManagedBy' として知られているADプロパティをロードしようとしていると信じています。ドメインコントローラーでadsiedit.mscを使用して、ユーザーのコンテンツを調べて、LDAPプロパティー値を確認してください。 –

+0

PowerShellコマンドレットを使用する作業コードがあるとします。なぜ、[ADSI]タイプアクセラレータのみを使用する代替コードが必要ですか? –

+0

私はそれを正しく言わなかったかもしれません。私がしたいのは、変数にマネージャーを指定し、それらの関数を検索することです。私はスクリプトを実行するためにRSATツールをインストールする必要がないようにADSIを使いたいと思っています。 –

答えて

0
$Filter = "(manager=<ManagerDN>)"

以上の特定:

$Filter = "(manager=CN=<ManagerCN>,OU=<ManagerOU>,$($Domain.distinguishedName))"
+0

これは、私が指定したマネージャのすべての直接レポートを再帰的に取得しますか? –

+0

この質問は、スクリプトがユーザーを入力とし、マネージャーでフィルターに掛けることを想定しているため、スクリプトの目的を完全には完了していません。しかし、特定の(直接の)マネージャを持つすべてのユーザーが列挙され、その出力にはそれらのユーザーのすべての(再帰的な)マネージャが含まれます。 – iRon