天天看點

<Power Shell>02 認識powershell

言歸正傳,謝謝大家今天陪Cantgis 一起學習powershell的基礎知識。

不要着急操作,首先Cantgis先簡單的剖析一下powershell的功能,命名規則等,之前我們講過powershell學習和使用是非常的簡單。

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

多大130個指令行在執行常見的系統管理任務工具,包括管理服務管理流程 管理事件日志 管理證書,修改系統資料庫,還有使用WMI(windows management instrumentation)

powershell支援現有的語言腳本,用于現有的指令汗工具,以及多個版本的windows。

管理windows資料以不同的存儲區和格式的标準實用車程式。包括ADSI WMI COM對象、ActiveX資料對象(ADO)、HTML和XML

複雜的表達式分析器和.NET Framework在指令行的對象操

可擴充的接口,能夠以便我們後續來自定義腳本開發Cmdlet

好了看到上面的功能有點展示了,我們開始迫不及待想要學習powershell這麼強的語言

下面我們一起了解一下這個語言指令 和參數模式。

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個别名)

1

2

<code>PS C:\Users\Administrator&gt; (</code><code>Get-Command</code> <code>-CommandType</code> <code>alias</code><code>).count</code>

<code>137</code>

在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,在日常生活中我們用‘&gt;’代替。

下面我們把目前計算機的程序輸出到指定的一個txt檔案,我們輸出後打開這個txt檔案,檢視目前的程序詳細資訊。

<code>PS C:\Users\Administrator&gt; </code><code>Get-Process</code> <code>&gt; D:\getmac.txt</code>

<code>PS C:\Users\Administrator&gt;</code>

<a target="_blank" href="http://blog.51cto.com/attachment/201306/133239886.png"></a>

好了,不會使用powershell不要緊,我們有幫助系統,能夠快速合理的實作powershell操作,兩個幫主:get-command 和get-help

<a target="_blank" href="http://blog.51cto.com/attachment/201306/134316105.png"></a>

使用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 類清單。

3

4

<code>get-wmiobject</code> <code>-list</code>

<code>get-wmiobject</code> <code>-list</code> <code>-computername</code> <code>.</code>

<code>get-wmiobject</code> <code>-list</code> <code>-computername</code> <code>localhost</code>

<code>get-wmiobject</code> <code>-list</code> <code>-computername</code> <code>127.0.0.1</code>

注意 在使用get-wmiobject時候連接配接到遠端計算機 遠端計算機必須運作wmi 并且在預設配置下所使用的賬戶必須是遠端計算機上的本地管理者,在遠端計算機不需要安裝powershell

進而我們可以對未運作powershell但可以使用wmi作業系統進行管理

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

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

5

6

7

8

9

10

11

12

13

14

15

<code>PS C:\Users\Administrator&gt; </code><code>function</code> <code>Get-DayToBeiJingOlympic</code>

<code>&gt;&gt; {</code>

<code>&gt;&gt; (</code><code>[datetime]</code> <code>"2013-06-15"</code> <code>- </code><code>[datetime]</code><code>::Now).Days;</code>

<code>&gt;&gt; }</code>

<code>&gt;&gt;</code>

<code>PS C:\Users\Administrator&gt; </code><code>Get-DayToBeiJingOlympic</code>

<code>0</code>

<code>&gt;&gt; (</code><code>[datetime]</code> <code>"2013-06-14"</code> <code>- </code><code>[datetime]</code><code>::Now).Days;</code>

<code>-1</code>

第一次 我提到  距離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的世界。

     本文轉自cantgis 51CTO部落格,原文連結:http://blog.51cto.com/cantgis/1222518,如需轉載請自行聯系原作者

繼續閱讀