Windows Power Shell

來源:互聯網
上載者:User

http://baike.baidu.com/view/2838635.htm?fromId=58531

Windows Power Shell求助編輯百科名片  

Windows Power Shell

Windows PowerShell 是一種命令列外殼程式和指令碼環境,使命令列使用者和指令碼編寫者可以利用
.NET Framework 的強大功能。它引入了許多非常有用的新概念,從而進一步擴充了您在 Windows 命令提示字元和 Windows Script Host 環境中獲得的知識和建立的指令碼。

目錄

Windows PowerShell 簡介
PowerShell指令碼十個基本概念
PowerShell v3概述
PowerShell v3優缺點
展開
Windows PowerShell 簡介
PowerShell指令碼十個基本概念
PowerShell v3概述
PowerShell v3優缺點
展開
編輯本段Windows
PowerShell 簡介 目標受眾Windows PowerShell 入門主要面向之前沒有 Windows PowerShell 背景知識的 IT 專業人員、程式員和進階使用者。雖然具備指令碼和 WMI 方面的背景知識會有所協助,但是理解本文檔並不假定或要求您具備此方面知識。 關於 Windows PowerShell通過解決長期存在的問題並添加一些新的功能,Windows PowerShell 旨在改進命令列和指令碼環境。PowerShell以.NET
Framework為平台,接收和返回.NET對象,此舉為管理和配置微軟系統帶來了新的方法和工具。 可發現特性您可輕易發現 Windows Powershell 的功能。例如,若要尋找用於查看和更改Windows 服務的cmdlet 列表,執行:開始->運行->cmd,在命令列下輸入 PowerShell
進入 windows PowerShell,再輸入如下命令:get-command *-service在發現可完成任務的 cmdlet 之後,可以使用 Get-Help cmdlet 瞭解有關該 cmdlet 的詳細資料。例如,若要顯示有關 Get-Service cmdlet 的協助,請鍵入:get-help get-service若要充分理解該 cmdlet 的輸出,則可通過管道將其輸出傳遞給 Get-Member cmdlet。例如,以下命令將通過 Get-Service cmdlet 顯示有關該對象輸出的成員的資訊。get-service | get-member 一致性管理系統可能是一項複雜的任務,而具有統一介面的工具將有助於控制其固有的複雜性。然而,無論是命令列工具還是可編寫指令碼的 COM 物件,在一致性方面都乏善可陳。Windows PowerShell 的一致性是其主要優點中的一項。例如,如果您學會了如何使用 Sort-Object cmdlet,則可利用這一知識對任何 cmdlet 的輸出進行排序。而無需瞭解每個 cmdlet 的不同的排序常式。此外,cmdlet 開發人員也不必為其 cmdlet 設計排序功能。Windows PowerShell 為他們提供了架構,而該架構可提供基本的功能,並強制他們在介面的許多方面保持一致。該架構雖然消除了通常會留給開發人員的某些選項,但作為回報,開發強健、便於使用的 cmdlet 的工作將更加簡單。 互動式指令碼環境Windows PowerShell 將互動式環境和指令碼環境組合在一起,從而允許您訪問命令列工具和 COM 物件,同時還可利用 .NET Framework 類庫 (FCL) 的強大功能。此環境對 Windows 命令提示字元進行了改進,後者提供了帶有多種命令列工具的互動式環境。此外,還對 Windows Script Host (WSH) 指令碼進行了改進,後者允許您使用多種命令列工具和
COM 自動對象,但未提供互動式環境。通過將對所有這些功能的訪問組合在一起,Windows PowerShell 擴充了互動使用者和指令碼編寫者的能力,從而更易於進行系統管理。物件導向儘管您可以通過以文本方式鍵入命令與 Windows PowerShell 進行互動,但 Windows PowerShell 是基於對象的,而不是基於文本的。命令的輸出即為對象。可以將輸出對象發送給另一條命令以作為其輸入。因此,Windows
PowerShell 為曾使用過其他外殼程式的人員提供了熟悉的介面,同時引入了新的、功能強大的命令列範例。通過允許發送對象(而不是文本),它擴充了在命令之間發送資料的概念。 易於過渡到指令碼使用 Windows PowerShell,您可以很方便地從以互動方式鍵入命令過渡到建立和運行指令碼。您可以在 Windows PowerShell 命令提示字元下鍵入命令以找到可執行任務的命令。隨後,可將這些命令儲存到指令碼或記錄中,然後將其複製到檔案中以用作指令碼。識別你即將使用的Provider 通過識別PowerShell裡安裝的Provider,你就可以瞭解預設安裝下PowerShell提供了那些能力。 Provider可以使用一種簡單的訪問方式,暴露位於不同儲存位置的資料。就像是瀏覽不同磁碟上的目錄結構一樣簡單。
Provider把不同的資訊存放位置,表示成“磁碟機”-目錄這種結構,這樣很容易被使用者所理解。就像我們要訪問一個位於D盤的WIN32目錄下的SETUP.exe檔案,我們要通過瀏覽器,單擊D盤的表徵圖,然後選擇WIN32目錄並雙擊一樣,如果我們要訪問位於“註冊表”的資料,那麼我們也只需要簡單地通過Set-Location命令,來到到“REGISTRY”這個“磁碟機”,然後用GET-CHILDITEM命令擷取其子資料就行了。註:實際上,PowerShell訪問磁碟機,也是通過Provider的,切換磁碟機其實和切換其他資料容器是一樣地操作。 例如: Set-Location d:\ 這是切換磁碟機 Set-Location
HKLM:\ 這是切換到註冊表的HKLM鍵 另外,Get-PSprovider命令,可以查看當前已經安裝的所有PROVIDER。任何熟悉.NET編程的人,都可以編寫Provider。當新的provider被安裝後,就叫做snap-in。snap-in其實是一個動態串連庫dll檔案,可以被安裝到powershell中。然而,當一個snap-in安裝後,卻沒有辦法卸載。
Get-PSProvider: Name Capabilities Drives ---- ------------ ------ Alias ShouldProcess {Alias} Environment ShouldProcess {Env} FileSystem Filter, ShouldProcess {C, D, F, A...} Function ShouldProcess {Function} Registry ShouldProcess {HKLM, HKCU} Variable ShouldProcess
{Variable} Certificate ShouldProcess {cert} 這些就是我機器上的預設安裝後的provider。使用Set-Location和Get-ChildItem瀏覽資料 Set-Location用於改變目前的目錄,以及選擇當前的provider,而Get-ChildItem用於擷取目前的目錄或者指定目錄下的子物件:
例子: set-location hkcu:\software get-childitem 例子2: GCI -path HKLM:\software 有兩種串連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指令碼十個基本概念 1、PS1檔案一個PowerShell指令碼 [1]其實就是一個簡單的文字檔,這個檔案包含了一系列PowerShell命令,每個命令顯示為獨立的一行,對於被視為PowerShell指令碼的文字檔,它的檔案名稱需要使用.PS1擴充。2、執行許可權為防止惡意指令碼的執行,PowerShell有一個執行策略,預設情況下,這個執行策略被設為受限的(Restricted),意味著PowerShell指令碼無法執行,你可以使用下面的cmdlet命令確定當前的執行策略:Get-ExecutionPolicy 你可以選擇使用的執行策略有:Restricted - 指令碼不能運行。 RemoteSigned - 本地建立的指令碼可以運行,但從網上下載的指令碼不能運行(除非它們擁有由信任的發行者簽署的數位簽章)。
AllSigned – 僅當指令碼由信任的發行者簽名才能運行。 Unrestricted – 指令碼執行不受限制,不管來自哪裡,也不管它們是否有簽名。你可以使用下面的cmdlet命令設定PowerShell的執行策略:Set-ExecutionPolicy <policy name>3、運行指令碼如果你想從命令列運行一個可執行檔,多年來一個永恒不變的方法是,在命令列轉到該執行檔案所在的位置,然後鍵入該執行檔案的名稱,但這個古老的方法現在卻不能適用於PowerShell可執行指令碼了。如果你想執行一個PowerShell指令碼,通常必須鍵入完整的路徑和檔案名稱,例如,假設你要運行一個名為a.ps1的指令碼,你可以鍵入:C:\Scripts\aps1 最大的例外是,如果PowerShell指令檔剛好位於你的系統目錄中,那麼你可以直接在命令提示字元後鍵入指令檔名即可運行,如:.\a.ps1 注意前面需要加上.\,這和Linux下執行Shell指令碼的方法如出一轍。4、管道管道的作用是將一個命令的輸出作為另一個命令的輸入,兩個命令(或cmdlet)之間只需要用管道符號(|)串連即可。為了協助你瞭解管道是如何工作的,我們以一個例子進行說明,假設你想建立運行在伺服器上的進程列表,並按進程的ID號進行排序,可以使用Get-Process cmdlet命令獲得進程列表,但預設情況下列表不會排序,如果將這個cmdlet命令的輸出用管道輸送給Sort-Object ID命令,進程列表將會按進程ID號進行排序,如:Get-Process | Sort-Object ID5、變數雖然可以使用管道將一個命令的輸出輸送給另一個命令,但管道本身也是有限制的,當你用管道從一個命令向另一個命令傳遞輸出結果時,輸出結果立即被使用,但有時候,你可能需要儲存輸出結果一段時間,以便以後可以使用(或重用),這個時候管道就應該下場,輪到變數上場了。人們很容易將變數想象成一個倉庫,但在PowerShell中,變數可以儲存命令的完整輸出,例如,假設你想儲存伺服器處於運行中的進程列表,你可以將它賦給一個變數,如:$a = Get-Process 在這裡,變數被命名為$a,如果你想使用這個變數,只需要簡單地調用它的名稱即可,例如,鍵入$a便可在螢幕上列印變數的內容。你可以將多個用管道串連的命令的最終輸出賦給一個變數,只需要用一對小括弧將命令括起來即可,例如,假設你想按進程ID對運行中的進程進行排序,然後將結果輸出給一個變數,你可以使用下面這個命令:$a = (Get-Process | Sort-Object ID)6、@符號通過使用@符號,你可以將列表內容轉換成一個數組,例如,下面的代碼建立了一個名為$Procs的變數,它包含多行常值內容(一個數組):$procs = @{name="explorer","svchost"}使用變數時你也可以使用@符號,為了確保它作為數組而不是單個值處理,例如,下面的代碼將在我前面定義的變數上運行Get-Process
cmdlet命令:Get-Process @procs Windows將顯示Windows資源管理員和Svchost使用的所有進程,注意變數前使用的@符號,而不是常見的$符號。7、SplitSplit操作符根據你指定的字元拆分一個文本字串,例如,假設你想將一個句子拆分成一個單片語成的一個數組,你可以使用下面的命令做到:"This is a test" -split " " 拆分後的結果如下:This is a test8、Join就像Split可以將一個文本字串拆分成多塊一樣,Join的操作則是逆向的,將多個獨立的塊串連成一個整體,例如,下面這行代碼將會建立一個文本字串,由我的名字和姓氏組成:"Brien","Posey" -join " " 命令末尾雙引號之間的空格告訴Windows在兩個文本字串之間插入一個空格。9、斷點運行一個新建立的PowerShell指令碼時,如果指令碼有Bug,會遇到意想不到的後果,保護自己的一個方法是在指令碼的關鍵位置插入斷點,這樣你就可以確保指令碼正常運行先,然後再處理可能存在的問題。插入斷點最簡單的方法是根據行號插入,例如,假設你要在第10行插入一個斷點,可以使用下面的命令:New-PSBreakpoint -Script C:\Scripts\a.ps1 -Line 10 你也可以將斷點綁定到變數上,如果你希望你的指令碼任何時候都可以修改a$的內容,可以使用下面的命令:New-PSBreakpoint -Script C:\scripts\a.ps1 -variables a 注意,我在變數名後並沒有包括貨幣符號。可以和PSBreakpoint一起使用的動詞包括New,Get,Enable,Disable和Remove。10、Step調試一個指令碼時,有時可能需要逐行運行指令碼,這時你可以使用Step-Into
cmdlet命令,它會使指令碼一行一行地執行,不管有沒有設定斷點,如果你想從這種步進式運行模式退出來,使用Step-Out cmdlet命令即可,但需要注意的是,使用Step-Out cmdlet命令後,斷點仍然有效。順便說一句,如果你的指令碼使用了函數,你可能對Step-Out cmdlet更感興趣,Step-Out的工作方式和Step-Into一樣,不過,如果調用了一個函數,Windows不會逐步執行,整個函數將會一次性執行。編輯本段PowerShell
v3概述Windows PowerShell v3將伴隨著Microsoft Hyper-V 3.0和Windows
Server 2012發布。PowerShell v3是一個Windows任務自動化的架構,它由一個命令列shell和內建在這個.NET架構上的程式設計語言組成。PowerShell v3採用新的cmdlet讓管理員能夠更深入到系統進程中,這些進程可以製作成可執行檔檔案或指令碼(script)。一條cmdlet是一條輕量命令,Windows PowerShell已耗用時間在自動化指令碼的環境裡調用它。Cmdlet包括顯示目前的目錄的Get-Location,訪問檔案內容的Get-Content和結束運行進程的Stop-Process。PowerShell v3在Windows Server 8中裝載了Windows Management Framework 3.0。PowerShell已耗用時間也能嵌入到其它應用。編輯本段PowerShell
v3優缺點PowerShell v3優點PowerShell v3將在PowerShell上打造管理的大部分,也提供GUI管理選項以及命令列自動化。v3引入了一些相當重要的新功能。更好的遠端PowerShell遠程已經逐漸成為在網路上進行管理通訊的主要渠道。越來越多的GUI管理主控台將依賴遠程,因此加強PowerShell遠程對微軟很重要。現在能夠斷開遠端工作階段,稍後能從同個或不同的電腦重新串連到相同的會話。用戶端電腦崩潰的話,v3的Community Technical Preview不能斷開會話。相反,會話會永久關閉。所以這與遠端桌面完全不同,遠端桌面會話能在用戶端崩潰時配置並開啟會話。工作流程本質上,PowerShell新的工作流程構建能寫入與功能類似的東西,使用PowerShell翻譯命令和指令碼代碼到Windows工作流程技術WWF進程中。WWF然後能管理整個任務,包括修複網路故障與重啟電腦等。它是編排長期啟動並執行、複雜的、多步驟任務的更有效更可靠的一種方式。如果這個功能與下一個版本的System
Center Orchestrator整合。可更新的協助PowerShell與協助檔案中的錯誤做鬥爭。微軟需要發布一個作業系統補丁。基於TechNet網站的線上協助的存在減輕了這個問題,但杯水車薪。在v3中,協助檔案能按需更新,從任何微軟伺服器都可下載新的XML檔案。所以微軟就能根據找到的問題進行錯誤修複,不需要作業系統包或補丁。預定任務(Scheduled Job)owerShell v2引入了job,遵循的是job隨著時間擴充的理念。在v3中,新型job即scheduled job能被建立並按計劃運行,或者相應某個事件。這與Windows的Task Scheduler的區別只是其中一小點,不過終端使用者能從PowerShell中獲得這個功能。更好的發現關於命令列shell的一個困難部分在於如何使用。PowerShell的協助系統很有用,需要提供使用者想知道的命令的名字,並提供命令所在的外掛程式名字,並記得載入附件到記憶體中。而PowerShell v3在搜尋命令時,包含所有安裝模組的所有命令,shell會運行沒有裝載的命令。這隻能在那些儲存在列於PSModulePath環境變數中的檔案路徑中的模組有用。如果要包含額外路徑,可以在任何時候修改變數。額外功能:CIMPowerShell與Windows管理規範WMI運作很好,WMI是微軟的一項技術,或多或少建立在標準的通用資訊模組CIM上。在PowerShell
v3中,WMI cmdlet發揮餘熱,加入到新的CIM cmdlet集中。功能看起來似乎有重疊:CIM cmdlet使用WS-MAN,這個協議位於PowerShell的Remoting功能,微軟管理功能的新標準的後面。WMI使用被微軟正式棄用的DCOM,意味著不會再開發新功能,但可一直使用。CIM是未來的方向,不僅有對已知WMI的額外開發,而且在未來還可跨平台管理。PowerShell v3缺點新的Hyper-V 3.0 cmdlets不能管理老版本的Hyper-V。這意味著管理員根據Hyper-V的不同必須採用不同的指令碼去管理,直至完成所有宿主機的升級。Hyper-V 3.0和老版本不相容。使用老版本Hyper-V的管理員需要從CodePlex下載PowerShell Library for Hyper-V。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.