
1.著者からのいくつかの言葉
記事が更新されました。 スクリプトが変更されました。 1つのメーリングリストを更新するスクリプトが追加されました。前回の記事へのコメントで、ADセキュリティグループに基づいたメーリングリストの自動形成に関する興味深い質問がありました。 問題があります-解決策があります。 行きましょう。
2.ソースデータ
サーバーOS :CentOS 7
OSについて実際、CentOS7と他のシステムの違いは、パッケージをインストールするためのサーバーへのコマンドと、場合によってはいくつかのファイルの場所にあります。 作業は主にZimbraコマンドレットで実行されるため、構成の違いは最小限に抑えられます。
Zimbraドメイン :zimbramail.home.local
Zimbraホストにボールをマウントするパス :/ mnt / ZM /
3.セットアップ
- WindowsボールをLinuxサーバーにマウントします。 これは、Windows PowerShellからLinux Bashへのデータ転送を単純化および自動化するためです。 取り付け手順については、以前の記事で説明しました。 繰り返しません。
- ADに別個のOUを作成し、Zimbraで作成されるメーリングリストに基づいてグループを作成します。 グループ名=配布リスト名。
- 新しいOUで作成されたグループ、ユーザー、またはセキュリティグループに追加し、これに基づいてZimbraのメーリングリストが作成されます。 このスクリプトは再帰的に実行されます。つまり、ターゲットOUのグループに追加されるグループ内のユーザーに関するすべてのデータを収集します。 Get-ADGroupMemberコマンドの出力の詳細をご覧ください。
- Active Directoryからデータを収集するためのスクリプトを作成します。
- メーリングリストを追加し、前のスクリプトで受信したデータに基づいてユーザーが記入するためのスクリプトを作成します。
- お楽しみください。
3.1。 OUについて
ドメインのルートにOU「ZimbraDL」を作成し、グループポリシーを継承することを禁止して、これらのグループが分離されたままになるようにしました。 Zimbra Collaboration OSEでの配布リストの形成を除いて、ドメインのライフサイクルに参加することはありません。
4. ADからデータを収集するPowerShellスクリプト
PowerShellスクリプト$Path = "C:\ZM\ZimbraDL" $enc = [system.text.encoding] function ReCode ( $f, $t, $line ) { $cp1 = $enc::getencoding( $f ) $cp2 = $enc::getencoding( $t ) $inputbytes = $enc::convert( $cp1, $cp2, $cp2.getbytes( $line )) $outputstring = $cp2.getstring( $inputbytes ) $outputstring | add-content $OutputFile }
4.1。 スクリプトの仕組み
- まず、作業ディレクトリが存在する場合は、その存在と削除を確認します。 これは、プロセスでデータが2倍にならないようにするために必要です。
- PoShは指定されたOUを見て、そのOUにあるユーザーグループを読み取り、それらをGetGroupsAD.txtファイルに書き込みます
- 受信したファイルから不要なものをすべて破棄します(PoShはすべての出力をファイルに書き込むため、コマンドの最初の出力では、最初の行はName、2番目の行はセパレーター「----」、その後グループが1つずつリストされます)、エンコードを変更します「windows-1251」からutf-8まで、別のファイルGroupsList.txtになります
- さらに、受信したファイルに基づいて、ファイルに含まれるグループのユーザーに関する情報が読み取られます。 ユーザー名を含むファイル(samAccountName)
\ Usersディレクトリに配置され、グループ名で呼び出されます
4.2。 単一のグループから情報を読み取るためのスクリプト
1つのセキュリティグループのみからデータを読み取ることができるスクリプトは、基本的にメーリングリストを更新する必要があるグループの名前を入力するようユーザーに要求するブロックがあるため、以前のセキュリティグループとそれほど違いはありません。
1つのグループのみからデータを読み取る機能を備えた手動で実行するPowerShellスクリプト $Path = "C:\ZM\ZimbraDL" $enc = [system.text.encoding] function ReCode ( $f, $t, $line ) { $cp1 = $enc::getencoding( $f ) $cp2 = $enc::getencoding( $t ) $inputbytes = $enc::convert( $cp1, $cp2, $cp2.getbytes( $line )) $outputstring = $cp2.getstring( $inputbytes ) $outputstring | add-content $OutputFile }
5.メーリングリストを作成するBashスクリプト
Windowsで作成されたスクリプトファイルのコピーについて予約します前の記事で、特定のキーで起動すると、不要な読み取り不能文字をすべて削除するcatコマンドを使用してファイルをフォーマットする方法について説明しました。 記事の最後にある記事へのリンク。
5.1。 スクリプトの仕組み
- グループのリストをファイルに書き込む
- Zimbraのメーリングリストの存在を確認し、存在する場合は削除します
- グループのリストに基づいてメーリングリストを1つずつ作成し、各グループにユーザーを入力します(配布リストのIDが画面に表示されます。これはDL作成時のzmprovコマンドレットの標準出力です)。 これにより、Zimbraのユーザーメールボックスの存在がチェックされ、メールボックスが存在しない場合、ユーザーはメーリングリストに追加されません。 もちろん、ユーザー用の新しいメールボックスを作成してメーリングリストに追加することもできますが、Zimbra autoprovはEagerモードで動作し、ユーザーが自動的に作成されなかった場合、システムでは何もしません
- 一時ファイルを消去する
- 作業ディレクトリを削除
6.結論
一般に、タスクは難しくなく、問題はPowerShellからBashにデータを転送することだけでした。 長い間、私はPoSh出力を含むテキストファイルをBashで消化可能な形式に書き写すためのツールを探していました。 数日間にわたる検索の結果は次の関数でした:
記録機能 $InputFile = gc File1.txt $OutputFile = "File2.txt" $enc = [system.text.encoding] function ReCode ( $f, $t, $line ) { $cp1 = $enc::getencoding( $f ) $cp2 = $enc::getencoding( $t ) $inputbytes = $enc::convert( $cp1, $cp2, $cp2.getbytes( $line )) $outputstring = $cp2.getstring( $inputbytes ) $outputstring | add-content $OutputFile } foreach ($line in $InputFile) { ReCode -f "windows-1251" -t "utf-8" $line }
たぶん誰かが役に立つでしょう。
7. PS:
これは、「Zimbraの実装方法」シリーズの3番目の記事です。 最初の実装、LDAP認証、ADユーザーのメールボックスの自動作成については、
こちらをご覧ください 。 2つ目は、Zimbra全体のバックアップとリカバリの設定について、個別のボックスについてです。