Передача переменных Powershell в блок сценария

Я пытаюсь взять переменные PowerShell и применить их к блоку сценария.

param(
    [string]$username = $(throw "Blackberry Admin User Name is required"),
    [string]$password = $(throw "Blackberry Admin Password is required"),
    [string]$u = $(throw "Blackberry User Name is required")
    )

$s = New-PSSession -computerName bbbes01 
Invoke-Command -Session $s -Scriptblock {cd "C:\Program Files (x86)\Research In Motion\BlackBerry Enterprise Server Resource Kit\BlackBerry Enterprise Server User Administration Tool Client"
./BESUserAdminClient -username $username -password $password -ad_auth -domain staging -b bbbes -u $u -change -wrandom} -argumentlist $username $password $u

Я бегаю

. \ RandomActivationEmail.ps1 -username besadmin -password Pa $$ word -u bb.user

Ошибка, которую я получаю: -

Invoke-Command: не найден позиционный параметр, который принимает аргумент Pa $$ word. По адресу C: \ Scripts \ bb \ RandomActivationEmail.ps1: 12 символов: 15 + Invoke-Command ‹------------------------------------------------ -Сессия $ s -Scriptblock {cd "C: \ Program Files (x86) \ Research In Motion \ BlackBerry Enterprise Server Resource Kit \ Клиент инструмента администрирования пользователей BlackBerry Enterprise Server "+ CategoryInfo: InvalidArgument: (:) [Invoke-Command], ParameterBindingException + FullyQualifiedErrorId: PositionalParameterNotFound, Microsoft.PowerShell.Commands.InvokeCommandCommand

Спасибо за чтение, приветствует Колм.


person Colm Blake    schedule 11.08.2011    source источник


Ответы (1)


Вы можете передавать значения через параметр -arguments и ссылаться на них как на $ args [0] и так далее внутри блока скрипта:

Invoke-Command -Session $s -Scriptblock {
    cd "C:\Program Files (x86)\Research In Motion\BlackBerry Enterprise Server Resource Kit\BlackBerry Enterprise Server User Administration Tool Client"
    ./BESUserAdminClient -username $args[0] -password $args[1] -ad_auth -domain staging -b bbbes -u $args[2] -change -wrandom
} -argumentlist $username $password $u

Или определите параметры внутри блока скрипта и используйте именованные параметры:

Invoke-Command -Session $s -Scriptblock {
    param(
        $username,$password,$u
    )

    cd "C:\Program Files (x86)\Research In Motion\BlackBerry Enterprise Server Resource Kit\BlackBerry Enterprise Server User Administration Tool Client"
    ./BESUserAdminClient -username $username -password $password  -ad_auth -domain staging -b bbbes -u $u -change -wrandom
} -argumentlist $username $password $u
person Shay Levy    schedule 11.08.2011
comment
Привет, Шей, спасибо, что обратился ко мне. Я пробовал оба ваших решения и получаю ту же ошибку. Invoke-Command: не найден позиционный параметр, который принимает аргумент «Pa $$ word». Есть идеи, где я ошибаюсь? еще раз спасибо, Колм - person Colm Blake; 11.08.2011
comment
Можете ли вы попробовать с оператором вызова (e, g &): & BESUserAdminClient.exe -username $ username -password $ password -ad_auth -domain staging -b bbbes -u $ u -change -wrandom - person Shay Levy; 11.08.2011
comment
Фиксированный! Спасибо Шей за то, что указал мне в правильном направлении -username $ args [0] -password $ args [1] -ad_auth -domain staging -b bbbes -u $ args [2] -change -wrandom} -argumentlist @ ($ username , $ password, $ u) с использованием $ args и @ () в списке аргументов, большое спасибо - person Colm Blake; 11.08.2011
comment
У меня была такая же проблема. Использование @ ($ var1, $ var2) с параметром -ArgumentList отлично сработало для меня. Спасибо ребята. - person Vippy; 14.09.2012