powershell: скрипт с переменными аргументами

Я хочу запустить script1.ps1 из другого сценария с аргументами, хранящимися в переменной.

$para = "-Name name -GUI -desc ""this is the description"" -dryrun"
. .\script1.ps1 $para

Аргументы, которые я получаю в script1.ps1, выглядят так:

args [0]: -Name name -GUI -desc "это описание" -dryrun

так что это не то, что я хотел получить. Есть ли у кого-нибудь идеи, как решить эту проблему?
thx lepi

PS: не уверен, сколько аргументов будет содержать переменная и как они будут ранжироваться.


person lepi    schedule 02.08.2010    source источник


Ответы (2)


Другой вариант - использовать Invoke-Expression:

$para = '-Name name -GUI -desc "this is the description" -dryrun'
Invoke-Expression -Command ".\script1.ps1 $para"
person George Howarth    schedule 02.08.2010
comment
спасибо, результат в конце такой же, но это действительно красивый и короткий вариант! - person lepi; 03.08.2010

Вам необходимо использовать оператор разбиения. Посмотрите на блог команды 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
person stej    schedule 02.08.2010
comment
Я рад, что помог. Если вас устраивает ответ (-а), вы можете закрыть вопросы, приняв ответ;) - person stej; 03.08.2010
comment
Где оператор splatting? Здесь нет оператора, это просто способ обработки команд PowerShell ... т.е. это функция, а не оператор. - person John Leidegren; 01.10.2017