Exhchage Management ShellはExchangeサーバーで利用できるPowershellのコマンドの集合で、GUIから実行できる操作をコマンドラインで利用できる。コマンドラインで利用できるから、一回スクリプトを作成できれば繰り返し実行できるし、スケジュールに組み込むこともできる。また引数を変えることにより同じ操作を異なったユーザーやメールボックスに対して実行できる。
便利なEMSであるがローカルのシェル画面から利用しているだけでは拡張性がなく、手間もかかる。ここではシステム管理上で起きるシナリオをいくつか考えて覚えておくべき操作方法をまとめておく。
ここでカバーするのは以下の範囲である。
- パイプライン
- フォーマット
- コマンドラインからの実行
- 引数のやりとり
- リモートからの実行
パイプにより複数のcmdletを組み合わせることができる。一つのユーザーに対していくつかの属性を見たいときには、複数のcmdletを実行しなければいけない。コマンドラインから実行できればバッチファイルにおけるWindowsコマンドや他のスクリプト言語と組み合わせることができる。同じ操作でも異なった対象に実行したいので引数のやり取りは重要である。またリモートから実行できればわざわざExchangeサーバーにRDPでログインする必要がなくなる。
パイプラインについてはこちらを参照する。
Get-Mailbox USER_ID |
Select-Object DisplayName, IssueWarningQuota, ProhibitSendQuota,
@{label="TotalItemSize(MB)";expression={(Get-MailboxStatistics $_).TotalItemSize.Value.ToMB()}},
@{label="ItemCount";expression={(Get-MailboxStatistics $_).ItemCount}}, Database |
Export-Csv "C:\Scripts\UserMailboxSizes.csv" -NoTypeInformation
USER_IDは取得したいユーザーのログインIDにする。上記コマンドは3つのコマンドを組み合わせている。Get-Mailboxで対象ユーザーのメールボックスの属性を取得する。パイプでSelect-Objectに引き渡している。ここでよくみるとSelect-ObjectでさらにGet-MailBoxStatisticsを利用している。Get-MailBoxStatisticsには $_が引き渡されている。$_はパイプラインで送られてきたオブジェクトに関する情報が入っている。Get-MailboxStatisticsはこの情報を利用して、さらに統計情報を取得している。次のパイプラインではcsvファイルに出力する。
フォーマットについては以下を参照してほしい。こちらではステップbyステップでほしい形式のデータを取得するための方法が記載されている。
Exchange 2010 – Get-MailboxStatistics like I want it
コマンドラインからの実行については下記にスクリプトを記載した。
exscript01.bat
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -psconsolefile "C:\Program Files\Microsoft\Exchange Server\V14\Bin\exshell.psc1" -file "C:\script\getquotalimit.ps1" %1
powershellを呼び出す。このときexshell.psc1というコンソールファイルを指定する。コンソールファイルはpowershell起動時にコンソールを拡張するもので、exshell.psc1を読むことによりExchangeサーバーに対してcmdletを発行できる環境を整えている。exshell.psc1なしではデフォルトで提供されているcmdletは実行できるが、exhcnageサーバー特有のcmdletは実行できない。-file引数では実行したps1ファイルを指定する。
引数としてUser IDを渡せるようにしてある。User IDは一番目の引数であるので%1としてそのままgetquotalimit.ps1に渡している。
getquotalimit.ps1
param($userid="yamada") get-mailboxStatistics $userid | format-list StorageLimitStatus, totalitemsize, totaldeleteditemsize, itemcount, deleteditemcount
親バッチから渡された引数を$userid変数に格納する。もし値がなければデフォルト地として”yamada”を入れている(この値に意味はない)。引数を利用してget-mailboxstatisticsを実行すると下記のような結果が得られる。
C:\Users\jpmasadm>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -psc onsolefile "C:\Program Files\Microsoft\Exchange Server\V14\Bin\exshell.psc1" -fi le "C:\script\getquotalimit.ps1" tanaka Name Used (GB) Free (GB) Provider Root ---- --------- --------- -------- ---- ExScri 36.91 FileSystem C:\Program Files\Micros... StorageLimitStatus : BelowLimit TotalItemSize : 1.85 GB (1,986,920,948 bytes) TotalDeletedItemSize : 424.6 MB (445,265,792 bytes) ItemCount : 23766 DeletedItemCount : 11515
リモートで実行するための手順は以下で説明されている。
How to Run PowerShell Commands on Remote Computers
残念だが手元の環境ではセキュリティ上の理由でこれ以上は実験できなかった。しかし他のサイトに記述されていることから考えてもほぼ内容は正しいと思われる。