我写一个脚本检查注册表值,并退出,如果是0。当我运行该脚本(它会继续,如果值是1)PowerShell的出口不工作
if ((Get-ItemProperty -path HKLM:\SOFTWARE\ICT\LoginScript).proceed -eq 0) {
$form.close()
exit
}
reg值为0时,它无法退出并引发异常:
System.Management.Automation.ExitException: System error.
at System.Management.Automation.FlowControlNode.Execute(Array input, Pipe outputPipe, ExecutionContext context)
at System.Management.Automation.ParseTreeNode.Execute(Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext context)
at System.Management.Automation.StatementListNode.ExecuteStatement(ParseTreeNode statement, Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext context)
at System.Management.Automation.StatementListNode.Execute(Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext context)
...
该脚本正在使用Windows窗体 - 不确定是否相关?
编辑:
我已经剧本归纳为以下测试:
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$Form = New-Object System.Windows.Forms.Form
$Form.Add_Shown({ $Form.Activate(); start-sleep -s 3; exit; $form.close() })
$Form.ShowDialog()
这仍然给出了错误。如果我在非Windows窗体上运行start-sleep -s 3; exit
代码,它可以正常工作,因此它看起来像是Windows窗体绑定的问题。
感谢,
本
Get-ItemProperty似乎是不相关的 - 在我的测试中这是正确的(尽管如果找不到路径它会抛出)。我认为这个问题是与$ form.close()。您需要展示更多内容(如何声明$ form等)。 – TrueWill 2010-07-24 21:57:32
您能否发布可重现此问题的完整脚本?创建一个仍然重现问题并在此处发布的最小示例。 你也可以尝试通过命令行(即不是从脚本文件)执行整个事情,并报告这个错误是否仍然存在。 – 2010-07-26 02:22:31
请参阅上面的编辑 - 错误似乎与Windows窗体? – Ben 2010-07-26 08:23:55