Выход Powershell не работает - PullRequest
2 голосов
/ 25 июля 2010

Я пишу скрипт, который проверяет значение реестра и завершает работу, если равен 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 Ответ

1 голос
/ 26 июля 2010

Указание exit имеет тот же эффект, что и Exit-PSSession. Глядя на трассировку стека, я думаю, что код пытается завершить интерактивный сеанс из другого потока, и поэтому он не работает.

Вы просто пытаетесь завершить сценарий? Вместо этого вы можете попробовать [Runspace]::DefaultRunspace.CloseAsync().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...