Синтаксис параметров функции PowerShell

#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 поможет вам исправить эту ошибку.