Попробуйте:
PS> $nl = [Environment]::NewLine
PS> gci hklm:\software\microsoft\windows\currentversion\uninstall |
ForEach { $_.GetValue("DisplayName") } | Where {$_} | Sort |
Foreach {"$_$nl"} | Out-File addrem.txt -Enc ascii
В моем файле addrem.txt выдается следующий текст:
Adobe AIR
Adobe Flash Player 10 ActiveX
...
Примечание: в моей системе GetValue ("DisplayName") возвращает ноль для некоторых записей, поэтому я отфильтрую их. Кстати, вы были близки с этим:
ForEach-Object -Process { "$_.GetValue("DisplayName") `n" }
За исключением того, что внутри строки, если вам нужно получить доступ к свойству переменной, то есть «вычислить выражение», вам необходимо использовать синтаксис подвыражения, например:
Foreach-Object -Process { "$($_.GetValue('DisplayName'))`r`n" }
По существу, внутри строки в двойных кавычках PowerShell будет расширять переменные, такие как $_
, но не будет оценивать выражения , если только вы не поместите выражение в подвыражение, используя следующий синтаксис:
$(`<Multiple statements can go in here`>).