使用Invoke-Command使用参数运行可执行文件

时间:2015-05-19 10:50:21

标签: powershell execution invoke-command

我试图通过PowerShell脚本使用invoke-command以配置文件作为参数运行可执行文件。

以下是我目前在PowerShell脚本中的内容:

$config = 'D:\EmailLoader\App.config'
invoke-command -ComputerName SERVER-NAME -ScriptBlock {param($config) & 'D:\EmailLoader\GetMailAndAttachment.exe' $config} -ArgumentList $config

然后,我使用以下命令执行PowerShell脚本:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -File "D:\PowerShellScripts\Email.ps1"

我收到以下错误:

Unexpected token 'config' in expression or statement.
At D:\PowerShellScripts\Email.ps1:3 char:121
+ invoke-command -ComputerName SERVER-NAME -ScriptBlock {param($config)     'D:\EmailLoader\GetMailAndAttachment.exe' $config <<<< } -ArgumentList $config
+ CategoryInfo          : ParserError: (config:String) [], ParentContainsE   rrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken

2 个答案:

答案 0 :(得分:1)

代码看起来应该有效。但是异常消息明显缺少&符号。我会首先检查一下,因为当&丢失时,我会得到完全相同的消息。因此,保存的文件可能存在问题,而不是代码。

附注:如果您使用的是PowerShell 3.0或更高版本,则应考虑使用脚本块中的$using:范围,以避免添加param-ArgumentList

$config = 'D:\EmailLoader\App.config'
Invoke-Command -ComputerName SERVER-NAME -ScriptBlock {
    &'D:\EmailLoader\GetMailAndAttachment.exe' $using:config
}

答案 1 :(得分:0)

无需将$config作为参数传递给ScriptBlock。也不需要两次添加$config参数。这应该有效:

$config = 'D:\EmailLoader\App.config'
Invoke-Command -ComputerName SERVER-NAME -ScriptBlock {&('D:\EmailLoader\GetMailAndAttachment.exe')} -ArgumentList @($config)