powershell: скрипт с переменными args
Я хочу начать script1.ps1 из другого скрипта с аргументами, хранящимися в переменной.
$para = "-Name name -GUI -desc ""this is the description"" -dryrun"
. .script1.ps1 $para
args я получаю в script1.ps1 выглядит так:
args[0]:- Name name-GUI-desc "это описание" - dryrun
так это не то, что я хотел сделать.
Кто-нибудь знает, как решить эту проблему?
thx lepi
PS: Не уверен, сколько аргументов переменной будут содержать и как они будут ранжироваться.
2 ответов
используя Invoke-Expression
другая альтернатива:
$para = '-Name name -GUI -desc "this is the description" -dryrun'
Invoke-Expression -Command ".\script1.ps1 $para"
вам нужно использовать оператор splatting. Посмотреть блог команды powershell или здесь в stackoverflow.com.
вот пример:
@'
param(
[string]$Name,
[string]$Street,
[string]$FavouriteColor
)
write-host name $name
write-host Street $Street
write-host FavouriteColor $FavouriteColor
'@ | Set-Content splatting.ps1
# you may pass an array (parameters are bound by position)
$x = 'my name','Corner'
.\splatting.ps1 @x
# or hashtable, basically the same as .\splatting -favouritecolor blue -name 'my name'
$x = @{FavouriteColor='blue'
Name='my name'
}
.\splatting.ps1 @x
в вашем случае вам нужно назвать это так:
$para = @{Name='name'; GUI=$true; desc='this is the description'; dryrun=$true}
. .\script1.ps1 @para