#regex #powershell
#powershell #powershell-3.0
Вопрос:
Почему узел записи вне функции работает иначе, чем внутри функции?
Похоже, что каким-то образом переменные параметров меняются по сравнению с тем, что я объявил…
function a([string]$svr, [string]$usr) {
$x = "$svr$usr"
Write-Host $x
}
$svr = 'abc'
$usr = 'def'
Write-Host "$svr$usr" # abcdef
a($svr, $usr) # abc def
Ответ №1:
Не вызывайте функции или командлеты в PowerShell со скобками и запятыми (делайте это только при вызовах методов)!
При вызове a($svr, $usr)
вы передаете массив с двумя значениями в качестве единственного значения первого параметра. Это эквивалентно вызову like a -svr $svr,$usr
, что означает $usr
, что параметр вообще не указан. Итак, теперь $x
равно строковому представлению массива (соединение с пробелами), за которым следует обратная косая черта, за которой ничего не следует.
Вместо этого назовите это так:
a $svr $usr
a -svr $svr -usr $usr
Комментарии:
1. Я использую Powershell каждый день, и время от времени я совершаю эту точную ошибку и трачу более 10 минут на то, чтобы рвать на себе волосы.
2. О, и я хочу отметить, что использование
Set-StrictMode
поможет вам исправить эту ошибку.