web-dev-qa-db-ja.com

Powershell 2:1回の呼び出しで複数のメンバーを配布グループに追加しますか?

Exchangeに現在存在する配布グループがあり、約20のメンバーを保持しているとします。

Powershell 2では、グループに追加する必要がある約7人のリスト(百)より多くの個人を取得しました。私がこれを行うことができた唯一の方法は、一度に1人のユーザーです。

Add-DistributionGroupMember -Idneity GROUP-NAME -Member Member1
Add-DistributionGroupMember -Idneity GROUP-NAME -Member Member2
....
Add-DistributionGroupMember -Idneity GROUP-NAME -Member MemberN

次の疑似コードで表されるように、1回の関数呼び出しですべてのユーザーを追加できるメカニズムはありますか?

SOME-CMDLET-TO-ADD-LOTS-AT-ONCE -Identity GROUP-NAME -Member COLLECTION-OF-PEOPLE

ループ構造を探していません。すべてのメンバーを一度に追加できる関数またはコマンドレットを探しています。理想的には、リスト全体を参照する引数を1つだけ取ります。 Powershellが700以上のコマンドライン引数で何をするかを考えるのは怖いです...

(これがIS可能であれば、追加するオブジェクトの配列またはコレクションを渡すことができることを願っています。)

助言がありますか? 「set-distributiongroupmember」というコマンドは表示されません。また、「set-distributiongroup」で有望なものも表示されません。

5
Larold

ループ構文を使用したくない理由はわかりません。これはPSの主要な機能の1つです。シンプルな:

Import-CSV FileName.csv | ForEach {Add-DistributionGroupMember -Identity "GROUP-NAME" -Member $_.Name}

トリックを簡単に行うでしょう。ただし、これに失敗すると、希望どおりに実行するコマンドレットがありません。あなたができる

Remove-DistributionGroup GROUP-NAME; New-DistributionGroup -Name GROUP-NAME -Members memberlist

しかし、それは少し安っぽいです。

9
paulr

テキストファイルを作成し、メンバーアカウントのエイリアスを入力して、次のコマンドを実行することにより、配布グループに正常にデータを追加しました。

% Get-Content <path\filename.txt> | Add-DistributionGroupMember "<Display Name of Distribution Group>"

詳細については、次のURLを参照してください。

2
Lars Trond

これを試してください、私にとってはうまくいくようです:

Get-Content | Add-DistributionGroupMember

テキストファイルには、追加するユーザーのエイリアスのみが含まれています。

1
Lee

Microsoftのチームがこれをこんなに複雑にした理由はわかりません。時には単純に考えなければならないこともあります。

"user1","user2","user3" | Add-DistributionGroupMember -Identity "SomeMailbox"
1
thommck

これは古い投稿であることはわかっていますが、DLに複数のユーザーを追加する方法を見つけようとしたときのGoogleでの結果の第1位なので、解決策を投稿すると思いました。

以前のソリューションは少数のユーザーリストで問題なく機能しますが、元の投稿者が述べたように、大きなメンバーシップの変更を処理するときにすべてのメンバーに対してAdd-DistributionGroupMemberを呼び出すとパフォーマンスとスケーリングの問題があり、これはO365を処理するときに悪化します。

これらの問題を解決するには、Update-DistributionGroupMemberを使用して、1つずつ追加する代わりに、DLのメンバーシップ全体を置き換えることができます。

例えば元のリクエストでは、次のようにします。

Update-DistributionGroupMember -Identity GroupName -Members user1@domain,user2@domain,usern@domain

または

Update-DistributionGroupMember -Identity GroupName -Members $ArrayOfMemberEmailAddresses

これはDLのメンバーシップを置き換えるので、既存のメンバーシップを維持したい場合は、まずGet-DistributionGroupMemberを使用してそれを取得し、次に既存のメンバーと新しいメンバーの配列を作成して、次のようにUpdate-DistributionGroupMemberに渡す必要があります。

$NewMembers = Get-Content <path to member list text file>
$CurrentMembers = (Get-DistributionGroupMember -Identity GroupName).PrimarySmtpAddress | where {$_ -ne ""}
$NewMemberList = $CurrentMembers + $NewMembers
Update-DistributionGroupMember -Identity GroupName -Members $NewMemberList -Confirm:$false

最後に、必要に応じてO365で大量のDLのメンバーシップを更新しようとしている場合は、ループ内のUpdate-DistributionGroupMemberコマンドに-AsJobスイッチを追加して、待機せずにすべての更新を並行して実行できます先に進む前に、各メンバーシップの更新が完了するようにします。これによりスクリプトが大幅にスピードアップしますが、結果を取得するために後で行う必要がある追加の作業があるので、ジョブにまだ慣れていない場合は、PowerShellのリモート処理とジョブの使用を最初に読んでください。エラーなど.

Add-DistributionGroupMemberreducedを使用する代わりにこれを行うと、DL約150Kから約2.5Kへの移行のためにO365に送信されるコマンドの数が増え、スクリプトランタイムが数日から夕方に移行されました。 1200 DLのメンバーシップ。

1
Eric Sobkowicz

パフォーマンスが問題になる場合は、Add-ADGroupMemberが断然最速であり、前述のように-Memberパラメーターへの入力として配列を使用できます。

0
Steven

Quest Active Directory PowerShellコマンドレットは、 このwikiページ ごとに一度に複数のユーザーをグループに追加できるようです。簡単なテストでは、Add-QADGroupMemberコマンドレットを使用して、少数のユーザーをActive Directoryのテストグループに追加できました。

0
smassey

そのような何か、これがうまく書かれているか、機能しているかはわかりません-単なるアイデアです。

Function Add-DistributionGroupMembers_Safe {
Param (
    [Parameter(Mandatory=$true)]
    [String]$Identity,
    [Parameter(Mandatory=$true)]
    [String[]]$Member
)
    $local:groupADSI = [ADSI]"LDAP://${$(Get-DistributionGroup -Identity $Identity).DistinguishedName}"
    $local:DGUsers = @( @( Get-DistributionGroupMember -Identity $Identity ).Name )
    $local:UsersToAdd = @( $Member | Where-Object { $local:DGUsers -notcontains $_ } | ForEach-Object { return (Get-ADUser -Name $_}).DistinguishedName )
    ForEach ($user in $local:UsersToAdd) {
        try {
            $local:GroupADSI.Properties["member"].Add($user) | Out-Null
        } catch {
            #Error processing, text in $_.Exception.Message
        }
    }
    $group.CommitChanges()
}
0
filimonic

これでADを追加することも役立つかもしれません:

import-module ActiveDirectory

次に、単に使用します:

Add-AdgroupMember MyList -member user.alias,user2.alias,user3.alias,...

このためには、RSATがインストールされている必要があります(MS製品、および無料)。そうしないと機能しません。

0
dave J

テキストファイルから一括ユーザーを追加するには、次のスクリプトを使用します。これは非常に使いやすく、この人はかなりきちんと書いています

https://gallery.technet.Microsoft.com/Add-Bulk-Users-to-6f3014b2

0
Anjan