PowerShellで「Office365」からグループとメンバーのデータを引っこ抜くまで
メーリングリストとそのメンバーの一覧をExcelで寄越せ
「GAL(Global Address List)=アドレス帳見ろよカス」と言えない情シス。
かといって、ダイレクトにCSV等に落とす方法はないので、1件1件見ながらExcelの台帳に更新するのも馬鹿馬鹿しい。
で、調べてたらPowerShell使えばデータ抜くくらいはできるよ、ってことだったので、実際にやってみたことを記録しておきます。
なお、PowerShell、初めて使います。
コマンドレットってまたキモい単語だなーってところからでしたけど、まあやってみればなんとかなる。
一応、PowerShell自体はインストールされて起動されているところからね。
ガイドブックを入手
先々いろいろお世話になるので、意味もわからず実行すれば取れるスクリプトを使うんじゃなくて、ちゃんと理解しようねってはなし。
以下URLで、「Microsoft Office 365 PowerShell ガイド(Word/PDF)」を入手!
Download Microsoft Office 365 PowerShell ガイド from Official Microsoft Download Center
(以下、「ガイド」とし、これに沿って進める。
PowerShell自体が初めての場合、「ガイド」にしたがって
「Windows PowerShell ユーザー ガイド」を参照する。
プログラムの経験ないしUNIX/LINUXのコマンドを叩いたことがある人であれば、該当セクションは10分くらいで読み流せる。
Windows PowerShell ユーザー ガイド
実行環境の準備
ガイドを読み進め
「1.2PowerShell 実行環境の準備」に入る。
まずはOffice365へアクセス。
「1.2.1Office 365用PowerShellモジュールのインストール」
に進むと、
「Windows PowerShell を使用して Office 365 を管理する」
の短縮アドレスが書いてあるので、これに飛ぶ
http://aka.ms/aadposh
と、以下にリダイレクトされる
「Windows PowerShell による Azure AD の管理」
Manage Azure AD using Windows PowerShell
このサイトを読み進めていくと、
「Azure AD モジュールのインストール 」があるので、コレに従い2つインストールする。
「Microsoft Online Services Sign-In Assistant for IT Professionals RTW」
Download IT プロフェッショナル 用 Microsoft Online Services サインイン アシスタント RTW from Official Microsoft Download Center
「Azure Active Directory Module for Windows PowerShell (64 ビット バージョン)」
(リンク踏むとダウンロード始まる)
http://go.microsoft.com/fwlink/p/?linkid=236297
念のため、モジュールバージョンも確認
PowerShellで
(get-item C:\Windows\System32\WindowsPowerShell\v1.0\Modules\MSOnline\Microsoft.Online.Administration.Automation.PSModule.dll).VersionInfo.FileVersion
を実行。(一行で。最初のカッコも含めてコピペ。)
バージョン番号が 1.0.8070.2 より小さい場合は、新しいものを入れなおす必要があるらしいですが、そこは省略。
「Azure AD へ接続」へ読み進めていき、コマンドレットモジュールを取り込む。
import-module MSOnline
準備としてはここまで。
Office365に接続
Office365≒MSOnlineにつなぐにはOffice365の認証をする必要があるので、以下コマンドを実行。
$msolcred=get-credential
ユーザー認証画面がでるので、Office365のメールアドレスとパスワードを入力する。
で、さらに接続コマンドを発行する。
connect-msolservice -credential $msolcred
ここまで進むと、他のコマンドが使えるようになる模様。
次に、Office365につながってコマンドが機能するか確認するために、ユーザーリストを取得するコマンドを叩いてみる。
Get-MsolUser
これでユーザーリストがだーっと帰ってくれば、ここまでの設定はOK.
この勢いで、グループリストとグループメンバーリストもやってみよう。Exchangeへのエイリアス設定は、Office365のグループ:配布リストと同期してるし、とれてしまうならそれでよし。
「グループ一覧」を取得する
グループのリスト取得はコレ。
Get-MsolGroup https://technet.microsoft.com/ja-jp/library/dn194130.aspx
デフォルトで250件までの表示なので、いろいろ出てきそうな場合は絞り込みを。
今回の場合はメーリングリスト=配布リストなので、配布リスト以外のグループを使っている場合は絞り込むために
-GroupType DistributionList
を付けてあげると良い。
で、デフォ出力だとメールアドレスが出力されないし、表示名も切れてしまうので、
Get-MsolGroup -GroupType DistributionList | format-table -Property objectId,DisplayName,EmailAddress
の後ろに
-autosize (可能な限り全表示、ただし切られることもあるので、PowerShell自体のプロパティ>レイアウト>画面のバッファーサイズ、で横のサイズを増やしておくとよい)
または、
-wrap (折り返してすべて表示)
にすると、見た感じは綺麗になります。
「グループメンバーのリスト」を取得する
グループメンバーのリスト取得はコレ。
Get-MsolGroupMember https://technet.microsoft.com/ja-jp/library/dn194085.aspx
これで、1グループずつ、メンバーリストが取得できるが、-GroupObjectId は、前述の「Get-MsolGroup」の結果で出される意味不明の文字列であって、配布リスト=グループの名称じゃないので要注意。
CSVに保存する
Office365からの取得の話をちょっと離れて、単純にCSV出力の話を先に。
この記事が参考になりました。
GUIユーザーのためのPowerShell入門 (11) CSVファイルを加工する | マイナビニュース
Export-Csv 保存ファイル名 -Encoding 文字コード
これを、他のコマンドの後ろにパイプでつないであげると、CSVファイルとして指定した場所に保存されます。
なお、Export-Csvはepcsvっていう短縮名称エイリアスを持っているので、主にそちらを使います。
なお、そのまま使うと
- 文字コードの問題で、-EncodingオプションをなしにするとASCIIが指定されて日本語が文字化けする。でも、オプション「-Encoding default」って書くとShift JISになるっていう謎仕様。
- PowerShell画面上での見やすさを重視して表示整形(format-table)などすると、むしろうまく出力できない。
- 出力したカラムヘッダ行の上に、オブジェクトのタイプを示す行が含まれていて、そのままデータベース等に取り込むのに邪魔になる。
という問題があります。
なので、今回の場合は、
グループリスト Get-MsolGroup -GroupType DistributionList | epcsv C:\temp\MsolGroup.csv -Encoding default -NoTypeInformation グループメンバーリスト Get-MsolGroupMember メンバーリストを取得したいグループのObjectId l epcsv c:¥temp¥groupXXXX.csv -Encoding default -NoTypeInformation
って書くと、キレイなCSVが取れます。
ここまでやれば、あとは煮るなり焼くなりして見せたい形のExcelに加工していくだけです。
今後について
せっかくかじったPowerShellだし、今の職場にいる以上、WindowsServerから逃れることはできないようなので、もう少しいじってみたいですね。
- Exchange側へつないで取得
実はExchange側にちゃんとつなげれば、リスト出力できるスクリプトがころがってる。
http://community.office365.com/ja-jp/f/333/t/216759.aspx
「リモート PowerShell を使用して Exchange に接続する」
http://technet.microsoft.com/ja-jp/library/jj984289(v=exchg.150).aspx
- PowerShellで連続した処理を使い、Office365なりExchangeなりからぶっこ抜いたグループとメンバーの括取得からの見せたい形への加工までを書いてみる
人は易きに流れてコピペの繰り返しやら、苦手なテキスト処理よりDB(てかAccess)にぶっこんでリレーションで処理したり。
そうじゃねえだろと。
- ActiveDirectory管理全般
むしろ台帳(Excel)なり申請データからADにぶっこみに行くくらいの。
について、もっと調べていく予定。
Windows PowerShell 実践システム管理ガイド2版 (TechNet ITプロシリーズ)
- 作者: Inc.(横田秀之) Yokota Lab,河野憲義
- 出版社/メーカー: 日経BP社
- 発売日: 2014/10/30
- メディア: 単行本
- この商品を含むブログ (2件) を見る