Количество ошибок и переменная $ Error automati c не согласованы - PullRequest
2 голосов
/ 17 февраля 2020

Я пытаюсь gr asp переменные Write-Error и $Error automati c с примером кода ниже, который должен генерировать единственную ошибку:

function Test-Error
{
    [CmdletBinding()]
    param()
    Write-Error -Message "Error message" -Category PermissionDenied -ErrorId SampleID
}

$Error.Clear()
$ErrorActionPreference = "Stop"

Test-Error

Согласно к документации:

$ Error Содержит массив объектов ошибок, которые представляют самые последние ошибки. Самая последняя ошибка - это первый объект ошибки в массиве $ Error [0].

ОК, так что давайте теперь посмотрим на содержимое ошибки:

$Error[0] | select -property *

Это напечатает ошибка, (я не вставляю ее здесь, потому что это не имеет отношения к вопросу)

Таким образом, согласно документации это ошибка, но похоже, что документы неверны:

$Error[1] | select -property *

Это также распечатает что-то!

Вопрос в том, как разделить одну ошибку на 2 части?

Разве просто $Error[0] не должен содержать последнюю ошибку как Документы говорят?

Очевидно, я очистил переменную, поэтому в массиве должен быть только один элемент, а не 2.

оба элемента указывают на одну ошибку, но какова цель из 2 элементов массива для одной ошибки?

и если переменная $Error содержит около 30 ошибок, как определить, какие 2 относятся к той же ошибке? потому что это означает 60 элементов на 30 ошибок!

1 Ответ

2 голосов
/ 17 февраля 2020

Другая ошибка связана с $ErrorActionPreference = "Stop" - сообщение об ошибке, которое вы не опубликовали, разъяснило бы его, свойство Message равно The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: Error message. Если вы не используете это, вы получите только один элемент в $Error.

...