在域控上打 開Windows Power Shell ISE集成腳本環 境(如 圖 1),執 行“Get-AD Computer -filter *”命令,可以返回域中所有計算機信息。執行“Get-AD Computer-filter * |select name”命令,只顯示域中所有主機的名稱。在腳本編輯面板 中 輸 入“STOP-Computer-Computername xxx -force”,其中的“xxx”為具體的主機名稱(以下與之相同),點擊F5鍵,可以將該主機強制關機。使用“Invoke-Command”命令,可以向指定的主機上發送指定的命令,函數,腳本和腳本塊。

圖1 Windows PowerShell ISE集成腳本環境
PowerShell的遠程管理功能,分為非持久性會話,持久性會話和隱式遠程管理等類別。非持久性會話,利用Invoke-Command命令,在執行命令后不保持連接,遠程主機上的PowerShell進程立即退出。通過在命令后面添加腳本塊,執行后將其推送到目標主機上,然后在目標主機上執行該腳本塊。也可以進入建立的會話,在其中直接執行各種指令。持久性會話使用的是New-PSSession等命令,可持續性地保持連接狀態,斷開后可重新連接。隱式遠程管理,可同時管理多臺計算機。
PowerShell默認使用Windows身份驗證方式,在域環境和工作組環境中,身份驗證是存在差異的,在特定情況下,還能需要使用額外的參數。默認情況下,本地或者域管理員組成員擁有完全控制權限。對于非管理員組的成員來,必須添加到本地或者域中的Remote Management Users組中,才擁有遠程訪問權限。對權限進行設定,需要使用“Set-PSSession Configuration Microsoft.Powershell-Show Security DescriptorUI”命令來實現。
為了保證連接的安全,最好配置證書來執行身份認證和數據加密處理,可以在被控機上打 開PowerShell ISE窗口,執 行“Get-Childltem wsman:local hostListener |select *” 命令,顯示偵聽器信息,在返回信息中的“Keys”欄中顯 示“{Transport=HTTP,Address=*}”,即默認使用一個偵聽器,屬于HTTP協議,可以偵聽來自所有的地址的網絡連接。使用HTTPS協議安全性更高,但是需要使用數字證書。
假設在域控上安裝有CA證書頒發機構,在本機上執行“mmc”程序,在控制臺中點擊菜單“文件→添加/刪除管理單元”項,在左側選擇“證書”項,點擊“添加”,選擇“計算機賬戶”,將其添加進來。在控制臺左側選擇“證書→個人”,在右鍵菜單上點擊“所有任務→申請新證書”,在向導界面中點擊“下一步”,選擇“Active Directory注冊策略”,在下一步窗口中選擇“計算機”項,點擊“注冊”來申請一張計算機證書。打開該證書的屬性窗口,在“常規”面板中的“頒發給”欄中顯示安裝證書的主機信息,例如“server1.xxx.com”。 之 后在PowerShell 窗口執行相關的命令來創建偵聽器,當客戶端進行連接時,可以使用HTTPS進行安全連接。
執 行“New-Item WSMan:localhostListener-Transport https-Credential "xxxxxx"”命令,其中的“xxxxxx”為證書的指紋,在“Address:*”提示欄中可以設置地址偵聽的范圍,默認為全部地址。這樣,就創建了一個HTTPS的偵聽器。執行“Get-Childltem wsman:localhostListener”命令,會顯示默認的HTTP偵聽器和上述創建的HTTPS偵聽器。
在控制端上打開PowerShell窗口,執行“gpupdate /force”命令,來刷新組策略。因為是在域環境中,在被控段和控制端都是以相同的域管理員身份登錄,所以可以執行“Enter-PSSession -computerName server1.xxx.com -UseSSL”命令,使用HTTPS協議連接被控機。進入連接會話后,就可以在直接在該機上執行各種命令了。
默認狀態下,PowerShell的遠程管理功能是打開的。也可以在PowerShell中執 行“Enbale-PSRemoting-force”命令,激活遠程管理功能。需要對IP為192.168.1.10的主機進行遠程關機,可以執行“Invoke-Command -ComputerName 192.168.1.10-Script{Stop-Computer}”,該機就可以自動關機了。
在工作組環境,因為需要執行身份驗證操作,如果宿主機和被控機之間的管理員密碼不同,是無法執行上述命令的。需要執行“Invoke-Command -ComputerName 192.168.1.10-Script{Stop-Computer-Force} -Credential administrator”命 令,指定登錄是使用的賬戶名,這 里 為Administrator,在身份認證窗口中輸入其密碼后,才可以執行該 命 令。 執 行“Enter-PSSession -ComputerName 192.168.1.10 -Credential administrator”命令,可以進入連接會話中,猶如在該機上打開了PowerShell命令窗口,可以執行各種命令。
執行“hostname”命令,可以顯示該機的名稱。執行“Add-WindowsFeather webserver”命令,可以在目標機上安裝IIS組件。對于管理員來說,有時希望遠程管理域控上的活動目錄,在域中某臺服務器上的PowerShell中 執 行“PSSession DCServer”命 令,這 里 的“DCServer”為域控名稱,進入域控上的PowerShell會話界面,在“[dcserver]:PS C:>”提示欄中輸入所需的命令,猶如在域控上操作PowerShell一樣,執行“exit”命令返回。用戶也可以創建新的會話線程,執行“New-PSSession DCServer”命令,在返回信息中的“State”列表中如果顯示“Opened”字樣,說明該會話連接成功。執行“Get-Module-PSSession(Get-PSSession)-ListAvailable”命令,可以從已經建立的會話中獲取目標主機上的所有模塊信息。
當針對多個目標主機創建多個會話后,最好為不同的會話添加對應的前綴,這樣就可以知曉命令是從哪臺目標機上運行的。例如,執 行“$pssession1 =New-PSSession -Computer dcserver.xxx.com”命 令,創建一個新的會話,并設置變 量“$pssession1”。 執行“Import-PSSession-Session $pssession1-Prefix dcserver”命 令,可以添加名為“dcserver”的前綴。這里所說的前綴是和具體的命令綁定起來使用的。因為PowerShell在默認啟動時,只導入常用的模塊。在本地操作時,需要導入目標主機上的所需的模塊,來滿足遠程控制的需要。例如,執行“Import-PSSession -Session$pssession1 -Module ActiveDirectory”命令,導入活動目錄管理模塊。之后可以在本地上執行“Get-ADUser -Filter *”等命令,來執行對應的管理操作。
服務器池只是一個抽象的概念,在實際連接時只能連接到其中某臺服務器上。當連接成功后,如果試圖對服務器池中的其他主機遠程控制,就需要以當前連接的服務器為跳板,來連接池中其他服務器,這時就需要明確指定憑據信息,這就涉及到遠程憑據委派功能。
執 行“New-PSSession server1.xxx.com”命令,連接到服務器場中Server1服務器上。執行“Import-PSSession (Get-PSSession)-Prefix server 1-AllowClobber”命令,導入會話連接并設置前綴,允許覆蓋本地命令。但是,當試圖在PowerShell中對該機執行特定的操作(例如加載腳本和模塊等),系統會顯示無法訪問本地服務器場的提示。因為對該機的遠程訪問,可能會涉及到對場中其他服務器(例如SQL Serve服務器等)的訪問操作,這就需要使用到遠程憑據委派功能。
在本地機上執行“Enable-WSManCredSSP-Role Client-Delegate Computer"server1.xxc.com"”命令,允許向Server1委派憑據,這里的目標主機名稱需要使用FQDN格式。執行“Get-WSManCredSSP”命令,可以看到系統提示已將計算機配置為允許將新憑據委派到目標計算機中。
登錄到Server1上,執行“Enable-WS Man Cred SSP-Role Server”命令,允許該機接受憑據委派。在返回的提示信息中顯示基本身份驗證處于禁止狀態,Kerberos驗證處于允許狀態,為了便于測試,可以在本地機上 執 行“Enter-PSSession-Computer Name server1.xxx.com -Authentication Credssp -Credential administrator@xxx.com”命令,使用憑據委派方式進入連接會話(后面要設置目標服務器池的管理員賬戶名)。在打開的身份驗證窗口中輸入該賬戶的密碼即可。