2010-10-07 13 views
3

我在写一个运行进程(REG)的C#类来导出注册表项。 REG要求你指定一个文件名来导出,但我宁愿让REG的输出指向标准输出,这样我就可以直接在我的C#代码中捕获它(使用Process.StandardOutput)。 PowerShell中有没有将标准输出指定为文件名的方法?PowerShell:如何使用标准输出代替文件名

回答

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

只要使用“CONOUT $”作为文件名(如在评论pojnted出来,在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编码问题,但是当你解析它时你应该能够在缓冲区中处理它。

+0

有趣的提示,但它没有为我在Win7或Server2003(我有可用测试)工作。我收到此错误...错误:无法写入文件。可能有磁盘或文件系统错误。 – JasonMArcher 2010-10-08 18:50:10

+0

也不适合我。我收到了与上面相同的消息(错误:无法写入文件,可能是磁盘或文件系统错误)。 – Trevor 2010-10-08 21:00:40

+0

当我在XP(SP3)上测试时,它似乎工作正常。在Server2003上也失败了。看起来Reg已经更新了,这打破了这个诀窍。 – zdan 2010-10-12 18:19:45

相关问题