PowerShell: How To Use Standard Output In Place of Filename
我正在编写一个运行进程 (REG) 以导出注册表项的 C# 类。 REG 要求您指定要导出到的文件名,但我宁愿将 REG 的输出定向到标准输出,以便可以直接在我的 C# 代码中捕获它(使用 Process.StandardOutput)。 PowerShell 中有没有办法将标准输出指定为文件名?
如果您必须使用 REG 程序(而不是使用 PowerShell 来查询/转储注册表 - 甚至只是在 C# 程序本身中执行),您可能会得到的最好的结果就是允许它转储到一个临时文件,然后将文件的内容通过管道传输回标准输出,并以这种方式在您的 C# 程序中捕获它:
1 2 3 4 | $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,您可以导航注册表,就像它是文件系统的一部分一样。也许这在其他方面有帮助?
1 2 | cd HKCU:\\Software\\Microsoft\\Windows dir |
只需使用 'CONOUT$' 作为文件名(正如注释中指出的那样,这仅适用于 Windows XP):
1 2 3 4 5 6 7 8 | 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 编码问题,但是当您解析它时,您应该能够在缓冲区中处理它。