PowerShell: как использовать стандартный вывод вместо имени файла - PullRequest
3 голосов
/ 08 октября 2010

Я пишу класс C #, который запускает Process (REG) для экспорта ключей реестра.REG требует, чтобы вы указали имя файла для экспорта, но я бы предпочел, чтобы вывод REG был направлен на стандартный вывод, чтобы я мог захватить его непосредственно в своем коде C # (используя Process.StandardOutput).Есть ли способ в PowerShell указать стандартный вывод в качестве имени файла?

Ответы [ 2 ]

4 голосов
/ 08 октября 2010

Если вам нужно использовать программу REG (а не использовать PowerShell для запроса / выгрузки реестра - или даже просто сделать это в самой программе на C #), вероятно, лучшее, что вы получите, - это разрешить ее выгрузку.во временный файл, затем перенаправьте содержимое файла обратно в стандартный формат и запишите его в вашей программе на 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
1 голос
/ 08 октября 2010

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

...