読者です 読者をやめる 読者になる 読者になる

Exchange 学習帳

ExchangeやOffice 365の備忘録です。

PowerShellを使いこなしたい② ファイル出力編

前回からだいぶ日が空いてしまいました。

PowerShellを使いこなしたい① 超基礎編

PowerShellを使いこなしたいシリーズ、第2弾です。

PowerShellでコマンドを入力すると、当然ながら出力はPowerShellに表示されます。
自身で完結する作業であればそれでも問題無いかもしれませんが、
設定変更のログやエビデンスを残したり、
設定変更前の情報をファイルに残しておいたり、
取得した情報を別のソフトで加工、分析したりしたい場面に必ず遭遇するかと思います。

そこで今回は「ファイル出力編」と題して、コマンドで取得した結果を出力する方法をまとめます。
網羅はできないですが、この5つさえ習得すればなんとかなるのでは、と思ってます。


●[Start-Transcript]コマンド
コマンドの入出力を全てテキストファイルに記録するコマンドです。
入力したコマンドがそのまま記録されるので、作業のログに最適です。

Start-Transcript

と入力して実行すると、既定で C:\User\%UserName%\Documents にテキストファイルを作成して記録を開始します。
保存先を指定したい場合は、

Start-Transcript C:\Temp\20160617_Transcript.txt

のようにスペースを空けて、ファイルを絶対パスで指定します。

覚えておきたいのが -Append パラメーターです。

Start-Transcript C:\Temp\20160617_Transcript.txt -Append

このパラメーターを指定すると、指定したテキストファイルの一番下に追加して記録を開始します。
(-Appendを指定しない場合、同じ名前のファイルがあると上書きして記録を開始してしまいます)

記録の終了は[Stop-Transcript]コマンドです。


●[>FileName.txt]
テキストファイルに出力する方法はもう1つあります。

Get-Mailbox -Identity User01 >C:\temp\20160617_User01.txt

と入力すると、">" の前までのコマンドを、テキストファイルに出力します。

あっ、この出力、テキストで欲しいな、なんてときは、
[↑]キーで直前のコマンドを呼びだして、これを書き足してあげましょう。


●[Export-Csv]コマンド
最もよく使うコマンドのひとつが、[Export-Csv]です。
コマンドの結果をCSVファイルで出力します。
メールの配信ログなど、情報量が多いときに用いることが多いです。

-Encoding パラメーターで文字化けを防ぎ、
-NoTypeInformation パラメーターで先頭行に型の情報を入れないようにします。

Get-Mailbox -Identity User01 | Export-CsV -Path C:\temp\20160617_User01.csv -Encoding UTF8 -NoTypeInformation

変数からパイプ処理が可能なので、

$Output = Get-Mailbox -Identity User01
$Output += Get-Mailbox -Identity User02
$Output | Export-CsV -Path C:\temp\20160617_User.csv -Encoding UTF8 -NoTypeInformation

こうして、まとめて1つのファイルに出力することができます。便利。


●[Export-CliXml]コマンド
[Export-Csv]と同じか、それ以上に有用なのが、[Export-CliXml]です。
文字通り、Xmlファイルに出力するコマンドです。

Get-Mailbox -Identity User01 | Export-CliXml -Path C:\temp\20160617_User01.xml

なぜ、Xmlファイルで出力するのかというと、
このファイルから情報を取り出すときに、オブジェクトとして扱い、
PowerShellコマンドを使用することができるからです。

まず、変数にインポートします。

$File = Inport-CliXml -Path C:\temp\20160617_User01.xml

この$Fileを以下のように扱うことが可能なんです。

$File | fl
$File | ?{$_.Alias -eq "User01"}
$File | Set-Mailbox -UseDatabaseQuotaDefaults $False

つまり、使い慣れたPowerShellのコマンドで操作ができます。
設定変更する前の状態をXmlファイルに出力しておけば、
変更前の値を簡単に参照したり、そこから簡単に戻したりすることもできます。


●[ | Clip]
ファイルではなく、コマンドの出力をクリップボードにコピーします。

Get-Mailbox -Identity User01 | Clip

と使います。
入力したコマンドの出力がそのままコピーされるので、
以下のように出力を整形してあげてください。

Get-Mailbox -Identity User01 | fl | Clip
Get-Mailbox -Identity User01 | fl Alias,SamAccountName -AutoSize | Clip


それでは、今回はこの辺りで。
質問やPowerShellシリーズでリクエストがあればコメントいただければと思います。

今回の参考情報です。

Start-Transcript:
https://technet.microsoft.com/ja-jp/library/hh849687.aspx

Export-Csv
https://technet.microsoft.com/ja-jp/library/hh849932.aspx

Export-CliXml について:
https://blogs.technet.microsoft.com/exchangeteamjp/2015/08/23/export-clixml/