文字列配列の場合は、FileクラスのWriteAllLinesメソッドを使う。以下は変数$linesに代入したテキストを、ファイルtemp_utf8nb.csvに出力した例。文字コードはUTF-8(BOM無し)、改行コードはCR+LF。
PS > $lines = "1,ABC", "2,abc", "3,あいう" PS > $file = (gl).Path + "\temp_utf8nb.csv" PS > [IO.File]::WriteAllLines($file, $lines) PS > Get-Content .\temp_utf8nb.csv -Encoding utf8 1,ABC 2,abc 3,あいう PS > Format-Hex .\temp_utf8nb.csv パス: ○○○\temp_utf8nb.csv 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00000000 31 2C 41 42 43 0D 0A 32 2C 61 62 63 0D 0A 33 2C 1,ABC..2,abc..3, 00000010 E3 81 82 E3 81 84 E3 81 86 0D 0A ããã..
「1」から始まり、「3,」(0x33, 0x2c)の次の「あ」が0xe38182であることから、BOM無しのUTF-8であることがわかる。 任意文字列であれば、WriteAllTextメソッドを使う。
PS > $s = "1,ABC`r`n2,abc`r`n3,あいう`r`n" PS > $file = (gl).Path + "\temp_utf8nb.csv" PS > [IO.File]::WriteAllText($file, $s) PS > Get-Content .\temp_utf8nb.csv -Encoding utf8 1,ABC 2,abc 3,あいう PS > Format-Hex .\temp_utf8nb.csv パス: ○○○\temp_utf8nb.csv 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00000000 31 2C 41 42 43 0D 0A 32 2C 61 62 63 0D 0A 33 2C 1,ABC..2,abc..3, 00000010 E3 81 82 E3 81 84 E3 81 86 0D 0A ããã..
.NETのクラスを使う場合、カレントディレクトリはそのPowerShellが起動しているディレクトリになってしまうため、Get-Locationコマンドレット(エイリアス:gl)を使って、コマンドラインのカレントディレクトリにファイルを出力するようにしている。