Mag*_*ism 2 registry powershell remote-registry
这篇堆栈文章和这篇文章看起来都很相似,但我在那里找不到我的解决方案。我在理解 reg 导出与 reg 导入行为之间的差异时遇到问题。
在 powershell 内运行 reg export 时,它返回“操作成功完成”,但 reg import 会抛出一个终止错误,提示“操作成功完成”。即使抛出错误,注册表文件也会正确导入。一个例子:
PS C:\Windows\System32> reg export HKLM\Software\MySoftware C:\Scripts\MyFile.reg
The operation completed successfully.
PS C:\Windows\System32> reg import C:\Scripts\MyFile.reg
reg : The operation completed successfully.
At line:1 char:1
+ reg import C:\Scripts\MyFile.reg
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (The operation completed successfully.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Run Code Online (Sandbox Code Playgroud)
Microsoft 的 reg import 命令文档指出,返回码为 0 表示成功,1 表示失败。为什么 Powershell 将成功作为 reg 导出的常规成功消息返回,但将其作为 reg 导入的终止错误抛出?
我以管理员身份运行 Powershell,登录用户是服务器上的本地管理员。如有任何帮助,我们将不胜感激。
您的“问题”是,您正在 ISE 中使用 PowerShell。尝试直接使用 PowerShell。区别?首先有两件奇怪的事情:
reg export将成功时的输出写入stdout. reg import将成功时的输出写入stderr(我认为这是“奇怪的”)。stderr。PowerShell 不会这样做。总之,ISE 在实际成功消息上抛出错误,因为它已写入stderr. 您可以使用Start-Processcmdlet 来防止这种情况发生:
Start-Process reg -ArgumentList "import C:\Scripts\MyFile.reg"
Run Code Online (Sandbox Code Playgroud)
因为stdout外部stderr程序不会转发到您的终端。相反,如果需要,您可以通过参数-RedirectStandardOutput和来访问它们-RedirectStandardError。
如果你想评估退出代码,你可以这样做:
$process = Start-Process reg -ArgumentList "import C:\Scripts\MyFile.reg" -PassThru -Wait
$process.ExitCode
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4831 次 |
| 最近记录: |