2016-05-10 9 views
-1

このスクリプトはエラーなく動作しますが、検索ベース内の複数のグループが見つかった場合、スクリプトはすべてのグループのすべてのユーザーをクロスフォレストの対象グループに追加します。Powershellグループ内のユーザーをフォレスト間グループに追加

ですから、例えば:

ForestAGroup1 =が含まれている2人のユーザー

ForestAGroup2 = 2人のユーザー

が含まれています::スクリプトを実行します::

今...

ForestBGroup1 = 4人のユーザーが含まれています

ForestBG roup2 = 4人のユーザーを含む

ForestBGroup1/2には、ForestAGroup1/2と同じユーザーが含まれている必要があります。ここで

は参照用のスクリプトです:あなたは

$creds = Get-Credential 
$Groups = Get-ADGroup -Properties * -Filter * -SearchBase "OU=TEST,OU=Shop Print Groups,OU=User,OU=domain Groups,DC=domainA,DC=com" | export-csv c:\temp\test.csv 
$Groups = Get-ADGroup -Properties * -Filter * -SearchBase "OU=TEST,OU=Shop Print Groups,OU=User,OU=domain Groups,DC=domainA,DC=com" 
Foreach($G In $Groups) 
{ 
    #Display group members and group name 
    Write-Host $G.Name 
    Write-Host "-------------" 
    $G.Members 

    #Add members to domainB group 
    $domainGMembers = import-csv C:\temp\test.csv | ForEach-Object -Process {Get-ADGroupMember -Identity $_.CN} | Select-Object samaccountname | export-csv c:\temp\gmembers.csv 

    $domainDNUser = import-csv C:\temp\gmembers.csv | ForEach-Object -Process {Get-ADUser $_.samaccountname -Server "domainA.com" -properties:Distinguishedname} 

    import-csv C:\temp\gmembers.csv | ForEach-Object -Process {Add-ADGroupMember -Server "domainB.com" -Identity $G.Name -Members $domainDNUser -Credential $creds -Verbose} 

} 
+1

重要な情報については、例を常に掃除する必要があります。 Contoso.comは素晴らしい会社です。データは現在歴史の中で生きています。 –

+0

あなたの質問は不明です。あなたは、あなたがForestAGGroup1'(ForestBGroup1/2はForestAGroup1/2と同じ同一のユーザを含む必要があります)と同じメンバーをForestBGroup1に持っていたいとしますが、あなたの例ではA1とB1の4。すべてのグループのすべてのメンバーが正しいとは言えないので、私の答えはA1とB1しか一致しません。本当にすべてのBグループにすべてのユーザーが必要な場合は、それらを1つのBグループに追加し、他のBグループ。同じメンバーで10のグループを維持することは望ましくありません。 –

+0

私の例は、私が見ることのできる機密情報をきれいにしていますか?はい、ForestAGroups1/2はForestBGroups1/2と同じに一致するはずですが、代わりにすべてのユーザーを宛先のForestBグループに追加しています。 – Kyle

答えて

0

何をしているのか?あなたが二回

  • あなたはdomainB
  • あなたの廃棄物のすべてのグループにTEST -ou内のすべてのグループからすべてのメンバーを追加し、検索csvファイルにエクスポートするが、それでも変数
  • にそれを保存しよう

    • 既にメモリに保存されているデータの保存と読み込み時に
    • DNの10倍もある場合は、SamAccountNameというユーザーオブジェクトを検索します。次に、SamAccountNameを使用してDNを探します。

    (未テスト)これを試してみてください:

    $creds = Get-Credential 
    $Groups = Get-ADGroup -Properties Members -Filter * -SearchBase "OU=TEST,OU=Shop Print Groups,OU=User,OU=domain Groups,DC=domain,DC=com" 
    Foreach($G In $Groups) 
    { 
        #Display group members and group name 
        Write-Host $G.Name 
        Write-Host "-------------" 
        $G.Members 
    
        #Add members to domainB group 
        $G.Members | 
        Get-ADUser -Server fairfieldmfg.com | 
        ForEach-Object { Add-ADGroupMember -Server "domainB.com" -Identity $G.Name -Members $_ -Credential $creds -Verbose } 
    } 
    

    それがすでにメンバーであるに見つけた場合、それは通常、メンバーのグループの途中で失敗したので、私はAdd-ADGroupMemberを実行するためのforeachループを使用しかし、それらを一度に1つずつ追加すると、それを回避することができます(または、検索を実行して、グループに既に含まれているものを除外することもできます)。

    Add-ADGroupMember-ErrorAction SilentlyContinueを追加して、スクリプトが正常に動作することがわかっているときにそれらのエラーを無視することができます。

  • +0

    送信元DomainAドメインから各ADユーザーを検索する必要があります。あなたのソリューションは「アイデンティティを持つオブジェクトを見つけることができません」というエラーが出るので、私の解決策はぎこちないかもしれませんが、少なくとも現時点ではエラーが出ず、正しいオブジェクトをつかむことができます。私は今、正しいグループに追加するのに苦労しています。 – Kyle

    +0

    追加: 'Get-ADUser $ G.Members -Server fairfieldmfg.com -properties:Distinguishedname | ForEach-Object {Add-ADGroupMember -Server "dom02.net" -Identity $ G.Name -Members $ _Credential $ creds -Verbose} 'これはGet-ADUser:Can not convert 'で失敗します。Microsoft.ActiveDirectory.Management .ADPropertyValueCollection 'をパラメータ' Identity 'に必要なタイプ' Microsoft.ActiveDirectory.Management.ADUser 'に変更します。指定された方法はサポートされていません。「 – Kyle

    +0

    私は本当のエラーが必要です(メッセージ全体ではなく、単一の単語を切り替えます)。コードは、コメントではなく、質問に追加する必要があります..スクリプトについては。私は問題が見つかりません..グループはdomainAです、メンバーはdomainAです...あなたはDomainAのmemberDNsをグループから取得し、domainAでsamaccountname(廃棄物)を検索し、domainaのDNを検索するために使用します既に持っていた)、次にあなたはdomainb-groupに追加します。もし、ForestAGroup1にDomainBのユーザが含まれていれば、私は2つの "user samaccountname、次にDN"をスキップすることができます。 –

    関連する問題