(3)Powershell基礎知識(一)

上節介紹了Windows自帶的Powershell開發工具:命令行行窗體和集成開發環境ISE的啓動及一些配置注意事項,具體細節使勁戳Powershell開發工具程序員


這一節介紹Powershell的基礎知識,包含如下知識點shell

  1. Powershell的一些特性編程

  2. 理解Powershell中的一些重要概念bash

  3. 理解Powershell中命令的命名規範網絡

  4. 總結
    編程語言


Powershell的一些特性ide

Powershell對命令行和腳本環境添加了許多新的功能,以此來改善Powershell的管理和腳本腳本交互能力,想對於其餘的命令腳本,Powershell有如下特性。
函數

  • 可發現特性工具

    可發現特性是指,Powershell能夠輕鬆發現(找出)與執行具體操做有關的命令。好比如今想對Window服務,即對service進行操做(中止或是啓動服務等其它操做),能夠經過如下命令來查找與操做service有關的命令。    學習

PS C:\Documents and Settings\Administrator> Get-Command *service

CommandType     Name                                                Definition
-----------     ----                                                ----------
Cmdlet          Get-Service                                         Get-Service [[-Name] <String[]>] [-ComputerName ...
Cmdlet          New-Service                                         New-Service [-Name] <String> [-BinaryPathName] <...
Cmdlet          Restart-Service                                     Restart-Service [-Name] <String[]> [-Force] [-Pa...
Cmdlet          Resume-Service                                      Resume-Service [-Name] <String[]> [-PassThru] [-...
Cmdlet          Set-Service                                         Set-Service [-Name] <String> [-ComputerName <Str...
Cmdlet          Start-Service                                       Start-Service [-Name] <String[]> [-PassThru] [-I...
Cmdlet          Stop-Service                                        Stop-Service [-Name] <String[]> [-Force] [-PassT...
Cmdlet          Suspend-Service                                     Suspend-Service [-Name] <String[]> [-PassThru] [...

    從輸出結果中,能夠看到能夠獲取指定的service,新建新的service,重啓,設置service的一些狀態,啓動,中止等操做。注意在Definition列,內容並無徹底顯示,能夠後面會講到如何調節其輸出格式。

    經過Powershell的發現特性,找到具體的命令以後,就能夠經過Get-Help cmdlet 瞭解有關該mdlet 的詳細信息。例如,要顯示有關 Get-Service cmdlet 的幫助,在命令行輸入如下命令。

Get-Help Get-Service

    若是要查看該輸出結果的成員信息,好比該輸出結果有哪些成員,方法,返回類型等,能夠經過管道運算符(|)將其執行結果傳遞給Get-Member,如輸入如下命令能夠查看Get-Service輸出對象的成員信息(如下是部分輸出信息)。

PS C:\Documents and Settings\Administrator> Get-Service | Get-Member


   TypeName: System.ServiceProcess.ServiceController

Name                      MemberType    Definition
----                      ----------    ----------
Name                      AliasProperty Name = ServiceName
RequiredServices          AliasProperty RequiredServices = ServicesDependedOn
Disposed                  Event         System.EventHandler Disposed(System.Object, System.EventArgs)
Close                     Method        System.Void Close()
Continue                  Method        System.Void Continue()
CreateObjRef              Method        System.Runtime.Remoting.ObjRef CreateObjRef(type requestedType)

其中MemberType列是成員信息的屬性,是屬性,事件,仍是方法等。

  • 一致性

    一致性是Powershell主要優勢之一,同一的接口下降了管理任務的複雜性。例如若是你學會了獲取Get-Servce的幫助信息,那麼就學會了查看全部命令的幫助信息。

  • 交互式腳本環境

    PowerShell 將交互式環境和腳本環境組合在一塊兒,從而容許訪問命令行工具和 COM 對象,同時還可利用 .NET Framework 類庫 (FCL) 的強大功能(能夠加載調用cmd,exe,dll外部,在企業級實戰部分會介紹到)。Powershell對命令提示符進行了改進,提供了帶有多種命令的交互式環境。PowerShell 擴展了交互用戶和腳本編寫者的能力,從而更易於進行相關做業腳本的開發,系統管理。

  • 面向對象

    雖然能夠經過以文本方式鍵入命令與 PowerShell 進行交互,但 Windows PowerShell是基於對象的,而不是基於文本的。意味着Powershell命令的輸出即爲對象。能夠將輸出對象發送給另外一條命令以做爲其輸入(經過管道運算符"|")。所以,Windows PowerShell 爲曾使用過其餘 shell的人員提供了熟悉的界面,同時引入了新的、功能強大的命令行範例。經過容許發送對象(而不是文本),它擴展了在命令之間發送數據的概念。

  • 右命令行很容易過分到腳本

    使用 Windows PowerShell,能夠很方便地從以交互方式鍵入命令過渡到建立和運行腳本。能夠在 Windows PowerShell命令提示符下鍵入命令以找到可執行任務的命令。隨後,可將這些命令保存到腳本或歷史記錄中,而後將其複製到文件中以用做腳本。


理解Powershell中的一些重要概念

在開始Powershell的實際開發以前,理解如下概念很是有助於瞭解Powershell設計思想。

  • 命令不是基於文本的,是基於.Net對象的

    與傳統的命令(如perl,bat,cmd,bash等)不一樣,Powershell可處理對象(結構化的信息),而不僅是顯示在屏幕上的字符串,命令輸出始終提供可能會須要的額外信息,經過標準的Powershell對象操做命令,便可操做命令返回數據的任何部分。

  • 命令系列是可擴展的


    許多接口(例如 Cmd.exe)均不能提供直接擴展內置命令集的方法。能夠建立在 Cmd.exe 中運行的外部命令行工具,但這些外部工具不能提供服務(例如幫助集成),並且 Cmd.exe 不能自動識別它們是不是有效的命令。

    PowerShell 中的本機二進制命令cmdlet能夠經過建立並使用管理單元添加到 Windows PowerShell 中的 cmdlet 進行補充。與任何其餘接口中的二進制工具相同,Windows PowerShell 管理單元已通過編譯。可使用它們將 Windows PowerShell 提供程序以及新的 cmdlet 添加到 shell 中。最重要的是,Powershell可以識別這些新添加的命令是不是有效的命令。


    除此以外,Powershell還能夠調用外部的.ps1腳本文件,也能夠在腳本中建立本身的函數。

  • Windows Powershell處理控制檯輸入和顯示

    輸入命令時,PowerShell 始終會直接處理命令行輸入。PowerShell 還能夠設置屏幕上顯示的輸出格式。這個功能十分重要,由於它能夠減小處理每一個命令所需的工做,並確保在使用任何一種 cmdlet 時都能始終以相同方式進行操做。這樣能夠簡化腳本工具開發人員和使用者的工做。

    舉個例子,對於請求和顯示幫助,傳統的命令行工具都有它們本身的方案。一些命令行工具使用 /? 來觸發幫助顯示,而其餘一些命令行工具則使用 -?/H 甚至 //。其中一些工具會在 GUI 窗口中顯示幫助,而不以控制檯顯示。某些複雜工具(例如應用程序更新程序)會先將內部文件解包,而後才顯示其幫助。若是使用的參數不正確,則該工具可能會忽略鍵入的內容,並自動開始執行任務。
    但在 PowerShell 中輸入命令時,它會自動分析並預處理所輸入的所有內容。若是在 PowerShell cmdlet 中使用 -? 參數,則始終表示「顯示此命令的幫助」。腳本命令開發人員無需分析該命令,他們只需提供幫助文本。即便是在 PowerShell 中運行傳統命令行工具,也可使用 PowerShell 的幫助功能。PowerShell 將對參數進行處理並將結果傳遞給外部工具。

  • Windows Powershell使用某些C#語法

    因爲 PowerShell 基於 .NET Framework,所以 PowerShell 的語法功能和關鍵字與 C# 編程語言中所使用的語法功能和關鍵字十分相似。換句話說,學習C#和Powershell是相互促進的,若是您不是 C# 程序員或是徹底不瞭解C#,也沒有關係,瞭解任何一門面對對象的編程語言都有助於學習Powershell。若是已經熟悉 C#,則這些類似性能夠幫助你更輕鬆地瞭解PowerShell。


理解Powershell中命令的命名規範

    使用大多數命令行界面時,一般會遇到如下問題。

  • 瞭解命令名稱及命令參數須要花費大量的時間。

    使用新命令或參數時,一般沒法使用已知的名稱,而必須查找和了解新的名稱。考慮到界面是如何從一個小工具集通過不斷添加的新增功能發展而來,就很容易瞭解爲什麼其結構會是非標準的。尤爲是使用命令名稱時,這一點多是必然的,由於每種命令都是單獨的工具。

  • 命令沒有統一的模式,所以只能經過記住經常使用的每種命令和每一個參數來了解這些命令行界面。

    大多數命令都是爲管理操做系統或應用程序的元素(如服務或進程)構建的。這些命令有不一樣的名稱,它們可能屬於或不屬於一個系列。例如,在 Windows 系統上可使用 net startnet stop 命令來啓動和中止服務。另外還有一個名爲 sc 的更通用的 Windows 服務控制工具,這一徹底不一樣的名稱與 net 服務命令的命名模式不一致。對於進程管理,Windows 使用 tasklist 命令來列出進程,並使用 taskkill 命令來終止進程。

    可是不能使用 net start 命令來啓動遠程計算機上的服務sc 命令能夠啓動遠程計算機上的服務,可是,若要操做遠程計算機上的服務,必須在其名稱前添加雙反斜槓做爲前綴。例如,若要在名爲 PC01 的遠程計算機上啓動後臺打印程序服務,您能夠鍵入 sc \\PC01 start spooler。若要列出在 PC01 上運行的任務,須要使用 /S(表明「system」)參數,並提供以下所示的不帶反斜槓的名稱 PC01:tasklist /S PC01
    儘管服務與進程之間有很大的技術差異,但它們都是計算機上具備定義完整的生命週期的可管理元素示例。可能須要啓動或中止服務或進程,或得到全部當前正在運行的服務或進程的列表。換而言之,儘管服務和進程並不相同,但從概念上來看,對服務或進程執行的操做一般是相同的。PowerShell 經過統一的模式(相似的命令)來減小要了解和使用 cmdlet 所需知道的不一樣名稱數。

Powershell命令集cmdlet經過使用"動詞-名詞"名稱以減小命令記憶量。

    PowerShell 使用"動詞-名詞"命名系統,其中的每一個 cmdlet 名稱均由標準動詞、連字符和特定名詞組成。PowerShell 動詞並不是必定爲英語動詞,但其表示 Windows PowerShell 中的特定操做。名詞與全部語言中的名詞十分相似,名詞所受的限制較少,但它們應始終描述命令的操做對象。

    舉幾個動詞和名詞的示例,來講明他們是如何減小您瞭解命令所需的記憶量。PowerShell 具備 Get-ProcessStop-ProcessGet-ServiceStop-Service 等命令。

若是僅有兩個名詞和兩個動詞,則一致性並不會極大地簡化您瞭解這些命令的過程。可是,假定是由 10 個動詞和 10 個名詞組成的一組標準命令名稱,則您只需記住 20 個單詞,而使用這些單詞能夠構成 100 個不一樣的命令名稱。

    一般,只需經過命令的名稱便可識別其用途,而對新命令應使用什麼樣的名稱,這一般也是顯而易見的。例如,計算機關閉命令可能爲 Stop-Computer。用於列出網絡上的全部計算機的命令可能爲 Get-Computer。用於獲取系統日期的命令爲 Get-Date

Get-Command 中使用 -Verb 參數能夠列出全部包含特定動詞的命令(在後面的文章中會詳細介紹 Get-Command)。例如,若要查看全部使用動詞 Get 的 cmdlet,輸入:

PS C:\Documents and Settings\Administrator> Get-Command -Verb Get

CommandType     Name                                                Definition
-----------     ----                                                ----------
Cmdlet          Get-Acl                                             Get-Acl [[-Path] <String[]>] [-Audit] [-Filter <...
Cmdlet          Get-Alias                                           Get-Alias [[-Name] <String[]>] [-Exclude <String...
Cmdlet          Get-AuthenticodeSignature                           Get-AuthenticodeSignature [-FilePath] <String[]>...
Cmdlet          Get-ChildItem                                       Get-ChildItem [[-Path] <String[]>] [[-Filter] <S...
Cmdlet          Get-Command                                         Get-Command [[-ArgumentList] <Object[]>] [-Verb ...
Cmdlet          Get-ComputerRestorePoint                            Get-ComputerRestorePoint [[-RestorePoint] <Int32...
Cmdlet          Get-Content                                         Get-Content [-Path] <String[]> [-ReadCount <Int6...
...

-Noun 參數用處更大,由於使用該參數能夠查看影響同一對象類型的全部命令。例如,若要顯示可用於管理服務的命令,請輸入如下命令

PS C:\Documents and Settings\Administrator> Get-Command -Noun Service

CommandType     Name                                                Definition
-----------     ----                                                ----------
Cmdlet          Get-Service                                         Get-Service [[-Name] <String[]>] [-ComputerName ...
Cmdlet          New-Service                                         New-Service [-Name] <String> [-BinaryPathName] <...
Cmdlet          Restart-Service                                     Restart-Service [-Name] <String[]> [-Force] [-Pa...
Cmdlet          Resume-Service                                      Resume-Service [-Name] <String[]> [-PassThru] [-...
Cmdlet          Set-Service                                         Set-Service [-Name] <String> [-ComputerName <Str...
Cmdlet          Start-Service                                       Start-Service [-Name] <String[]> [-PassThru] [-I...
Cmdlet          Stop-Service                                        Stop-Service [-Name] <String[]> [-Force] [-PassT...
Cmdlet          Suspend-Service                                     Suspend-Service [-Name] <String[]> [-PassThru] [...

總結

經過學習本節內容,應當掌握如下內容

  1. Powershell中的可發現,一致性,面向對象等特性

  2. Powershell是基於.Net對象,而不是基於文本的。

  3. Powershell中"動詞-名詞"的命名規範。

相關文章
相關標籤/搜索