2016-09-02 6 views
1

ps1 находится на удаленной машине. Я бегу ниже команды от какого-то другого махина.Разница между командами и ScriptBlock Powershell

Есть ли разница между использованием и ниже сценария ---

invoke-command -computer $MachineName -command { C:\hello.ps1 } 
invoke-command -computer $MachineName -scriptblock{ C:\hello.ps1 } 

Кроме того, я собираюсь использовать для петли для нескольких машины, имеющей такое же имя сценария, но имеющего дифф последовательность работы, которая находится на каждом удаленном компьютере. Хотите понять, что исполнение для второй машины будет идти только в том случае, если сначала будет завершено. Верный ?

ответ

3

Разница между -командой и -scriptblock

Там нет никакой разницы в исполнении. -command - просто псевдоним для scriptblock. Вы можете убедиться в этом, получая информацию параметра для invoke-command команды

(Get-Command -Name Invoke-Command).Parameters.Values | select name, aliases 

Последовательное исполнение

Да, исполнение является последовательным. Указанная вами команда будет выполняться на втором компьютере после команда завершена на первой машине.

According to the help

Эти команды выполняются синхронно (по одному за раз). Когда команды завершены, вывод команд со всех компьютеров равен , сохраненным в переменной $ version. Результат включает имя компьютера , с которого были получены данные.

+0

Спасибо! Любая помощь для моего второго запроса, поскольку я хочу, чтобы мой первый вызов выполнялся полностью, а затем хочет перейти на другой сервер в цикле ... Является ли уход за циклом и вызовом автоматически? – RishuA

+0

Это действительно зависит от того, как 'Invoke-Command' реализуется при передаче нескольких вычислительных машин. Я бы предположил, что это последовательное, но я должен проверить. –

+0

На самом деле я не могу тестировать на живой машине сейчас, так как некоторая работа продолжается еще несколько дней. – RishuA

0

Чтобы ответить на второй вопрос: Invoke-Command работает параллельно. Он запускает то, что когда-либо упоминается в блоке сценария для всех параллельных компьютеров. По умолчанию, powershell будет говорить до 32 компьютеров одновременно. Если вы укажете более того, он будет стоять в очереди, так что по завершении работы одного из компьютеров начнется следующее. Однако, я считаю, вы можете увеличить это число, указав параметр -throttlelimit Invoke-Command.

+0

Я использую for loop, но он будет делать параллельно? Или 1 машина за раз. Ниже приведен код. MACHINES = Get-Content "Somelocation" foreach ($ Машина в $ MACHINES) {invoke-command -computer $ Machine -command {C: \ hello.ps1}} – RishuA

+0

Lieven Keersmaekers предположил, что он будет последовательным один за другим. – RishuA

+1

Я пробовал на двух живых удаленных компьютерах и его последовательных не параллельных. – RishuA

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

  • Нет связанных вопросов^_^