1. ホーム
  2. powershell

[解決済み] PowerShellでコマンド出力に改行を追加するにはどうすればよいですか?

2022-03-10 15:14:09

質問

PowerShellを使用して以下のコードを実行し、レジストリから追加/削除プログラムのリストを取得します。

Get-ChildItem -path hklm:\software\microsoft\windows\currentversion\uninstall `
    | ForEach-Object -Process { Write-Output $_.GetValue("DisplayName") } `
    | Out-File addrem.txt

各プログラムごとに、リストを改行で区切りたいのですが。試してみました。

Get-ChildItem -path hklm:\software\microsoft\windows\currentversion\uninstall `
    | ForEach-Object -Process { Write-Output $_.GetValue("DisplayName") `n } `
    | out-file test.txt

Get-ChildItem -path hklm:\software\microsoft\windows\currentversion\uninstall `
    | ForEach-Object {$_.GetValue("DisplayName") } `
    | Write-Host -Separator `n

Get-ChildItem -path hklm:\software\microsoft\windows\currentversion\uninstall `
    | ForEach-Object -Process { $_.GetValue("DisplayName") } `
    | foreach($_) { echo $_ `n }

しかし、いずれもコンソールに出力すると変な書式になり、ファイルに出力すると各行の後に3つの四角い文字が付くという結果になります。試しに Format-List , Format-Table および Format-Wide を使用しましたが、うまくいきませんでした。元々、こんな感じでうまくいくと思っていました。

Get-ChildItem -path hklm:\software\microsoft\windows\currentversion\uninstall `
    | ForEach-Object -Process { "$_.GetValue("DisplayName") `n" }

しかし、これではエラーになるだけです。

どうすればいいですか?

または 出力フィールドのセパレータ (OFS)をダブル改行にして、ファイルに送るときに文字列を取得するようにします。

$OFS = "`r`n`r`n"
"$( gci -path hklm:\software\microsoft\windows\currentversion\uninstall | 
    ForEach-Object -Process { write-output $_.GetValue('DisplayName') } )" | 
 out-file addrem.txt

を使用することに注意してください。 ` であり ' . 私のキーボード(US-English Qwerty配列)の場合、これは 1 .
(コメントから移動しました - Koen Zomersさんありがとうございます)