0

Мне интересно, какая именно передовая практика Рассмотрение обоих примеров, вероятно, будет работать. Используя встроенные примеры справки, я написал скрипт для установки функций Windows на удаленных серверах. Вот мой код:Установка функций Windows на удаленном сервере 2012 с использованием powershell 3.0

$servers = ('server1', 'server2', 'server3', 'server4') 

ForEach ($server in $servers) { 
    Install-WindowsFeature -Name Desktop-Experience -ComputerName $server -IncludeAllSubFeature -IncludeManagementTools -Restart 
} 

Будет выше предпочтительнее, или я должен обернуть «Install-WindowsFeature ...» в блоке «Invoke-Command», как следующий?

Invoke-Command -ComputerName server1, server2, server3, server4 -command { 
    Install-WindowsFeature -Name Desktop-Experience -ComputerName $server -IncludeAllSubFeature -IncludeManagementTools -Restart 
} 

Спасибо за понимание!

ответ

0

Лично я хотел бы использовать последний (непосредственно вызывать Install-WindowsFeature -ComputerName $server, а не делать отдельную Invoke-Command) в этом случае по следующим причинам:

  1. Вы можете быть закодировав имена элементов в настоящее время, но и в в будущем вы можете захотеть поместить их в переменную. Если вы поместите их в переменную, вам придется передать ее как параметр в блок сценариев Invoke-Command. Это вполне возможно, но больше работы.
  2. Используя свой собственный цикл, вы можете писать сообщения, протоколирование и т.д. прогресс
  3. Вы не получите ничего, используя Invoke-Command в этом случае, потому что вы запускаете одну команду на удаленном компьютере (в отличие от запуска нескольких команд с параметрами -ComputerName против запуска нескольких команд внутри блока сценария).