■ 河南 郭建偉
編者按:對(duì)于網(wǎng)絡(luò)管理員來(lái)說(shuō),經(jīng)常需要配置各種服務(wù)器,在其中安裝不同的角色和功能,來(lái)保障其可以為客戶(hù)端提供服務(wù)。在很多情況下,需要使用遠(yuǎn)程管理的方式,來(lái)完成這些配置操作。
除了使用遠(yuǎn)程桌面等常規(guī)遠(yuǎn)控方式外,還可以使用PowerShell來(lái)實(shí)現(xiàn)。對(duì)于PowerShell來(lái)說(shuō),可以使用多種協(xié)議和方式,來(lái)執(zhí)行遠(yuǎn)程管理操作。
PowerShell可以使用RPC或者DCOM方式,來(lái)連接遠(yuǎn)程主機(jī)。
例如執(zhí)行“Get-Process”命令,可以顯示當(dāng)前主機(jī)的進(jìn)程信息。
執(zhí) 行“Get-Process-ComputerName server1.xxx.com”命令,可以顯示遠(yuǎn)程主機(jī)的進(jìn)程信息,這里的“server1.xxx.com”為假設(shè)的目標(biāo)主機(jī)。
注意:如果權(quán)限不足的話(huà),是無(wú)法正常執(zhí)行的。
為此可以在Windows PowerShell快捷菜單的右鍵菜單上的點(diǎn)擊“以其他用戶(hù)身份運(yùn)行”項(xiàng),輸入合適的賬戶(hù)名和密碼,即可順利執(zhí)行以上命令。
對(duì)于該賬戶(hù)來(lái)說(shuō),必須擁有目標(biāo)主機(jī)本地管理員的身份。但是,當(dāng)連接某些服務(wù)器時(shí),使用RPC方式可能會(huì)失敗。因?yàn)镻RC協(xié)議使用的TCP 135/445等端口,如果遠(yuǎn)程主機(jī)開(kāi)啟了Windows防火墻,并且沒(méi)有啟用RPC例外的話(huà),這種連接方式是無(wú)法實(shí)現(xiàn)的。
為此可以執(zhí)行“Enter-PSSession server1.xxx.com”命令,打開(kāi)和目標(biāo)主機(jī)的遠(yuǎn)程會(huì)話(huà)界面,執(zhí)行“Get-NetFirewallRule | where{$_.name -like "*FPS*"}”命令,來(lái)查看和該機(jī)防火墻上和文件與打印共享相關(guān)的規(guī)則。
執(zhí) 行“Get-NetFirewallRule | where{$_.name -like "*FPS*"}| Enable- NetFirewall Rule”命令,來(lái)開(kāi)啟RPC協(xié)議的例外規(guī)則。執(zhí)行“exit”命令,退出遠(yuǎn)程會(huì)話(huà)界面。再 次 執(zhí) 行“Get-Process-ComputerName srv.xxx.com”命令,就可以順利執(zhí)行了。當(dāng)然,具體的管理命令還有很多,例如執(zhí)行“Get-EventLog -ComputerName server1.xxx.com -LogName Application -Newest 100”命令,可以查看目標(biāo)主機(jī)日志中和應(yīng)用程序有關(guān)的前100條日志信息。執(zhí)行“Get-Service -ComputerName server1.xxx.com | where{$_.Status -eq "stopped"}”命令,可以查看目標(biāo)主機(jī)上處于停止?fàn)顟B(tài)服務(wù)。使用WMI方式實(shí)現(xiàn)遠(yuǎn)程連接
除了使用RPC/DOM方 式 外,PowerShell還 可 以 使 用 WMI(即Windos Management I n s t r u m e n t a t i o n,Windows管理規(guī)范)方式進(jìn)行遠(yuǎn)程管理。
例 如,執(zhí) 行“Get-WmiObject -Class Win32_OperatingSYstem | ft name”命令,可以顯示當(dāng)前主機(jī)的描述信息。
執(zhí) 行“Get-W m i O b j e c t -C l a s s Win32_OperatingSYstem-ComputerName xxx”命令,可以獲取目標(biāo)主機(jī)的信息,其中的“xxx”為目標(biāo)主機(jī)名稱(chēng)。
如 果 出 現(xiàn)“Get-WmiObject :PRC 服務(wù)器不可用”的錯(cuò)誤信息,當(dāng)使用上述方法排除了RPC相關(guān)的問(wèn)題外,還說(shuō)明了要想使用WMI方式進(jìn)行遠(yuǎn)程管理,必須在目標(biāo)主機(jī)的防火墻開(kāi)啟和WMI相關(guān)的例外。

