2013-07-17 2 views
2

У меня есть сценарий powershell 2.0, который должен запускать команду на нескольких серверах и обрабатывать выходные данные. Я хочу запустить команду и обработку для каждого сервера в фоновом задании.Invoke-Command в фоновом задании

COMAND работает без каких-либо проблем, и завершается в течение половины секунды или меньше:

Invoke-Command -ComputerName $client -ScriptBlock { #do some stuff } 

Но когда я запускаю это в качестве фонового задания, работа не прекращается:

Start-Job { Invoke-Command -ComputerName $client -ScriptBlock { #do some stuff } } 

Кто-нибудь может понять, в чем проблема?

ответ

4

Похоже, вы должны сделать это по-другому:

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

Чтобы запустить фоновое задание на удаленном компьютере, используйте параметр AsJob , который доступен на многих командлетов или использования Командлет Invoke-Command на запустит команду Start-Job на удаленном компьютере. Для получения дополнительной информации, см. About_Remote_Jobs.

+0

Но это выполняет задание на удаленном компьютере. Я хочу запустить задание на исполняющем компьютере и обработать вывод из команды invoke в этом задании. – bones

+1

@bones Я думаю, что эффект тот же. 'Invoke-Command' должен начать работу на удаленном компьютере и немедленно вернуться. Вы можете использовать 'Receive-Job -ComputerName', чтобы получить результат. –

1

Я предпочитаю использовать Start-Job для запуска команды invoke, чтобы я мог наблюдать и обрабатывать задания на центральной машине с помощью Get-Job.

Когда я прохожу через «список удаленных компьютеров», я использую «текущее имя компьютера» как параметр -Name в Start-Job, чтобы я мог смотреть каждое задание индивидуально и как группу.

Только мои два цента из опыта.

Редактировать Пример:

$job = 
{ 
    $remoteJob = { ##Do Stuff Here } 
    Invoke-Command -ComputerName $args[0] -ScriptBlock $remoteJob 
} 
Start-Job -Name <jobName> -ScriptBlock $job -ArgumentList <remoteComputer> 

На ваш вопрос о том, почему работы «никогда не заканчивается» У меня нет входа, кроме, убедитесь, что код вы работаете удаленно на самом деле закончится.

Надеется, что это помогает

0

Это также будет работать, по крайней мере, в Powershell 5

invoke-command -asjob -computer $PC -scriptblock { ## do stuff }