2014-11-15 2 views
2

Почему функция Write-Host вне функции работает не так, как внутри функции?Синтаксис параметров функции PowerShell

Похоже, какое-то образом параметры переменные меняются от того, что я заявил, что это будет ...

function a([string]$svr, [string]$usr) { 
    $x = "$svr\$usr" 
    Write-Host $x 
} 

$svr = 'abc' 
$usr = 'def' 
$x = "$svr\$usr" 
Write-Host $x 
a($svr, $usr) 

Результаты ...

а \ Защита

а Защита \

ответ

7

Не вызывайте функции или командлеты в командной оболочке с круглыми и запятыми (это делается только в вызовах метода)!

Когда вы вызываете a($svr, $usr), вы передаете массив с двумя значениями в качестве единственного значения первого параметра. Это эквивалентно называть его так: a -svr $svr,$usr, что означает, что параметр $usr не указан вообще. Итак, теперь $x равно строковому представлению массива (объединение с пробелами), за которым следует обратная косая черта, за которой следует ничего.

Вместо называть это так:

a $svr $usr 
a -svr $svr -usr $usr 
+0

спасибо, что это было .... хм :) – Shaunt

+2

я использую Powershell каждый день, и каждый сейчас и потом я делаю эту точную ошибку и провести 10+ минут вытягивая мои волосы. – briantist

+2

О, и я хочу указать, что использование 'Set-StrictMode' поможет вам поймать эту ошибку. – briantist

Смежные вопросы