02 認識powershell

言歸正傳,謝謝你們今天陪Cantgis 一塊兒學習powershell的基礎知識。shell

不要着急操做,首先Cantgis先簡單的剖析一下powershell的功能,命名規則等,以前咱們講過powershell學習和使用是很是的簡單。windows

下面咱們開始挑重點要點 簡明扼要的講什麼是powershell。網絡

  • 多大130個命令行在執行常見的系統管理任務工具,包括管理服務管理流程 管理事件日誌 管理證書,修改註冊表,還有使用WMI(windows management instrumentation)ide

  • powershell支持現有的語言腳本,用於現有的命令汗工具,以及多個版本的windows。函數

  • 管理windows數據以不一樣的存儲區和格式的標準實用車程序。包括ADSI WMI COM對象、ActiveX數據對象(ADO)、HTML和XML工具

  • 複雜的表達式分析器和.NET Framework在命令行的對象操性能

  • 可擴展的接口,可以以便咱們後續來自定義腳本開發Cmdlet學習

好了看到上面的功能有點展現了,咱們開始火燒眉毛想要學習powershell這麼強的語言spa

下面咱們一塊兒瞭解一下這個語言命令 和參數模式。操作系統

windows powershell採用咱們以前講到的內置cmdlet命令,也就是cmd.exe。

這個給咱們帶來很是好的消息,若是您是老手確定知道,若是你是開始和我同樣學習,彆着急,接下來咱們開始講一下所謂powershell的命名名稱和特色。

  • powershell實際上採用了「動詞-名詞」的命名系統

動詞並不是必定爲英文單詞哦,,可是他會表示爲powershell中的特定操做。名詞和全部語言名詞十分相似,描述在系統管理界面層起到很是重要做用的對象類型。

如get-process stop-process get-service 和stop-sercice 命令

若是僅僅是兩個名詞和兩個動詞,則並不會簡化了解那麼多命令的過程,可是呢,咱們發現若是是由10個動詞和10哥名詞組成的一組標準命令名稱,則咱們只須要記住20個單詞,而且使用這些單詞能夠構成100哥不一樣命令名稱哦!

你知道的,一般狀況下 經過命令的名稱便可識別其用途,從而對新命令應該使用什麼樣的名稱。

例如計算機關機命令可能爲stop-computer;用於列出網絡上全部計算機的命令可能爲get-computer;用於獲取系統的時間日期咱們很是簡單 鍵入get-date。


全部的cmdlet中包含了一些公共參數(common parameters), 例如: -Verbose, -Debug, -ErrorAction, -ErrorVariable, and -OutVariable. 這些參數大多用於一些腳本調試等.


固然以前一章咱們提到了別名機制,這裏咱們重點講一下(137個別名)

PS C:\Users\Administrator> (Get-Command -CommandType alias).count
137
  • 在powershell中,還容許爲命令建立本身熟悉的別名,這樣對於那些太長的命令使用本身自定義的縮寫來表示,對於某些本身不太容易記憶的命令使用本身喜歡的名字來表示,這一迪昂是否是很是人性化呢。

  • 名別即將所輸入的命令名稱與另外一個名稱相關聯。例如,powershell有一個名爲clear-host的內部函數,用於清理窗口,若是咱們偷懶直接鍵入clear 會出現什麼呢?固然powershell很是聰明他會理解爲這是clear-host的函數別名,從而運行clear-host 函數

  • TAB鍵子的那個匹配活找到下一個匹配文件,補齊功能很是省事,它會自動嘗試補齊剩下的命令字符串。

  • 例如,咱們輸入get-co 而後鍵入【tab】則powershell將會自動擴展爲get-command cmdlet ,若是再次按【tab】powershell講僅有匹配另外一個與get-content替換上一個command。

關於策略執行,powershell在默認狀況下是不容許任何腳本,但不少時候之後咱們會看到不少管理功能都須要使用腳本才能完成。另外使用腳本完成,還能夠減小不少操做中的繁瑣操做。

在powershell中擁有四個執行策略。

  • Restricted 不加載配置文件或者運行腳本。默認值爲restricted,

  • allsigned:要求全部腳本和配置文件有可信任的發佈者簽名,包括在本地計算機編寫的腳本

  • rsmotesigned 要求是從Internet下載全部腳本和配置文件有可信任的發佈者簽名

  • unrestricted 加載全部配置文件並運行全部腳本,若是運行從Internet下載的未簽名腳本,則系統提示用戶要得到相關權限。

