PowerShell上に表示させた情報を別の形式やファイルに出力する方法をまとめます。
環境
- PowerShell Version:5.1.17134.228
テキストファイル(.txt)に出力
Start-Transcript
コマンドの入出力を全てテキストファイルに記録するコマンドです。
入力したコマンドがそのまま記録されるので、作業のログに適してます。
記録の開始
Start-Transcript
既定の保存先C:\User\%UserName%\Documents
に記録される。
保存先を指定して記録を開始
Start-Transcript C:\Temp\Transcript.txt
ファイルを絶対パスで指定する。
既存のテキストファイルに追記して記録を開始
Start-Transcript C:\Temp\Transcript.txt -Append
指定したテキストファイルの一番下に追加して記録を開始する。
(-Appendを指定しない場合、同じ名前のファイルがあると上書きして記録を開始してしまう)
記録の終了
Stop-Transcript
Out-File
1つのコマンドや変数をテキストファイルに出力するコマンドです。
実行例
Get-Mailbox -Identity User01 |Out-File C:\temp\User01.txt
リダイレクト演算子で実行
Get-Mailbox -Identity User01 > C:\temp\User01.txt
Out-File
は>
でも代替できる。
あっ、この出力、テキストで欲しいな、なんてときは、
↑
キーで直前のコマンドを呼びだして、これを書き足してあげましょう。
CSVファイル(.csv)に出力
Export-Csv
コマンドの結果をCSVファイルで出力します。
メールの配信ログなど情報量が多いときによく使います。
Excelで再編集もしやすいです。
実行例
Get-Mailbox -Identity User01 | Export-Csv -Path C:\temp\User01.csv -Encoding UTF8 -NoTypeInformation
-Encoding
パラメーターで文字化けを防ぎ、
-NoTypeInformation
パラメーターで先頭行に型の情報を入れないようにします。
実行例(応用)
$Output = Get-Mailbox -Identity User01
$Output += Get-Mailbox -Identity User02
$Output | Export-Csv -Path C:\temp\User.csv -Encoding UTF8 -NoTypeInformation
変数からパイプ処理が可能なので、
こうして、まとめて1つのファイルに出力することができます。便利。
XMLファイル(.xml)に出力
Export-CliXml
コマンドの結果をXMLファイルに出力します。
ひとつのオブジェクトの情報を出力するときによく使います。
実行例
Get-Mailbox -Identity User01 | Export-CliXml -Path C:\temp\User01.xml
実行例(応用)
あとからファイルをPowerShellにインポートして、オブジェクトとして扱うことができます。
まず、変数にインポートします。
$File = Import-CliXml -Path C:\temp\User01.xml
この$Fileを以下のようにPowerShellのコマンドで操作できます。
$File | fl
$File | ?{$_.Alias -eq "User01"}
$File | Set-Mailbox -UseDatabaseQuotaDefaults $False
設定変更する前の状態をXmlファイルに出力しておけば、
変更前の値を簡単に参照したり、そこから簡単に戻したりできます。
クリップボードにコピー
| Clip
ファイルではなく、コマンドの出力をクリップボードにコピーします。
実行例
Get-Mailbox -Identity User01 | Clip
入力したコマンドの出力がそのままコピーされます。
以下のように出力を整形するとキレイです。
Get-Mailbox -Identity User01 | fl | Clip
Get-Mailbox -Identity User01 | fl Alias,SamAccountName -AutoSize | Clip
参考
自身の過去記事を加筆修正しました。