Ошибка записи Powershell не заполняется -ErrorVariable

Я использую Powershell 4 и пытаюсь получить переменную ошибки для заполнения в функции, используя параметр -ErrorVariable в вызове и write-error в самой функции. Однако переменная никогда не заполняется.

Вот мой сценарий:

$SqlCmd = "C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE"

myfunc -ErrorVariable myfuncerr 

if ($myfuncerr -and $myfuncerr.Count -ne 0) {
    $worked = 1
} else {
    $worked = 0
}

function myfunc 
{
    $output = & $SqlCmd -S localhost -d integration -q 'alter table tablethatdoesntexist add xt int' -b | out-string 

    if ($LASTEXITCODE = 1)
    {
        write-error $output
    }
}

Поскольку это -ErrorVariable, я ожидаю, что write-error заполнит переменную $myfuncerr содержимым $output, но этого не происходит ($myfuncerr остается пустым). Я отлаживаю в Powershell ISE, поэтому вижу, что на самом деле вызывается Write-Error.

Я также попытался вызвать исключение с помощью throw($output), запустив myfunc с -ErrorAction SilentlyContinue, но $myfuncerr по-прежнему не заполняется, т.е.

$SqlCmd = "C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE"

myfunc -ErrorVariable myfuncerr -ErrorAction SilentlyContinue

if ($myfuncerr -and $myfuncerr.Count -ne 0) {
    $worked = 1
} else {
    $worked = 0
}

function myfunc 
{
    $output = & $SqlCmd -S localhost -d integration -q 'alter table tablethatdoesntexist add xt int' -b | out-string 

    if ($LASTEXITCODE = 1)
    {
        throw $output
    }
}

Правильно ли я использую параметр -ErrorVariable?

1 ответ

Решение

Вы должны указать, что ваша функция является расширенной функцией, предоставляя param() блок с [CmdletBinding()] атрибут:

function myfunc 
{
    [CmdletBinding()]
    param()

    $output = & $SqlCmd -S localhost -d integration -q 'alter table tablethatdoesntexist add xt int' -b | out-string 

    if ($LASTEXITCODE -eq 1)
    {
        throw $output
    }
}

Это автоматически добавит общие параметры к вашей функции, включая ErrorVariable параметр

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