修改腳本的執行策略命令爲set-executiopolicy 若是執行策略改成運行受信任的腳本,在運行命令,set-executionpolicy allsigned就能夠

後續咱們會講到腳本,這個powershell的腳本文件擴展名爲.ps1,在命令下鍵入腳本的名稱就能夠運行該腳本。powershell的腳本文件可使用記事本等軟件進行編寫,擴展能力很是強悍

powershell管理,在整個命令行界面是最有價值的概念。若是適當使用管道。不只能夠減小複雜的輸入命令所需的工做量,只須要使用管道運算符「|」將命令鏈接一塊兒,便可獎每個命令的輸出用做下一個命令的鍵入哦!!


下面咱們輸出powershell命令,當作一個小例子。首先我要強調 在powershell中任何運行結果均可以定向輸出指定文件中。

在輸出過程當中使用的命令爲out-file,在平常生活中咱們用‘>’代替。

下面咱們把當前計算機的進程輸出到指定的一個txt文件,咱們輸出後打開這個txt文件,查看當前的進程詳細信息。

PS C:\Users\Administrator> Get-Process > D:\getmac.txt
PS C:\Users\Administrator>


好了,不會使用powershell沒關係,咱們有幫助系統,可以快速合理的實現powershell操做,兩個幫主:get-command 和get-help



使用get-help get-alias       得到幫助關於這個會話命令的

使用get-help get-alias -examples   顯示示例

顯示幫助的主題的列表

get-help about_*


顯示幫助文件,在powershell 中執行

get-help get-host

顯示幫助系統中(get-help)全部幫主文件列表,鍵入命令

get-help *


顯示完整的幫助信息

get-help get-host -full



get-command  檢索全部命令名稱


顯示WMI 類列表。

get-wmiobject -list
get-wmiobject -list -computername .
get-wmiobject -list -computername localhost
get-wmiobject -list -computername 127.0.0.1


注意 在使用get-wmiobject時候鏈接到遠程計算機 遠程計算機必須運行wmi 而且在默認配置下所使用的帳戶必須是遠程計算機上的本地管理員,在遠程計算機不須要安裝powershell

從而咱們能夠對未運行powershell但可使用wmi操做系統進行管理



函數(function)有名稱的代碼塊(scriptblock).

下面我寫一個簡單的函數定義,函數就是一段你輸入到PowerShell的命令集合

PS C:\Users\Administrator> function Get-DayToBeiJingOlympic
>> {
>> ([datetime] "2013-06-15" - [datetime]::Now).Days;
>> }
>>
PS C:\Users\Administrator> Get-DayToBeiJingOlympic
0
PS C:\Users\Administrator> function Get-DayToBeiJingOlympic
>> {
>> ([datetime] "2013-06-14" - [datetime]::Now).Days;
>> }
>>
PS C:\Users\Administrator> Get-DayToBeiJingOlympic
-1
PS C:\Users\Administrator>

第一次 我提到  距離2013年6月15日 有多少天 0天
第二次我提到距離2013年6月14日有-1天


腳本(script)

PowerShell在交互式Shell(interactive Shell)和腳本語言(script Language)之間進行了平衡, 提供了執行腳本的能力. 腳本相似於函數, 存放在文件中, 調用時由PowerShell載入內存, 編譯並執行.

效率上來說, 腳本慢於函數(function), 主要緣由在於函數只會在第一次調用時被編譯, 而腳本每次調用都會被編譯一次. 可是編譯後的執行階段, 他們的性能是近似相等的.


有一些命令應該禁止在powershell中使用如: dir, findstr, del, ping. 這些命令就是Windows以前的可執行文件(非.Net命令行可執行文件). 在PowerShell中調用這些命令效率是最低的, 由於執行他們PowerShell須要建立一個新進程. 此外由於這些命令早於PowerShell, 所以他們的信息輸出都是基於文本的(也能夠說是字符串), 所以喪失了PowerShell對對象的處理能力。

今天我就到這了,謝謝你們耐心看完Cantgis,相信你已經理解了什麼是powershell 他的工做機制是什麼了,接下來咱們會更深刻的瞭解powershell的世界。

相關文章
相關標籤/搜索