Call-оператор Powershell (&) с параметрами из переменной - PullRequest
0 голосов
/ 01 октября 2018

Всем сегодня,

Я пытаюсь выполнить функцию в PowerShell с параметрами, полученными из переменной. Я не уверен, возможно ли это так, как я этого хочу, но, возможно, у кого-то естьЛюбая идея, как мне поступить так.

$scriptPath = "C:\temp\Create-File.ps1"
$parameters = "-Path C:\temp\testfile.txt -DoSomethingSpecial"

& $scriptPath $parameters

Что-то в этом роде, я не знаю, в каком порядке вводятся параметры, поэтому я не могу использовать $ args [n..m]или привязка по положению для этого.Может быть, есть какой-то другой командлет, о котором я не знаю, который способен на это?

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

Вы можете использовать hastable и Splatting , чтобы сделать это.

Просто установите каждое имя параметра и значение в переменной, как если бы вы имели нормальную hastable, затем передайте это с помощью @params синтаксис.

Однако для параметра переключателя необходимо значение $true, чтобы он работал правильно.

$params = @{
    Path               = 'C:\temp\testfile.txt'
    DoSomethingSpecial = $true
}

.\Create-File.ps1 @params
0 голосов
/ 06 апреля 2019

Передача объекта как @James C., предложенная в его ответе, позволяет передавать только параметры в синтаксисе Powershell (например, -param1 value1 -param2 value2)

Когда вам нужно больше контроля над передаваемыми параметрами, например:

  • синтаксис двойной тире для стиля Unix --param1 value1
  • Синтаксис косой черты для стиля Windows /param1 value1
  • Требуется знак равенства (или двоеточие) -param1=value1 или -param1:value1
  • Нет значения для параметра -boolean_param1
  • дополнительные глаголы (значения без имени параметра) value1 value2

вы можете использовать массив вместо объекта

взять команду ipconfig, например, чтобы обновить все соединения с "con" в их имени:

$cmd = "ipconfig"
$params = @('/renew', '*Con*');
& $cmd $params

или конкретный вопрос, приведенный в примере:

$params = @('-Path', 'C:\temp\testfile.txt', '-DoSomethingSpecial')
.\Create-File.ps1 @params
0 голосов
/ 01 октября 2018

Вы можете запустить его с помощью Start-Process

Start-Process powershell -ArgumentList "$scriptPath $parameters"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...