Выход Powershell не работает
Я пишу скрипт, который проверяет значение реестра и завершает работу, если равен 0. (Он будет продолжен, если значение равно 1.)
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()
И это все еще дает ошибку. Если я бегу start-sleep -s 3; exit
код в форме, отличной от Windows, работает нормально, поэтому похоже, что проблема связана с Windows Forms.
Спасибо,
Бен
1 ответ
Определение exit
имеет тот же эффект, что и Exit-PSSession
, Глядя на трассировку стека, я думаю, что код пытается завершить интерактивный сеанс из другого потока, и поэтому он терпит неудачу.
Вы просто пытаетесь закончить сценарий? Вы могли бы попробовать [Runspace]::DefaultRunspace.CloseAsync()
вместо.