圖1 設(shè)置合適的憑據(jù)信息
執(zhí) 行 上 述“Enter-PSSesion”命令連接到遠(yuǎn) 程 主 機(jī),執(zhí) 行“Get-NetFirewallRule | where{$_.name -like "*WMI*"}”命令,會(huì)顯示和WMI相關(guān)的防火墻規(guī)則。執(zhí)行“Get-NetFirewallRule | Enable-NetFirewallRule”命令,開(kāi)啟和WMI相關(guān)的例外。執(zhí)行“exit”命令退出。
執(zhí) 行“Get-W m i O b j e c t -C l a s s Win32_OperatingSystem-ComputerName server1.xxx.com | ft caption”命令,就可以顯示目標(biāo)主機(jī)的版本信息。
如果依然失敗,并顯示“Get-WmiObject :拒絕訪問(wèn)”的信息,說(shuō)明當(dāng)前使用的賬戶(hù)權(quán)限不足。
為此可以執(zhí)行“Get-WmiObject Win32_Operating System-Credentialxxxa d m i n i s t r a t o r-ComputerName server1.xxx.com”命令,使用指定的賬戶(hù)(這里為域賬戶(hù))進(jìn)行訪問(wèn)即可,這里的“xxx”為具體的域名。
如果在執(zhí)行“Enter-PSSesion”命令時(shí),出現(xiàn)“連接遠(yuǎn)程服務(wù)器失敗,拒絕訪問(wèn)”的提示,說(shuō)明依然是當(dāng)前賬戶(hù)權(quán)限不足所致。為此可以執(zhí)行“$cred =Get-Credential”命令,定義一個(gè)變量,用來(lái)獲取用戶(hù)信息。
在自動(dòng)打開(kāi)的Windows PowerShell憑據(jù)請(qǐng)求窗口(如圖1)中輸入合適的賬戶(hù)名(例如域管理員等)和密碼。之后執(zhí)行“Enter-PSSession xxx -Credential$cred”命令,使用設(shè)定的賬戶(hù)進(jìn)行連接即可。
對(duì)于WMI來(lái)說(shuō),還可以使用“Get-CimInstance”命令加以操作。例如,執(zhí)行“Get-CimInstance -Classname Win32_OperatingSystem-ComputerName server1.xxx.com”命令,來(lái)查詢(xún)目標(biāo)主機(jī)的版本信息。
對(duì)于以上方式來(lái)說(shuō),都必須開(kāi)啟文件和打印功能功能,對(duì)應(yīng)的需要在防火墻上為其開(kāi)啟例外。這必然需要開(kāi)啟TCP 135/139/445等端口,在內(nèi)網(wǎng)環(huán)境中比較容易解決,但是目標(biāo)主機(jī)位于Internet上,操作起來(lái)就比較困難了。
例如,在Azure公有云上,可能會(huì)運(yùn)行很多服務(wù)器,如果希望通過(guò)PowerShell方式對(duì)其進(jìn)行遠(yuǎn)程管理,想在這些云端主機(jī)上開(kāi)啟防火墻例外的話(huà),就顯得很不方便了。使用WSMangemnt方式,可以很好地解決上述的問(wèn)題。
相對(duì)于RPC/WMI方式來(lái)說(shuō),使用WSMan方式可以很容易地在防火墻開(kāi)啟例外。WSMan默認(rèn)使用TCP 5985/5986端口,使用后一個(gè)端口進(jìn)行連接的話(huà),需要和證書(shū)進(jìn)行綁定。
實(shí)際上,即使使用前一個(gè)端口進(jìn)行連接,依然可以進(jìn)行加密處理。在Windows中使用名為WinRM的服務(wù),來(lái)管理和配置WSMan協(xié)議。
從Windows Server 2012開(kāi)始,WSMan協(xié)議默認(rèn)處于自動(dòng)開(kāi)啟狀態(tài)。
可以使用兩種方式,來(lái)發(fā)揮WSMan的功能,一種是利用“Enter-PSSession”命令,來(lái)直接進(jìn)入到遠(yuǎn)程主機(jī)中,執(zhí)行各種指令。
注 意:當(dāng) 使 用“Enter-PSSession”命令連接Windows Server 2008 R2主機(jī)時(shí),可能會(huì)出現(xiàn)“連接到遠(yuǎn)程服務(wù)器失敗,WinRM無(wú)法完成該操作”的提示,這是因?yàn)樵谀J(rèn)情況下,在Windows Server 2008 R2中并沒(méi)有啟用PowerShell遠(yuǎn)程管理功能。
在Windows Server 2008 R2主機(jī)上打開(kāi)PowerShell窗 口, 執(zhí) 行“Enable-PSRemoting”命令,來(lái)啟動(dòng)WinRM服務(wù),并將其設(shè)置為自動(dòng)啟動(dòng)狀態(tài),創(chuàng)建一個(gè)偵聽(tīng)器以接收任意IP地址的連接請(qǐng)求,對(duì)WS-Management流量啟用防火墻例外。
執(zhí) 行“Get-PSSessionConfiguration”命令,查看相關(guān)的配置信息。這樣,就可以順利進(jìn)行連接了。
當(dāng)連接成功后,如果在目標(biāo)主機(jī)上執(zhí)行“netstat-an”命令,會(huì)查看到端口為T(mén)CP 5985的偵聽(tīng)項(xiàng)目。另一種是使用“Invoke-Command”命令,將相關(guān)指令發(fā)送到目標(biāo)主機(jī)上運(yùn)行。
例 如,執(zhí) 行“Invoke-Command -ComputerName s e r v e r 1.x x x.c o m-ScriptBlock {Get-Process}”命令,可以連接到目標(biāo)主機(jī),并在其上執(zhí)行“Get-Process”命令,來(lái)查看其進(jìn)程信息。
在其中的“-ScriptBloc k”參數(shù)中可以包含具體的指令,例如包含“{Get-WmiObject Win32_OperatingSystem | ft caption}”命令,則顯示該主機(jī)的版本信息。
如 果 執(zhí) 行“Invoke-Command”命令時(shí),出現(xiàn)拒絕訪問(wèn)的提示,那么就說(shuō)明當(dāng)前的賬戶(hù)權(quán)限不足。
執(zhí) 行“Invoke-Command-ComputerName server1.xxx.com -ScriptBlock {Get-Process} –Credential$cred”命令,使用指定的賬戶(hù)進(jìn)行連接即可。
利用“Invoke-Command”指令,可以進(jìn)行批量查詢(xún)操作。
例 如, 執(zhí) 行Invoke-Command -ComputerName server1.xxx.com,server2.xxx.com -ScriptBlock {Get-Process}命令,可以同時(shí)查詢(xún)多臺(tái)主機(jī)的信息。