Nick's Blog

如何正确使用远程PowerShell (Remote PowerShell)

本篇将详细讲解如何使用 远程PowerShell (Remote PowerShell)来解决企业服务器出现的问题。

主要命令行:Invoke-Command ; New-PSSession ; Foreach ; Copy-Item

场景:如果你仅仅是操作一个Server,你可能看不出远程PowerShell (Remote PowerShell) 的威力,但当你要操作成百上千台的服务器是,remote powershell就显得极为重要。

举例:如果你想要在100台server上同时安装Windows Feature (例如 IIS,Hyper-V等组件),如果要远程登陆到每一个Server且安装组件,可能要花费几天,但是如果使用远程Powershell,有可能你的工作将在短短的几秒钟完成。

1. 大家都知道Invoke-Command允许一台计算机在另外一台计算机上远程执行命令行,的确命令行本身已经给管理员们带来了很大的方便,但是每一次执行icm的时候,如果选择的是某一个服务器,计算机都会尝试连接到远端server>执行命令行>最后断开与远端server的链接。但是如果选择的是远程登陆的是回话,则会一直保持着联系,而且在运行速度上Session也要远远快于computername。

举例:

icm -comp dc {$var=2}
icm -comp dc {write-output $var}
Nothing comes out

icm -session $sessions {$var=2}
icm -comp dc {$var}
2

measure-command {icm -comp dc {get-process}}
902
measure-command {icm -sessions {get-process}}
574

2. 举例如何使用PowerShell实现在多台服务器上远程安装Windows组件:

$servers = ‘s1’, ‘s2’
$s = New-PSSession -ComputerName $servers
icm -session $s {Install-WindowsFeature web-server}

3. 如何将当前初始网页文件复制到多台远端不同服务器,并在当前服务器上打开此网页

$servers = ‘s1’, ‘s2’
$servers | foreach {copy-item c:default.htm -Destination \$_c$inetpubwwwroot}
$servers | foreach {start ieplore http://$_}