PowerShell v3在Windows Server 8中裝載了Windows Management Framework 3.0。PowerShell運行環境也能嵌入到其它套用。
基本介紹
外文名:PowerShell
平台:Windows/.NET
類型:命令行工具
開發商:微軟(Microsoft)
目標客群,執行PowerShell,產品特性,新腳本語言,優缺點,優點,缺點,創建事件日誌,Windows PowerShell 5.0,遠程檔案編輯功能,期望狀態配置,Push模式和Pull模式的配置,在遠程伺服器上運行Power Shell命令,Invoke-Command,New-PSSession,使用Windows Power Shell註銷RDP,使用Windows Power Shell管理多個伺服器,使用Windows Power Shell控制IT許可權,Windows Power Shell期望狀態配置,Windows Power Shell的Push模式和Pull模式,Windows Power Shell控制NTFS許可權,PowerShell的作用,PowerShell節流閥限制,PowerShell細微變化,PowerShell最新功能,免費的PowerShell資源與工具,PowerGUI,管理腳本編輯器,PowerCLI社區,Project Onyx,Google,Windows Power Shell自動化伺服器,Windows Power Shell的建立,Windows Power Shell設定TCP/IP,
目標客群
Windows PowerShell 入門主要面向之前沒有 Windows PowerShell 背景知識的 IT 專業人員、程式設計師和高級用戶。雖然具備腳本和 WMI 方面的背景知識會有所幫助,但是理解本文檔並不假定或要求您具備此方面知識。
儘管您可以通過以文本方式鍵入命令與 Windows PowerShell 進行互動,但 Windows PowerShell 是基於對象的,而不是基於文本的。命令的輸出即為對象。可以將輸出對象傳送給另一條命令以作為其輸入。因此,Windows PowerShell 為未曾使用過其他外殼程式的人員提供了熟悉的界面,同時引入了新的、功能強大的命令行範例。通過允許傳送對象(而不是文本),它擴展了在命令之間傳送數據的概念。
易於過渡到腳本
使用 Windows PowerShell,您可以很方便地從以互動方式鍵入命令過渡到創建和運行腳本。您可以在 Windows PowerShell命令提示符下鍵入命令以找到可執行任務的命令。隨後,可將這些命令保存到腳本或歷史記錄中,然後將其複製到檔案中以用作腳本。
有兩種連線WMI服務的方法:l 使用Get-WmiObject可以很容易地連線到WMI服務,並且獲取WMI對象。 l 使用一個COM對象,“WbemScripting.SWbemLocator”,可以連線WMI的服務。SWbemLocator對象只有一個方法,就是ConnectServer()。該方法接受5個參數:用戶名,密碼,語言代碼,驗證方法(Kerberos, NTLM等),標誌(逾時值)。
下例中,我們使用New-Object命令,創建了一個“WbemScripting.SWbemLocator”的實例。然後用這個實例的ConnectServer方法連線了到了一個WMI的名字空間(root\cimv2),ConnectServer方法返回了一個WMIService對象,接著又用這個對象的subClassesOf()方法,返回了一系列WMI的CLASS: $strComputer = "." $wmiNS = "\root\cimv2" $strUsr ="" #Blank for current security. Domain\Username $strPWD = "" #Blank for current security. $strLocl = "MS_409" #US English. Can leave blank for current language $strAuth = "" #if specify domain in strUsr this must be blank $iFlag = "0" #only two values allowed: 0 and 128. $objLocator = New-Object -comobject "WbemScripting.SWbemLocator" $objWMIService = $objLocator.ConnectServer($strComputer, ` $wmiNS, $strUsr, $strPWD, $strLocl, $strAuth, $iFLag) $colItems = $objWMIService.subClassesOf() Write-Host "There are: " $colItems.count " classes in $wmiNS" foreach ($objItem In $colItems) { $objItem.path_.class }
新腳本語言
由於以下原因,Windows PowerShell 使用它自己的語言,而不是重用現有的語言:
Windows PowerShell 需要用於管理.NET 對象的語言。該語言需要為使用cmdlet 提供一致的環境。該語言需要支持複雜的任務,而不會使簡單的任務變得更複雜。 該語言需要與在.NET編程中使用的高級語言(如C#)一致。
本質上,PowerShell新的工作流構建能寫入與功能類似的東西,使用PowerShell翻譯命令和腳本代碼到Windows工作流技術WWF進程中。WWF然後能管理整個任務,包括修復網路故障與重啟計算機等。它是編排長期運行的、複雜的、多步驟任務的更有效更可靠的一種方式。如果這個功能與下一個版本的System Center Orchestrator集成。
Windows Power Shell在用戶管理和維護Windows方面是一個強大的命令行環境。雖然Windows Power Shell是一個本地管理工具,但是它也用於管理遠程伺服器。事實上,管理員可以針對大量的伺服器創建Windows Power Shell腳本來執行管理任務。Invoke-Command和New-PSSession都是在遠程伺服器中Windows Power Shell的執行命令。
Invoke-Command
如果你只需要針對單台或者多台遠程v伺服器執行一個Windows Power Shell命令(或者一系列的管道命令),那么最便利的方法就是Windows Power Shell使用Invoke-Command命令。Microsoft的文檔列出了絕大多數的參數和語法,導致人人皆知Invoke-Command命令的複雜性。即使如此,使用Invoke-Command在遠程系統上執行Windows Power Shell命令仍然出奇地容易。
對於基本的Windows Power Shell遠程命令執行,你只需要提供遠程計算機的名稱和想要執行的代碼塊。假設你想要在名稱為Production1的遠程伺服器上執行Get-VM命令,你可以使用下面的Windows Power Shell命令:
第二點,你必須要知道雖然這個方式的設計目的只是簡單地在單個遠程系統上運行的單一Windows Power Shell命令,但是你也可以運行多個Windows Power Shell命令。如果查看之前的Windows Power Shell幾行代碼,你會注意到允許在遠程計算機上運行的Get-VM命令是包含在花括弧裡面的。任何在花括弧裡面的Windows Power Shell命令都會在指定的遠程計算機行運行。同樣的,只要所有的Windows Power Shell命令都包含在花括弧裡面,你可以使用管道符號把Windows Power Shell命令把它們連結在一起。
第三點你必須知道上面的Windows Power Shell語法只有在所有計算機中使用了Kerberos認證才會運行,同時包括有命令輸入和已經加入了域。否則,你必須使用HTTPS傳輸,並且必須指定遠程系統是受信任的主機。
New-PSSession
New-PSSession通常用於在遠程系統上執行Windows Power Shell命令。Invoke-Command命令設計於用於在遠程系統上執行單一Windows Power Shell命令(或者一連串的Windows Power Shell命令),而New-PSSession實際上是用於在遠程伺服器上重定向PowerShell。實質上,你輸入的任何Windows Power Shell命令都會自動傳送到遠程機器上運行。
這個命令如此簡易,它只要求提供遠程計算機的名稱。例如,如果你想和名為Production1的計算機建立一個會話,你可以使用以下Windows Power Shell命令:
New-PSSession –ComputerName Production1
這個Windows Power Shell命令會與指定的計算機建立會話,但是它不會自動重定向任何你在遠程計算機輸入的執行PowerShell命令;原因是Microsoft並不限制你只使用一個遠程會話。你可能需要和多個不同的伺服器建立回話。因此,輸入上述命令建立一個Windows Power Shell會話,PowerShell會提供確認的會話,也會羅列出一個會話ID號,但僅此而已。
如果你想要使用遠程會話,那么你將不得不使用另一個名為 Enter-PSSession的Windows Power Shell,只是簡單地附屬檔案上你想連線到會話ID號即可。例如,如果有一個連線到Production1,且會話ID為列名1的New-PSSession會話,你就可以輸入一下命令來連線這個會話:
Enter-PSSession 1
當你在使用這個Windows Power Shell命令時,PowerShell會提示你為這個遠程程系統更改一個相關的名稱,這樣你就可以很輕鬆地跟蹤你正在傳送命令的系統了。
現在,可以看到所有想停止的Windows Power Shell會話。接下來,只需要殺死這些Windows Power Shell會話。要做到這一點,要知道PSTerminalServices模組提供了Stop-TSSession cmdlet,可以幫你殺死Windows Power Shell會話(圖4)。
Stop-TSSession cmdlet結束Windows Power Shell會話後可能會導致最終用戶丟失工作內容,因此會提示管理員。這裡可以點擊“A”繼續下一步,但有時管理員不喜歡彈出Windows Power Shell提示信息。如果將這些放在一個更大的Windows Power Shell腳本中,提示將中斷Windows Power Shell腳本。最好的辦法是省略提示。
Stop-TSSession cmdlet有一個通用的Windows Power Shell參數,叫做–Force,Windows Power Shell允許管理員執行操作時沒有任何確認信息打擾。
如果Windows Power Shell沒有輸出,說明Windows Power Shell會話已成功註銷。
使用Windows Power Shell管理多個伺服器
對於使用Windows Power Shell及以上版本的大型微軟套用軟體環境下的系統管理員,很有可能日常都會面臨管理Windows Power Shell角色管理的問題。Windows Power Shell伺服器允許管理員通過點擊功能視窗按鈕來增加、刪除或修改系統角色和功能,但是點擊功能視窗大部份操作對於管理員來說不是自動完成的。這就是Windows Power Shell發揮作用的地方。
Windows Power Shell服務管理器是一個單獨創建的用於管理伺服器標識和系統信息的圖形化用戶界面(GUI)區域。Windows Power Shell通過管理接口允許管理員針對某個服務,Windows Power Shell通過點擊功能鍵執行各種工作。雖然這種方法適合用於小規模的套用環境,但Windows Power Shell不適合大規模集群下的套用環境。通過Windows Power Shell命令行的方式就以簡化這些操作。
Windows Power Shell有一個叫“ServFerManager”的模組,它包含了許多可以幫助管理系統角色和功能的命令(圖1)。
當不加參數地使用“Gevt-Windows Feature”命令,Windows Power Shell會輸出系統中所有的系統角色和功能—不論現在Windows Power Shell是否在系統中安裝。圖2展示了在測試系統中的一些可用的功能。
圖2. 以“Get-Windows Feature”命令的一些選項為例
Windows Power Shell對於現在系統中已經安裝系統功能,可以使用“Where-Object”命令查看(圖3)。
圖3. Where-Object命令輸出測試系統已安裝的功能
如果想安裝一個新的Windows Power Shell系統功能,應怎樣做呢?可以使用“Install-Windows Feature”命令。例如想在我的本地伺服器上安裝SNMP服務,我可以使用“Install-Windows Feature”命令並且加上名字參數。如圖5表示Windows Power Shell功能服務已安裝完成。
圖4. SNMP服務功能已安裝完成
可以使用“Remove-Windows Feature”命令來刪除某些Windows Power Shell系統功能。刪除Windows Power Shell系統功能就像安裝Windows Power Shell某個功能一樣容易,即加上命令的Name參數就行。
圖5. 使用“Remove-Windows Feature”命令刪除Windows Power Shell系統下的某個功能
在圖形化界面操作時需注意必須重啟Windows Power Shell伺服器才能完成刪除某個系統功能。如果使用Windows Power Shell命令腳本的方式,可以不通過手動操作完成。“Install-Windows Feature”和“Remove-W?indows Feature”命令都有“remove”參數。如果有必要,Windows Power Shell可以執行完命令後自動重啟伺服器。
如果只有一台單獨的Windows Power Shell伺服器,本地化操作沒有問題,但是可以通過使用Windows Power Shell服務管理器以相似的方式對多台Windows Power Shell伺服器進行操作管理。使用Windows Power Shell遠程管理功能,管理員可以使用“Computername”參數指定對遠程任一個伺服器進行操作,如圖6:
圖6. 使用ComputerName參數用於指定執行任務的遠程伺服器
如果想同時在100台Windows Power Shell伺服器上安裝一個Windows Power Shell系統功能應該怎樣操作呢?如果把伺服器信息寫入一個文本檔案中後,這就不是問題。如果在服務端有一個包含了Windows Power Shell伺服器名字CSV檔案,可以使用Windows Power Shell import命令來讀取csv檔案內容並且可以並發執行任何對Windows Power Shell系統功能的操作命令。
以上的命令可以從CSV檔案中讀取每個Windows Power Shell伺服器名並且同時在每台伺服器安裝上SNMP服務。
使用Windows Power Shell控制IT許可權
在Windows Power Shell受攻擊面方面,IT安全專家經常談論的話題是Windows Power Shell伺服器和應用程式。儘管Windows Power Shell的大部分安全工作都是為了強化作業系統和應用程式以減少可能的受攻擊面,但是有可能IT員工自己本身會成為受攻擊面。
很多Windows Power Shell網路攻擊利用了惡意軟體來獲取受害者系統的訪問許可權。像很多其他的軟體一樣,Windows Power Shell惡意軟體也會受限於當前的安全環境。比如說,一個擁用基本Windows Power Shell用戶許可權的用戶不小心運行了一個惡意軟體會比一個管理員運行這個惡意軟體帶來的損壞小得多。
IT專家長期接受移除管理員Windows Power Shell許可權來提高安全性的方法,但是剝奪所有IT員工的管理員Windows Power Shell許可權並不是一個實用的方法。IT員工一定要有相應必需的Windows Power Shell許可權來執行他們的工作。
這就是需要用到Just Enough Administration的地方了。Just Enough Administration( JEA) 是一個Windows Power Shell工具包來幫助企業組織限制管理員許可權,以提供自身Windows Power Shell整體安全性。
JEA是一種基於角色的訪問控制形式。主要的方法是精確地授予IT員工他們工作必需的Windows Power Shell許可權,不多也不少。即使如此,JEA也和傳統的基於Windows Power Shell身份的訪問控制不一樣,傳統的訪問控制是基於一份詳盡的許可權集合夊?!—!。而相比之下,JEA是基於限制某個用戶能運行的Windows Power Shell然後限制用戶以管理員的身份連線目標伺服器。
這就引出了一個Windows Power Shell問題,即一個標準用戶如何在沒有Windows Power Shell許可權的情況下去執行Windows Power Shell任務呢?理解它工作原理的關鍵在於,要意識到用戶從來不會直接登入伺服器控制台。用戶會登錄進一個標準的工作站,然後使用JEA PowerShell工具包與被管理的Windows Power Shell伺服器建立遠程會話。用戶登入的時候會使用自己被限制的Windows Power Shell賬號密碼,但操作的時候會利用Run As賬戶來執行任何需要Windows Power Shell更高許可權的操作。
從表面上看,如果使用Run As賬戶這種方式並不會比直接給用戶賬號授予Windows Power Shell許可權更好。但是這兩種賬號之間有非常重要的區別:一個被賦予Windows Power Shell許可權的用戶賬號基本上算是一個域管理員。使用JEA 的Run As賬戶是被管理伺服器本地的。這個賬戶不會有域管理許可權,這也意味著這個用戶不能通過網路進行Windows Power Shell管理員授權的傳遞。
Just Enough Administration PowerShell工具包不僅僅依賴對用戶賬號的創新使用來提高安全性,它同時也限制了用戶允許執行的Windows Power Shell。這可以保證用戶可以運行他工作需要的cmdlets,但是不會有額外的cmdlets。
Just Enough Administration包含了創建一個到被Windows Power Shell管理伺服器的遠程會話。Windows Power Shell遠程會話可以通過會話配置檔案或者腳本來進行限制。Just Enough Administration工具包運行允許這些限制以簡單的文本檔案來配置,這可以控制Windows Power Shell用戶被授權運行哪些PowerShell cmdlets。Just Enough Administration工具包同時也可以被設定執行審計的功能。那樣的話,如果一個Windows Power Shell用戶嘗試非授權的行為,這個行為會被阻止並且記錄下來以待查看。
Just Enough Administration工具包可以很大程度上地提供企業內部的安全性,Windows Power Shell用戶只能執行某些設定好的管理員任務。使用這個工具集的最大缺點是它是面向Windows Power Shell的。Windows Power Shell可以作為一款管理工具來使用,但是使用它需要用戶進行一定時間的學習。
Windows Power Shell期望狀態配置
Windows Power Shell期望狀態配置(DSC)是2013年下半年發布的Windows 8.1和Windows Server 2012 R2最終版本中默認自帶的一個功能。Windows Power Shell是一個基於標準Web服務的配置管理系統,Windows Power Shell允許你按照自己的方式對機器進行配置,介紹什麼是Windows Power Shell DSC,並將展示它是如何工作的,以及Windows Power Shell可以完成怎樣的任務,達到怎樣的目標。 許多管理員第一次聽說Windows Power Shell工具時就想了解關於Windows Power Shell的一些背景和問題:在試驗或真實系統管理解決方案如System Center或者其他第三方工具上使用Windows Power Shell期望狀態配置的意義是什麼?其有很多優勢,但是其中有三點是最為突出的。 Windows Power Shell期望狀態配置內置於Windows Server,所以Windows Power Shell沒有購買許可和系統管理、配置部署軟體管理實例的額外開支。 Windows Power Shell期望狀態配置幾乎不需要代理,需求只是安裝好Windows Power Shell,並且可以通過80或者443連線埠查詢Web伺服器來抓取配置信息,這裡不需要額外的配置系統管理開銷。 Windows Power Shell期望狀態配置看起來只是配置檔案定義的功能。Windows Power Shell忽略其他設定,使配置負載更加輕巧和加速其他部署,這樣Windows Power Shell就可以定義多個配置和堆疊工作負載(一台Web伺服器也充當檔案伺服器,並且Windows Power Shell可以獲取沒有檔案伺服器設定覆蓋的Web伺服器的設定),這類部署是許多系統管理套件無法很容易地應付,甚至完全不能處理。
Windows Power Shell的Push模式和Pull模式
Windows Power Shell DSC的基本原則是使用定義所需配置的兩種模式,這樣管理員既可以自定義地有間隔地使機器從中央存儲庫獲取正確配置信息,也可以將這類Windows Power Shell信息推送回去。 Windows Power Shell的Push模式是一個主動的配置模式運行方式,當你發出的Windows Power Shell命令並且鍵入的命令帶有“-Path”的屬性時,Windows Power Shell就會立即觸發存在任何位置的基於檔案存儲的系統配置推送出去。這幾乎是一種即時執行“現在就做”的方式來管理你放在中央存儲位置的所有配置檔案目標和需求,這些檔案可以讓你計畫的目標機器去訪問。這個需要你設定經常去觸發Windows Power Shell推動,並且默認配置不會自己檢測。 Windows Power Shell的Pull模式有一點點被動;Windows Power Shell需要一台伺服器同時為配置檔案和其它為計算機各方面配置充當中介角色的構件提供清算服務。舉個例子,在你編寫一個自定義服務提供程式——可以提供使用Windows Power Shell DSC的一段代碼——Windows Power Shell可以轉換本地自定義業務應用程式的配置檔案中的指令。Windows Power Shell的Pull伺服器只是一台運行IIS的伺服器,而IIS可以發布OData。OData是一種典型、明確定義以及標準支持的界面,通過這個界面Windows Power Shell的Web 伺服器可以獲取到真正的配置數據。因此,Pull模式是實施Windows Power Shell DSC最常用的方式,也可以用來部署當配置遠離期望狀態並且逾時的情況。Windows Power Shell DSC定期運行,下發正確的配置,執行靜默的進程來更改配置為期望狀態。 以上的Windows Power Shell配置定義都集成在管理對象檔案或者MOF 檔案,基本上都是一些文本檔案,像一系列的classes,或者是一些Windows Power Shell 配置引擎可以讀懂的與Windows作業系統有關的一些元素,抑或是一些可以定義期望配置的classes參數。 Windows Power Shell的MOF檔案通常是手動建立一次,然後根據需求進行複製和貼上。Windows Power Shell對於檢測這個配置涉及的安裝、移除或者確保某些Windows角色和功能是否已經存在,你可以使用內置命令Get-DscResource來檢測。這個Windows Power Shell命令會根據你所以給出的角色或者功能名稱,抓取出它們的正確使用語法和其他可用選項。 這些都是Windows Power Shell期望狀態配置的基本要素。
Windows Power Shell控制NTFS許可權
儘管Windows Power Shell包含一系列本地用來配置存儲的cmdlet,但配置NTFS許可權的能力明顯有限。幸運的是,微軟提供了一種利用Windows Power Shell來檢索和配置NTFS許可權的方法,但是你需要提前下載並安裝一個Windows Power Shell專用模組。 所需的模組是檔案系統安全Windows Power Shell模組。將檔案複製到Windows Power Shell模組資料夾中的NTFSSecurity資料夾下。默認情況下,Windows Power Shell模組資料夾路徑 將Windows Power Shell模組複製到相應的資料夾後,可以通過使用下面的Windows Power Shell命令來驗證模組的可用性 假設NTFS模組出現在列表里, 記住,除非你已經利用Set-ExecutionPolicy cmdlet更改了伺服器的執行策略,否則上面這條Windows Power Shell命令將生成一個錯誤訊息,告訴你系統上的Windows Power Shell腳本是禁止運行的。 輸入執行策略後,你就擁有NTFS許可權了。 然而,每次需要使用許可權的時候都必須輸入NTFSSecurity模組。 假設我在伺服器上創建了資料夾C:\Data 。接著,假如想查看這個Windows Power Shell資料夾的訪問控制列表條目, 上面命令列出每個訪問資料夾的賬戶/安全組、訪問許可權、套用許可權、許可權類型以及IsInherited和InheritedFrom標誌(見圖1)。
圖1. 通過Windows Power Shell查看NTFS許可權
授予Windows Power Shell資料夾訪問許可權與查看現有許可權一樣簡單。你需要使用Add-NTFSAccess cmdlet。另外還需要指定路徑、賬戶和訪問許可權。這裡使用例子說明。假設“Everyone”都能安全訪問到C:\Data資料夾。 現在,我已經添加了Windows Power Shell許可權,讓每個人都能訪問C:\Data,並且利用Get-NTFSAccess cmdlet驗證許可權(圖2)。
圖2. Windows Power Shell任何人可訪問
即使能夠將Windows Power Shell許可權授權給所有人,通常來說必須確認Windows Power Shell賬戶位置(圖2)。例如,一些已有的許可權位置為BUILTIN或NT AUTHORITY。在實際操作中,通常會指定一個Windows Power Shell連帶用戶組名或用戶名的域名。例如,如果你想授權訪問Contoso域中的Finance組,那么賬戶名為Contoso\Finance。 Windows Power Shell刪除NTFS許可權有點棘手。接著上面的例子,你必須確認Windows Power Shell路徑、賬戶名稱以及打算刪除的Windows Power Shell許可權。 該Windows Power Shell命令有點棘手的原因在於,你無法刪除Windows Power Shell繼承許可權。而且,刪除的Windows Power Shell許可權必須與目前分配給該帳戶的Windows Power Shell許可權準確匹配。如果匹配失誤,則命令無效。 因為有時難以完全精準匹配許可權,所以使用幾個命令一起刪除許可權會更加方便。假如你想刪除C:\Data資料夾Everyone的所有許可權,不必手工匹配許可權,你可以使用Windows Power Shell讀取該許可權然後進行刪除該。 如果你想從整個Windows Power Shell資料夾樹中刪除許可權,可以遞歸使用該命令(圖3)。