将PowerShell变量传递到脚本块

13

我正在尝试将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 个字符处
+ 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"
+ CategoryInfo : ParameterBindingException: (:) [Invoke-Command],ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeCommandCommand

1个回答

25
您可以通过-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

1
嗨,Shay,感谢你回复我。我尝试了你提供的两种解决方案,但是我得到了相同的错误提示:“Invoke-Command:找不到接受参数'Pa$$word'的位置参数。” 你有什么想法吗?再次感谢,Colm - Colm Blake
你可以试试使用调用运算符(例如 &): & BESUserAdminClient.exe -username $username -password $password -ad_auth -domain staging -b bbbes -u $u -change -wrandom - Shay Levy
3
已修复!感谢Shay指出正确的方向。-用户名$args [0] -密码$args [1] -ad_auth -域暂存-bbbes -u$args [2] -change -wrandom } -argumentlist @($ username,$ password,$ u)在参数列表中使用$args和@()已经起作用非常感谢。 - Colm Blake
我曾经遇到过完全相同的问题。使用@($var1, $var2)和-ArgumentList选项完美地解决了我的问题。谢谢大家。 - Vippy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接