Ошибка записи 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
параметр