一覧取得をOut-Fileでテキストファイルにリダイレクトすると不要なスペースが入る
題名の通り、PowerShellでファイル一覧やドメインのユーザー一覧など特に「Select-Object」を使用した一覧表示を、
テキストファイルにリダイレクトしたときに、PowerShellのウィンドウ幅分半角スペースが入ってしまうのを防ぐ方法。
例えば、あるフォルダ直下のファイル名一覧を作成するとして、
PS > Get-ChildItem .\ | Select-Object Name | Out-File ..\ichiran.txt -Encoding default
で、「ichiran.txt」をメモ帳などで開いたときに、
===== ↓↓↓ ichiran.txt ↓↓↓ =====
Name
-
-
- -
-
output1.txt
USB整理.txt
勉強会資料.pptx
計算機.xls
===== ↑↑↑ ichiran.txt ↑↑↑ =====
一見問題ないように見えるが、各ファイル名の後に半角スペースがPowerShellのウィンドウサイズ幅まで入ってしまっており、
このファイルを次工程で取り込むときなどに支障が出ることも。
各ファイル名直後に改行をしてほしいのだが、スマートな方法が見つからず、
出力前にもう二つほど加工を入れる。
PS > Get-ChildItem .\ | Select-Object Name | Out-String -Stream | ForEach-Object {$_.trim()} | Out-File ..\ichiran.txt -Encoding default
文字列化して、ForEach-Objectで全行トリムしている。
せっかくオブジェクト化できているのを文字列化し、行ごとに回すのは処理効率上少々かっこ悪いが、他によい方法が見つからなかった。
===== ↓↓↓ ichiran.txt ↓↓↓ =====
Name
-
-
- -
-
output1.txt
USB整理.txt
勉強会資料.pptx
計算機.xls
===== ↑↑↑ ichiran.txt ↑↑↑ =====
うまく半角スペースが消える。