PowerShell:如何使用标准输出代替文件名

时间:2010-10-07 20:11:32

标签: powershell registry standards

我正在编写一个C#类,它运行一个Process(REG)来导出注册表项。 REG要求您指定要导出的文件名,但我宁愿将REG的输出定向到标准输出,这样我就可以直接在我的C#代码中捕获它(使用Process.StandardOutput)。 PowerShell中是否有一种方法可以将标准输出指定为文件名?

2 个答案:

答案 0 :(得分:4)

如果你必须使用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 :(得分:1)

只需使用'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编码问题,但在解析时应该能够在缓冲区中处理它。