使用PowerShell 3.0在远程服务器2012上安装Windows功能

时间:2013-09-05 15:46:04

标签: powershell powershell-v3.0 powershell-remoting powershell-ise

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

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

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

以上是首选还是我应该在“Invoke-Command”块中包装“Install-WindowsFeature ...”,如下所示?

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

感谢您的见解!

1 个答案:

答案 0 :(得分:0)

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

  1. 您现在可能正在对功能名称进行硬编码,但将来您可能希望将它们放在变量中。如果将它们放在变量中,则必须将其作为参数传递到Invoke-Command的脚本块中。这完全有可能,但需要更多的工作。
  2. 通过使用自己的循环,您可以编写进度消息,记录等。
  3. 在这种情况下使用Invoke-Command没有任何好处,因为您在远程计算机上运行单个命令(而不是使用-ComputerName参数运行多个命令而不是在脚本中运行多个命令块)。