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 в выводе, показанном здесь, но вы должны быть в состоянии обработать это в буфере, когда будете анализировать его.

Другие вопросы по тегам