PowerShell: как использовать стандартный вывод вместо имени файла
Я пишу класс C#, который запускает процесс (REG) для экспорта ключей реестра. REG требует, чтобы вы указали имя файла для экспорта, но я бы предпочел, чтобы вывод REG был направлен на стандартный вывод, чтобы я мог захватить его непосредственно в своем коде C# (используя Process.StandardOutput). Есть ли способ в PowerShell указать стандартный вывод в качестве имени файла?
2 ответа
Если вам нужно использовать программу REG (а не использовать PowerShell для запроса / выгрузки реестра - или даже просто сделать это в самой программе на C#), вероятно, лучшее, что вы получите, - это разрешить ее выгрузку во временную память. file, затем перенаправьте содержимое файла обратно в стандартный формат и запишите его в вашу C# программу следующим образом:
$guid = [Guid]::NewGuid().ToString("N")
REG EXPORT HKCU\Software\Microsoft\Windows "$env:temp\$guid" | Out-Null
Get-Content "$env:temp\$guid"
Remove-Item "$env:temp\$guid"
Если вы не знали: используя PowerShell, вы можете перемещаться по реестру, как если бы он был частью файловой системы. Возможно, это полезно в каком-то другом отношении?
cd HKCU:\Software\Microsoft\Windows
dir
Просто используйте "CONOUT$" в качестве имени файла (как указано в комментариях, это работает только в Windows XP):
PS C:\> reg export HKLM\SOFTWARE\FileZilla 'CONOUT$'
■W i n d o w s R e g i s t r y E d i t o r V e r s i o n 5 . 0 0
[ H K E Y _ L O C A L _ M A C H I N E \ S O F T W A R E \ F i l e Z i l l a ]
" I n s t a l l _ D i r " = " C : \ \ P r o g r a m F i l e s \ \ F i l e Z i l l a "
" R u n i n S e c u r e M o d e " = " 0 "
" U s e R e g i s t r y " = " 0 "
" L a n g u a g e " = " E n g l i s h "
Есть некоторые проблемы с кодировкой UNICODE в выводе, показанном здесь, но вы должны быть в состоянии обработать это в буфере, когда будете анализировать его.