2015-05-19 2 views
1

Я пытаюсь запустить исполняемый файл с конфигурационным файлом в качестве параметра, используя команду 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 
+1

Итак, в чем проблема, с которой вы столкнулись? Вы описали, что вы пытаетесь сделать (что должно работать AFAICS), но не то, что происходит не так. –

+0

@AnsgarWiechers Я отредактировал вопрос, включив в него ошибку. – ASindleMouat

+0

Я бы предложил проверить этот вопрос. http://stackoverflow.com/questions/4225748/how-do-i-pass-named-parameters-with-invoke-command – Ironic

ответ

1

Код выглядит так, как будто он должен работать. Но в сообщении об исключении явно отсутствует символ &. Сначала я проверю это, потому что вы получаете то же самое сообщение, которое я ожидал получить, когда отсутствовал &. Так что, возможно, проблема с сохраненным файлом, а не с вашим кодом.

Side Примечание: Если вы на PowerShell 3.0 или более поздней версии, вы должны рассмотреть возможность использования $using: сферы в блоке сценария, чтобы избежать добавления param и -ArgumentList.

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

Я думаю, что я перепутал, сценарий наверху, кажется, работает нормально, сценарий, который я запускал, который возвратил сообщение об ошибке, не имел & перед строкой в ​​ScriptBlock. Слишком много вариантов скриптов открываются! – ASindleMouat

0

Нет необходимости передавать $config в качестве параметра ScriptBlock. Также не нужно дважды добавлять параметр $config. Это должно работать:

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

Возвращает следующее сообщение об ошибке: + CategoryInfo: NotSpecified: (: String) [], RemoteException + FullyQualifiedErrorId: NativeCommandError Необработанное Исключение: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта. в GetMailAndAttachment.GMAA.ReadConfig (String ConfigFile, String Key) в GetMailAndAttachment.GMAA.Main (String [] args) – ASindleMouat

+0

Я внесла изменения, чтобы убедиться, что список аргументов является een массивом. Если это не сработает, проблема возникает в программе EmailLoader – Rubanov

+0

, по-прежнему кажется, что она выдает ту же ошибку – ASindleMouat

Смежные вопросы