powershell передает аргументы командной строки
вот мой код :
$script={
Write-Host "Num Args:" $args.Length;
Write-Host $args[0]
}
Invoke-Command -ScriptBlock $script
когда я запускаю
powershell.exe .test.ps1 one two three
Я получил
Num Args: 0
Я думал, что получу
Num Args: 3
One
что-то я упускаю?
спасибо
3 ответов
у вас на самом деле есть две области. Уровень сценария и уровень блока сценария. $args.Length
и $args[0]
будет то, что вы ожидаете в
вы также можете явно объявить именованные параметры. Например:
param([switch]$someBoolSwitch=$false, [String]$nameOfSomething="some default string")
это позволяет передавать именованные аргументы в скрипт, как в следующем примере:
.\<nameOfScript.ps1> -someBoolSwitch -nameOfSomething "Slayer Roolz!"
и если вы опустили -nameOfSomething "Slayer Roolz!"
, потом $nameOfSomething
просто по умолчанию "some default sting"
. Аналогично,$someBoolSwitch
по умолчанию $false
если не определено иначе.
этот метод имеет преимущество, позволяя вам как разработчику решать, какие параметры необходимы и какие из них могут быть опущены или по умолчанию. Кроме того, он позволяет пользователю вводить аргументы в любом порядке, поскольку они называются, а не позиционные.
одним из недостатков именованных параметров в отличие от позиционных параметров является то, что вызов командной строки может стать довольно большим, поскольку пользователь должен ввести имя каждого параметра.