PowerShell 2.0最重要和值得人興奮的特性就是其具有的遠端管理的能力,PowerShell遠端管理可以通過遠端管理計算機,遠端管理是通過 WinRM(Windows Remote Management)起作用的,而WinRM是基于微軟的WS-Management協定的。
在PowerShell 2.0中這個特性是作為統一代碼執行模型(UCEM,Universal Code Execution Model)執行的。UCEM意味着在本地能執行的就能在任意位置執行。PowerShell遠端管理也能從本地線程導入遠端指令——這個特性作為隐含的遠端管理,允許使用者儲存和導出這些引入的指令到硬碟上并能作為可在以後使用的子產品。PowerShell 2.0 還具有一系列其他諸如互交式線程的特性,将會在後面逐個介紹。
PowerShell的遠端管理允許多種連接配接方式,包括互交(1:1)、輸出(1:n)以及輸入(n:1通過使用IIS主機模型),這裡将會逐個解釋如何配置主機以上述形式工作。
PowerShell 2.0遠端管理的條件:
為了啟用PowerShell遠端管理,所有參與遠端管理的計算機都應該安裝以下軟體:
1. Windows PowerShell 2.0
2. NET Framework 2.0 SP1以上
3. Windows Remote Management(WinRM)2.0
以上軟體在Wndows 7和Windows Server 2008 R2上是預設安裝的,早期其他版本的Windows需要讀者自行從微軟網站上下載下傳和安裝。
PowerShell 2.0 和WinRM 2.0 是作為Windows Management Framework的一部分提供下載下傳的,針對Windows XP,Windows Server 2003,Windows Vista和Windows Server 2008作業系統有效。WinRM2.0和PowerShell2.0能夠安裝在以下幾種作業系統上:
1. Windows Server 2008 with Service Pack 1
2. Windows Server 2008 with Service Pack 2
3. Windows Server 2003 with Service Pack 2
4. Windows Vista with Service Pack 2
5. Windows Vista with Service Pack 1
6. Windows XP with Service Pack 3
7. Windows Embedded POSReady 2009
8. Windows Embedded for Point of Service 1.1
為了能在遠端計算機上運作腳本和指令,執行遠端腳本的使用者必須具有以下特點:
在遠端主機上屬于administrators組的成員,或
在執行遠端相關指令時能提供administrator憑據,或
在遠端主機上具有通路PS線程配置資訊的權限
同樣,要求用戶端的Windows作業系統版本是Windows Vista和Windows 7,網絡位置需要被設定為家庭或工作組。如果任何網絡擴充卡的網絡位置被設定為public,WS-Management的功能可能會不完全。
PowerShell中傳統的遠端指令
在PowerShell中有些cmdlet支援對遠端計算機的資訊通路。這些cmdlet都有一個ComputerName參數。比如,下列的cmdlet支援computername參數,是以可以用來從遠端計算機擷取資訊。
Get-WmiObject
Invoke-WmiMethod
Limit-EventLog
Set-Service
Set-WmiInstance
Show-EventLog
Stop-Computer
Clear-EventLog
Get-Counter
New-EventLog
Register-WmiEvent
Remove-EventLog
Remove-WmiObject
Restart-Computer
Get-EventLog
Get-HotFix
Get-Process
Get-Service
Get-WinEvent
這些cmdlet的遠端管理能力是獨立于PowerShell的。由于cmdlet作者通過類似于遠端過程調用(RPC)的方法來實作,此類方法被稱之為傳統的遠端方法。
明顯的弱點在于并不是所有的PowerShell的cmdlet都支援此類遠端管理方法。比如,如果使用者想要在遠端計算機上執行Get-PSDrive或 Get-Childitem是不可能的。此時,新的PowerShell 2.0所具有的遠端管理的特性就變得很重要了。這裡介紹的遠端管理是針對此類嶄新的遠端技術。
遠端cmdlet概況
下面介紹一部分在PowerShell遠端管理中需要的重要的cmdlet,也許這些cmdlet并不都是可直接用于執行遠端指令,但是能夠用于配置遠端管理。
Enable-PSRemoting
Enable-PSRemoting 用于配置計算機接受通過WS-Management技術發送的Windows PowerShell 遠端指令。如果要啟用PowerShell遠端特性需首先且僅需執行這個cmdlet一遍。這個cmdlet會馬上調用Set- WSManQuickConfig配置WinRM服務,為WS Management啟用防火牆的例外,最後啟用所有已注冊的PowerShell配置。
提醒:如果需要計算機接受遠端主機發送的指令,則必須啟用PowerShell的遠端管理配置;如果隻是發送指令到遠端主機咋不需要啟用PowerShell遠端管理。
Disable-Command
Disable-Command用于禁用目前計算機所有的PowerShell線程配置,使計算機接受任何從遠端主機發送的指令。在禁用PowerShell的遠端管理後,不再希望WinRM服務自啟動,則需要手動停止該服務。
Invoke-Command
Invoke- Command用于在本地或遠端主機上執行指令并傳回指令的輸出,包括錯誤。用單獨的Invoke-Command指令,可以在多台主機上運作指令。這個 cmdlet預設情況下會在遠端計算機開啟線程用于運作指令,當執行完畢指令則将其關閉。這種方式塊可能會比較換慢慢需要在特定的預定義線程資訊下執行。
New-PSSession
Invoke-Command cmdlet支援指定已存在的線程用于加強指令執行的速度。通過制定特定的線程,使用者可以免去憑空建立和銷毀線程的需要。New-PSSession cmdlet能用于在遠端計算機中建立持久連接配接。通過建立持久線程,使用者可以分享資料,如在相同PSSession中的不同指令間共享函數或者變量值。
Enter-PSSession
Enter-PSSession cmdlet能和單獨的遠端主機啟動互動式線程。線上程存活期間,使用者向遠端主機鍵入的指令,就如同直接在遠端主機上執行。在同一時間隻能啟動一個互動式線程,使用者能通過此cmdlet指定由New-PSSession cmdlet建立的PSSession。
Exit-PSSession
Exit-PSSession将退出由Enter-PSSession cmdlet建立的互交式的PS線程。
Get-PSSession
Get- PSSession擷取在目前線程中建立的Windows PowerShell線程(PSSession),當沒有參數指定的情況下,這個cmdlet擷取所有的PSSession并傳回所有的 PSSession到一個變量,使用者能在其他類似于Invoke-Command,Enter-PSSession,Remove-PSSession等 cmdlet中使用這些線程資訊。
Remove-PSSession
Remove-PSSession用于關閉 PS線程,将會停止任何在PSSession中運作的指令,結束PSSession,并釋放所有PSSession占用的資源。如果PSSesion正在連接配接到遠端計算機,Remove-PSSession将會關閉本地到遠端計算機的連接配接。
Import-PSSession
Import-PSSession使用PowrShell 2.0隐含的遠端特性。隐含的遠端特性允許使用者從本地/遠端将指令導入到現存的PS線程中,如果是在本地線程中則直接運作指令。
Export-PSSession
Export- PSSession用于從本機或遠端計算機的其他PSSession中擷取cmdlet,函數,别名以及其他指令格式,并将其作為Windows PowerShell子產品存儲到本地硬碟。使用者能用Import-Module cmdlet從存儲的子產品擷取指令并添加到PS線程中。
Register-PSSessionConguration
任何用Invoke-Command、New-PSSession或任何PowerShell遠端cmdlet建立的PS線程,在$PSSessionConfigurationName變量中指定用預設的PS線程配置資訊。PS線程配置資訊用于确定那些指令線上程中是可用的,并且包含保護計算機的設定,諸如限制線程單個對象或指令能接收資料的數量。這樣,使用者能用Register-PSSessionConfiguration cmdlet在本地計算機中建立和注冊新的線程配置資訊。
Unregister-PSSessionConguration
Unregister-PSSessionConguration 用于删除在計算機注冊線程的配置資訊。使用此cmdlet可能會删除預設的PSSession配置資訊(Microsoft.PowerShell或 Microsoft.PowerShell32),此時就需要使用Enable-PSRemoting cmdlet創新建立和注冊預設PS線程配置資訊。
Disable-PSSessionConfiguration
Disable-PSSessionConfiguration用于将注冊的PS線程配置資訊置成失效。這裡需要強調的是此操作隻将配置資訊設定為失效,并未從本機反注冊或删除資訊,這樣将會使線程配置資訊不能被用于建立遠端線程。
Enable-PSSessionConfiguration
Enable-PSSessionConfiguration用于将通過Disable-PSSessionConfiguration置為失效的線程配置資訊重新生效。
Get-PSSessionConfiguration
Get-PSSessionConfiguration用于擷取已在本地計算機上注冊的線程配置資訊。
Set-PSSessionConfiguration
Set-PSSessionConfiguration用于更改已在本地計算機注冊的線程配置資訊的屬性。
Test-WSMan
PowerShell 遠端管理需要在遠端主機上運作WinRM服務。使用者可以使用Test-WSMan cmdlet快速檢查是否能從其他計算機建立遠端線程。如果WinRM沒有在遠端主機上啟用,使用者能安全的确認PowerShell遠端管理沒有被啟用。然而,卻不能隻通過檢查WinRM服務是否運作來确認PowerShell遠端管理是否被啟用,因為這個cmdlet是通過檢查WinRM服務和遠端管理所需的許多功能元件是否齊備來判斷的。
Enable-WSManCredSSP
PowerShell遠端管理支援CredSSP認證并且可以通過Enable-WSManCredSSP cmdlet啟用。Enable-WSManCredSSP啟用用戶端或伺服器的CredSSP認證,當CredSSP認證被使用,使用者憑據被傳遞到遠端計算機用于認證。此類認證被設計用于通過已建立的遠端線程傳遞認證資訊到另外的遠端線程指令。比如,使用者可以在遠端計算機中運作背景任務時使用此類認證。
Disable-WSManCredSSP
Disable-WSManCredSSP用于在用戶端或伺服器禁用CredSSP認證。
另外還有其他的WSMan cmdlet在PowerShell 2.0中引入,諸如Connect-WSMan,Disconnect-WSMan,Get-WSManInstance,New- WSManInstance,New-WSManSessionOption,Remove-WSManInstance和Set- WSManInstance,這些cmdlet并不是直接用于PowerShell遠端管理的,但會在後續的文章中根據需要進行介紹。
總結
PowerShell 2.0所支援的遠端管理,使其對網絡中的其他主機有了更高效的管理手段,這樣Windows除了以往的遠端桌面以外,也有了可以和Unix/Linux匹敵的強大指令行支援,而且這裡是通過序列化的XML對指令的執行結果所包含的對象進行傳輸,在傳輸到本地之後再進行反序列化解包恢複出對象。 Windows基于對象的操作形式不僅被擴充到了指令行,而且指令行還是基于網絡的,這就使其強大的功能遠遠超過了Unix/Linux基于文字的指令,因為對象所具有的各種特性的表現形式遠比文字所能表達的内容要強大和詳實。另外遠端管理能夠将遠端cmdlet引入到本地,可以實作不同産品類型下的 cmdlet可以在本地實作映射,在通過本地主機和管理目标間的認證之後,就可不再考慮線程的問題了。
盡管現在處于CTP3版本的 PowerShell在遠端主機的認證方面還存在一定局限,因為多種版本的Windows在認證手段上還是有差别的,這裡遠端管理的功能可能在活動目錄授權的模式下工作的更好一些。但是相信在V2正式版釋出時,遠端管理的功能将會進一步完善。關于PowerShell遠端管理更多的詳細操作和技術細節将會在後續的文章中進行詳細的介紹。
本文轉自 bilinyee部落格,原文連結: http://blog.51cto.com/ericfu/1358735 如需轉載請自行聯系原作者