2015-11-22 2 views
0

Я новичок в написании сценариев PowerShell. Мне было интересно, есть ли способ вызвать скрипт inline без создания нового файла .ps1 и передать ему аргументы, например.Как передать аргументы встроенному скрипту в PowerShell?

powershell -command "echo `$args[0]" 123 456 

Я хочу echo $args[0] быть сценарий и 123 456 быть аргументы, но PowerShell кажется интерпретировать 123 456 как часть сценария (как если бы я написал "echo `$args[0] 123 456") и печатает

123 
456 

Можно ли обойти это без создания нового скрипта PowerShell на диске?

+2

Из PowerShell вы можете сделать 'powershell.exe -command {echo $ args [0]} -args 123,456' –

+0

Что вызывает вопрос? –

ответ

0

Это делает то, что я думаю, что вы хотите:

powershell -command "& {write-host `$args[0] - `$args[1] - `$args[2]}" 123 456 789 

Каждый элемент массива $ ARGS это другой параметр так, чтобы доступ трех параметров нужно $ арг [0], $ арг [1], и $ арг [2].

Вы также можете использовать оператор паров и получить именованные параметры:

powershell -command "& {param(`$x,`$y); write-host `$x - `$y}" -x 123 -y 456 
1

До сих пор вы видели пару ответов и комментарии, показывающие, как сделать именно то, что вы просили. Но я должен повторить комментарий @ BillStewart: какова ваша истинная цель?

Если у вас есть возможность выполнить произвольный PowerShell, который у вас есть в строке, вы можете, конечно, вызвать powershell.exe, как вы видели в нескольких ответах и ​​комментариях. Однако, если вы это сделаете, обязательно включите параметр -noprofile для повышения эффективности. И для еще большей эффективности вы можете использовать Invoke-Command без необходимости разворачивать целую отдельную среду PowerShell, например.

Invoke-Command -ScriptBlock ([Scriptblock]::Create('echo $args[0]')) -arg 123, 456 

Если, с другой стороны, вы хотите, чтобы выполнить кусок PowerShell (не в строке, но только отдельно в сценарии по какой-либо причине), вы можете упростить это:

Invoke-Command -ScriptBlock {echo $args[0]} -arg 123, 456 

Всякий раз, когда у вас есть выбор, избегайте манипулирования строками как исполняемый код (на любом языке)! Часто используемый способ сделать это в Powershell с Invoke-Expression, который я упоминаю только , только, чтобы указать вам на просветительскую статью Invoke-Expression considered harmful.

 Смежные вопросы

  • Нет связанных вопросов^_^