gpt4 book ai didi

Powershell 在 reg 导入时抛出终止错误,但操作成功完成

转载 作者:行者123 更新时间:2023-12-03 08:45:56 25 4
gpt4 key购买 nike

两者this stack post以及this one看起来很相似,但我在那里找不到我的解决方案。我在理解 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

Microsoft's documentation of the reg import command表示返回码为 0 表示成功,1 表示失败。为什么 Powershell 将成功作为 reg 导出的常规成功消息返回,但将其作为 reg 导入的终止错误抛出?

我以管理员身份运行 Powershell,并且登录用户是服务器上的本地管理员。如有任何帮助,我们将不胜感激。

最佳答案

您的“问题”是,您正在 ISE 中使用 PowerShell。尝试直接使用 PowerShell。区别?首先是两件奇怪的事情:

  1. reg export 成功时将其输出写入 stdoutreg import 成功时将其输出写入 stderr (我认为这是“奇怪的”)。
  2. 如果外部程序写入 stderr,ISE 会引发异常。 PowerShell 不会这样做。

总之,ISE 在实际成功消息上抛出错误,因为它已写入 stderr。您可以使用 Start-Process cmdlet 来防止这种情况发生:

Start-Process reg -ArgumentList "import C:\Scripts\MyFile.reg"

因为外部程序的 stdoutstderr 不会转发到您的终端。相反,如果需要,您可以通过参数 -RedirectStandardOutput-RedirectStandardError 访问它们。

如果你想评估退出代码,你可以这样做:

$process = Start-Process reg -ArgumentList "import C:\Scripts\MyFile.reg" -PassThru -Wait
$process.ExitCode

关于Powershell 在 reg 导入时抛出终止错误,但操作成功完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61483349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com