Да, я был смущен этим долгое время также.
Flex, кажется, их имя 'Разработчика Flex' IDE (на основе Eclipse), и общий подход создания флеш-файлов с помощью mxml и ActionScript, а не нормальные инструменты флэш-памяти.
я думаю, подход mxml и ActionScript (т.е. Flex) разработан для обращения намного больше к программистам, где, поскольку сторона Flash разработана больше для обращений к графическим дизайнерам.
конечным результатом любого подхода является .swf файл, который может быть выполнен в плагине Flash player браузера (хотя с Flex можно быть нацелены на Среду выполнения Adobe AIR вместо этого, если Вы будете хотеть получить доступ к файловой системе и работать офлайн и т.д.).
Мой совет был бы, если Вы происходите из среды программирования, для запуска с Flex.
Или просто установите разделитель выходных полей (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
Остерегайтесь использовать `, а не '. На моей клавиатуре (американско-английская раскладка Qwerty) она расположена слева от 1 .
(Перемещено сюда из комментариев - Спасибо Koen Zomers)
Думаю, в последнем примере вы правильно поняли. Вы получили ошибку только потому, что пытались поместить кавычки в уже заключенную в кавычки строку. Это исправит:
gci -path hklm:\software\microsoft\windows\currentversion\uninstall | ForEach-Object -Process { write-output ($_.GetValue("DisplayName") + "`n") }
Изменить: оператор Кейта $ () на самом деле создает лучший синтаксис (я всегда забываю об этом). Вы также можете использовать кавычки внутри кавычек:
gci -path hklm:\software\microsoft\windows\currentversion\uninstall | ForEach-Object -Process { write-output "$($_.GetValue(`"DisplayName`"))`n" }
Попробуйте:
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") возвращает null для некоторых записей, поэтому я их отфильтровываю. Кстати, вы были близки с этим:
ForEach-Object -Process { "$_.GetValue("DisplayName") `n" }
За исключением того, что внутри строки, если вам нужно получить доступ к свойству переменной, то есть «оценить выражение», тогда вам нужно использовать синтаксис подвыражения, например:
Foreach-Object -Process { "$($_.GetValue('DisplayName'))`r`n" }
По сути, в строке с двойными кавычками PowerShell будет раскрывать такие переменные, как $ _
, но не будет оценивать выражения , если только вы не поместите выражение в подвыражение, используя следующий синтаксис:
$(`<Multiple statements can go in here`>).
В конечном итоге то, что вы пытаетесь сделать с ДОПОЛНИТЕЛЬНЫМИ пустыми строками между ними, немного сбивает с толку :)
Я думаю, что вы действительно хотите использовать Get -ItemProperty . Вы получите ошибки, если значения отсутствуют, но вы можете подавить их с помощью -ErrorAction 0
или просто оставить их как напоминания. Поскольку провайдер реестра возвращает дополнительные свойства, вы захотите использовать Select-Object , который использует те же свойства, что и Get-Properties.
Затем, если вы хотите, чтобы каждое свойство было в строке с пустая строка между ними, используйте Format-List (в противном случае используйте Format-Table , чтобы получить по одной в каждой строке).
gci -path hklm:\software\microsoft\windows\currentversion\uninstall |
gp -Name DisplayName, InstallDate |
select DisplayName, InstallDate |
fl | out-file addrem.txt