Powershell 在 reg 导入时抛出终止错误,但操作成功完成
Powershell throws terminating error on reg import but operation completes successfully
两者 this stack post as well as 看起来很相似,但我在那里找不到我的解决方案。我在理解 reg 导出与 reg 导入行为之间的区别时遇到问题。
当 运行 reg export inside powershell 时,它 returns "operation completed successfully" 但是 reg import 抛出一个终止错误说 "operation completed successfully"。注册表文件已正确导入,即使它作为错误抛出。一个例子:
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
Microsoft's documentation of the reg import command 表示 return 代码为 0 表示成功,1 表示失败。为什么 Powershell return 将成功作为 reg 导出的常规成功消息,但将其作为 reg 导入的终止错误抛出?
我是 运行 Powershell 管理员,登录用户是服务器上的本地管理员。感谢任何帮助。
您的 "problem" 是,您在 ISE 中使用 PowerShell。尝试直接使用 PowerShell。区别?先说两件奇怪的事:
reg export
将其成功输出写入 stdout
。 reg import
将其成功输出写入 stderr
(我认为是 "strange")。
- 如果外部程序写入
stderr
,ISE 将抛出异常。 PowerShell 不会那样做。
总之,ISE 在实际成功消息上抛出错误,因为它已写入 stderr
。您可以使用 Start-Process
cmdlet 来防止这种情况发生:
Start-Process reg -ArgumentList "import C:\Scripts\MyFile.reg"
因为外部程序的 stdout
和 stderr
不会转发到您的终端。相反,如果需要,您可以通过参数 -RedirectStandardOutput
和 -RedirectStandardError
访问它们。
如果你想评估退出代码,你可以这样做:
$process = Start-Process reg -ArgumentList "import C:\Scripts\MyFile.reg" -PassThru -Wait
$process.ExitCode
两者 this stack post as well as
当 运行 reg export inside powershell 时,它 returns "operation completed successfully" 但是 reg import 抛出一个终止错误说 "operation completed successfully"。注册表文件已正确导入,即使它作为错误抛出。一个例子:
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
Microsoft's documentation of the reg import command 表示 return 代码为 0 表示成功,1 表示失败。为什么 Powershell return 将成功作为 reg 导出的常规成功消息,但将其作为 reg 导入的终止错误抛出?
我是 运行 Powershell 管理员,登录用户是服务器上的本地管理员。感谢任何帮助。
您的 "problem" 是,您在 ISE 中使用 PowerShell。尝试直接使用 PowerShell。区别?先说两件奇怪的事:
reg export
将其成功输出写入stdout
。reg import
将其成功输出写入stderr
(我认为是 "strange")。- 如果外部程序写入
stderr
,ISE 将抛出异常。 PowerShell 不会那样做。
总之,ISE 在实际成功消息上抛出错误,因为它已写入 stderr
。您可以使用 Start-Process
cmdlet 来防止这种情况发生:
Start-Process reg -ArgumentList "import C:\Scripts\MyFile.reg"
因为外部程序的 stdout
和 stderr
不会转发到您的终端。相反,如果需要,您可以通过参数 -RedirectStandardOutput
和 -RedirectStandardError
访问它们。
如果你想评估退出代码,你可以这样做:
$process = Start-Process reg -ArgumentList "import C:\Scripts\MyFile.reg" -PassThru -Wait
$process.ExitCode