В вашем случае простое окружение выражения круглыми скобками позволит вам передать его в вашу функцию.
Это необходимо сделать, потому что PowerShell имеет более одного режима синтаксического анализа в зависимости от начала команды.
Режим выражения подобен тому, как большинство других языков разбираются - числа - это числа, а строки заключаются в кавычки.
Командный режим обрабатывает все как строку, кроме переменных и скобок. Строки здесь не нужно заключать в кавычки.
1+2 Expression mode - starts with number
"string" Expression mode - starts with quote
string Command mode - starts with letter
& "string" Command mode - starts with &
. "string" Command mode - starts with . and a space
.123 Expression mode - starts with . and number (without space)
.string Command mode - starts with a . that is part of a command name
Вы можете смешивать режимы в одной строке, заключая команды в круглые скобки.
Вы можете увидеть этот эффект, если определите функцию abs следующим образом:
function Abs($value)
{
Write-Host $args
if($value -lt 0) { -$value } else { $value }
}
Abs 1 + 2
#Prints: + 2
#Returns: 1
Abs 1+2
#Prints:
#Returns: 1+2
Abs (1 + 2)
#Prints:
#Returns: 3
Abs (1+2)
#Prints:
#Returns: 3