如何将字符串变量传递给invoke-expression?

时间:2014-08-15 12:02:29

标签: powershell invoke-command

我正在运行以下powershell命令:

$cmd = "xxx.exe"

Invoke-Command -ComputerName localhost {Invoke-Expression $cmd}

然而我收到错误:

Cannot bind argument to parameter 'Command' because it is null.

+ CategoryInfo          : InvalidData: (:) [Invoke-Expression], ParameterB
indingValidationException
 + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,M
icrosoft.PowerShell.Commands.InvokeExpressionCommand

2 个答案:

答案 0 :(得分:4)

查看Invoke-Command的文档。

使用-ArgumentList参数或者如果powershell 3参见示例9($Using:)。

http://technet.microsoft.com/en-us/library/hh849719.aspx

ArgumentList示例 -

$cmd = "xxx.exe"
Invoke-Command -ComputerName localhost {Invoke-Expression $args[0]} -ArgumentList $cmd

如果在脚本块中使用param,则可以使用命名参数而不是内置$args

答案 1 :(得分:0)

我将按照我的方式向您展示,传递-FilePath的文件并使用-ArgumentList传递参数

我创建了一个包含我想要执行的代码的函数。

#remote_functions.ps1
param($command, $param1, $param2, $param3, $param4, $param5)
$ScriptVersion = "1.0"

function Write5Strings($string1, $string2, $string3, $string4, $string5)
{
    Write-Host "String1: $string1"
    Write-Host "String2: $string2"
    Write-Host "String3: $string3"
    Write-Host "String4: $string4"
    Write-Host "String5: $string5"
    throw "ERROR"
}


try
{
    &$command $param1 $param2 $param3 $param4 $param5
}
catch [System.Exception]
{
    Write-Error $_.Exception.ToString()
    exit 1
} 

我用这种方式调用它:

$server="server"
$remotingPort=81

$job = Invoke-Command -AsJob -Port $remotingPort -ComputerName $server -FilePath ".\remote_functions.ps1" -ArgumentList @("Write5Strings", "apple", "banana", "orange", "pear", "watermelon")

还请检查此问题:How do I pass named parameters with Invoke-Command?