我试图通过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
答案 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)