Как подавить ошибки PowerShell .net GUI - PullRequest
0 голосов
/ 18 января 2019

Я пишу сценарий PowerShell с использованием Windows Forms, который создает графический интерфейс для пользователей для ввода данных, и всякий раз, когда пользователь вводит неверную информацию в поле, он использует строку состояния, чтобы сообщить пользователю, что введенные данныеневерно.

У меня есть это во вспомогательной функции, и оператор if используется, чтобы определить, являются ли данные, введенные пользователем, неверными.Если это так, сценарий должен вернуться к началу, так как форма всегда открыта до тех пор, пока пользователь не нажмет кнопку «X» в правом верхнем углу или не нажмет кнопку «Закрыть», которую я создал.

К сожалению, когда пользователь вводит неверную информацию и нажимает кнопку «Отправить», он выдает окно с сообщением об ошибке «Необработанное исключение произошло в компоненте в вашем приложении. Если вы нажмете« Продолжить », приложение проигнорирует эту ошибку».и попытайтесь продолжить. "

Я пытался использовать Break, Throw и Write-Error с указанным сообщением и SilentlyContinue.Все методы выдают одну и ту же ошибку.Есть ли способ подавить это окно с ошибкой?

Редактировать: Вот обработка ошибок в моем сценарии:

if(-Not ($myVar.Text.ToString()) {
    $sBar.Text = "Invalid input. Please try again."
    Write-Error "Invalid input error" -ErrorAction Stop #Can be replaced with Continue or SilentlyContinue, gives same error. Throw, Exit, and Break also give the same error of unhandled exception.
}

$myVar - это текстовое поле вФорма Windows и $sBar - строка состояния.

Вот как выглядит всплывающее окно с ошибкой:

Error Popup Window

1 Ответ

0 голосов
/ 18 января 2019

Таким образом, ваша ошибка PowerShell возвращается правильно. Это Windows Forms, которая ловит его и создает окно обработки ошибок, которое позволяет пользователю двигаться дальше Прочтите эту статью Адама Бертрама . Он рассказывает о том, как правильно отображать ошибки в окнах PowerShell.

«Вы должны выяснить, как указать пользователю вашего скрипта, что произошла ошибка.»

$statusBar = New-Object -TypeName System.Windows.Forms.StatusBar
$statusBar.Text = ‘Message status bar’
$Form.Controls.Add($statusBar)
$Form.ShowDialog()

При нажатии кнопки или при отправке контента выполните следующие действия:

$button.add_Click({
 try
 {
     <strong>Get-Content</strong> -Path C:\File.txt
 }
 catch
 {
     $statusBar.Text = $_.Exception.Message    
 }
})
...