0

我想知道考虑到这两个示例可能会起作用,哪个是最佳实践。使用内置帮助示例,我编写了一个脚本来在远程服务器上安装 Windows 功能。这是我的代码:

$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
}

感谢您的洞察力!

4

1 回答 1

0

在这种情况下,我个人会使用后者(直接调用Install-WindowsFeature -ComputerName $server而不是单独调用Invoke-Command) ,原因如下:

  1. 您现在可能正在对功能名称进行硬编码,但将来您可能希望将它们放入变量中。如果将它们放在变量中,则必须将其作为参数传递给Invoke-Command's 脚本块。这是完全可能的,但需要更多的工作。
  2. 通过使用自己的循环,您可以编写进度消息、日志记录等。
  3. 在这种情况下使用不会获得任何收益,Invoke-Command因为您在远程计算机上运行单个命令(而不是运行带-ComputerName参数的多个命令与在脚本块内运行多个命令)。
于 2014-08-04T03:27:29.327 回答