Выход 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() вместо.

Другие вопросы по тегам