本節將要給你們介紹一下PowerShell下的對象,基本格式以及參數。依然屬於PowerShell的基礎。html
PowerShell中的對象shell
在本教程開篇咱們說過,PowerShell是基於面向對象化的,不像傳統的shell那樣基於文本。這其中最主要的緣由就是由於Win平臺在管理操做上主要以面向對象爲主,所以爲了符合系統特色和咱們的操做習慣,PowerShell也繼承了這一特點。所以,不像傳統的shell,在PowerShell中,咱們能夠隨意地與對象進行互動,windows
先來認識一下,什麼是對象——object緩存
不知各位有沒有從事開發的經驗。實際上,面向對象這一律唸的提出就是爲了更好用程序語言解決現實問題而提出的。ide
廢話很少說,直接切入正題。在PowerShell中,「對象」是指咱們收集信息或者執行操做的行爲。包括屬性(信息,咱們能夠收集)和方法(咱們能夠執行)。工具
有一個生動的例子——「燈泡」。對象是顯而易見的,它是一個燈泡。一個燈泡的屬性可能包括了其顏色,功率和類型(熒光燈,白熾燈或鹵素燈)。對於它的操做,或者稱之爲方法,則是咱們能夠執行的行爲,如打開和關閉。這很容易理解!學習
讓咱們看看在PowerShell中一個對象的屬性以及其方法。ui
首先,你可能會常用它"Get-Member」,這個cmdlet是用來檢查一個對象具備哪些屬性和方法的。debug
例如:調試
get-service | get-member
使用這條命令就能夠查看"get-service」t的屬性和方法。在這個例子中,咱們使用管道符來進行命令的傳遞。運行結果以下:
固然,咱們可使用"get-member"的參數來查看"get-service"的全部的屬性類對象,或者方法類對象。
例如:
查看"get-service"的全部屬性類對象
Get-Service | Get-Member -MemberType Property<enter>
查看get-service"的全部方法類對象
Get-Service | Get-Member -MemberType Method<enter>
爲何咱們如此的強調對象?緣由就是在PowerShell中,全部的一切都是對象。
例如:
咱們要找出指定日期寫入d:\的文件有哪些,使用以下命令:
Get-ChildItem -Path d:\ -Recurse | Where-Object {$_.LastWriteTime -gt "01/01/2010"}<enter>
如今來解釋一下:
首先,"get-childitem"是用來枚舉咱們的文件系統的,使用"-path"參數,將路徑指向"d:\",使用"-recurse"參數,意味着將顯示全部的文件,甚至是子目錄下的。接下來,咱們將結果使用管道符傳遞給循環聲明"where-object"中,用來篩選出符合條件的結果。
那麼,"lastwritetime"又是什麼?
咱們使用以下命令看看"get-childitem"都有哪些屬性可供咱們篩選:
get-chileitem | get-member
能夠發現其中一條:
對,就是這個。咱們須要篩選出的對象屬性就是最後寫日期。在後面的定義中能夠看到"LastWriteTime"會將一個"Syetem.DateTime"數據類型做爲反饋。所以,在整個語句的後半部,咱們使用了"-gt"進行進一步的篩選,"-gt"是"greater than"的縮寫,意味「大於」。在之後的教程中我將會介紹更多相似這樣的操做。前面說到,"LastWriteTime"是一個"Syetem.DateTime"類型的數據,所以,咱們最終使用相似"01/01/2010"這樣的表達。這一點須要你們多加註意,在之後的運用中須要注意數據類型。
後續的教程中,我還會盡量全面的介紹WMI、COM以及 .NET,不過,咱們如今知道並掌握上面的就足夠了。
PowerShell的格式
在這一小節,我將介紹PowerShell中的格式化輸出。當咱們使用一個cmdlet時,參數"format-"容許咱們選擇一種習慣的輸出模式。使用如下命令試一試:
Get-Command Format-* <enter>
其結果爲:
好了,這一個知識點很簡單。請各位童鞋使用以下命令試一試,結果怎麼樣看看就知道了。
get-childitem c:\windows | format-table <enter> get-childitem c:\windows | format-table -autosize <enter> get-childitem c:\windows | format-custom <enter> get-childitem c:\windows | format-list <enter> get-childitem c:\windows | format-list -Property FullName <enter> get-childitem c:\windows | format-wide <enter>
固然,複雜些的還有如下這些,我不想解釋過多,你們只要肯親自動手試一試,一眼就能看明白。
Get-ChildItem C:\Windows -Recurse | Format-List -Property FullName,CreationTime,LastWriteTime<enter>Get-ChildItem C: | Format-Wide -Column 3<enter>
另外,在其餘cmdlet中,存在其餘格式的輸出。例如,在"get-process"中就有"group-object","Get-EventLog"中咱們可能用到"Sort-Object",甚至,咱們能夠輸出爲特定格式的文件,例如使用"Convertto-HTML"輸出爲html,使用"Export-CSV"輸出爲表格文件(可使用Excel打開)。
通通舉例以下(記住管道符):
Get-Process | Group-Object Company<enter>Get-EventLog System | Group-Object eventid<enter>Get-EventLog System | Group-Object eventid | Sort-Object Count -descending<enter>Get-Process | ConvertTo-html<enter>Get-Process | ConvertTo-html | out-file 「Processes.html」<enter>Get-Process | Export-CSV Processes.csv<enter>
至於打開文件,使用以下命令便可:
Invoke-Item Processes.html<enter> Invoke-Item Processes.csv<enter>
看看截圖吧(輸出爲".CSV"文件):
使用"Invoke-Item"命令打開:
Invoke-Item Processes.csv <Enter>
使用PowerShell的格式化輸出是否是很簡單呢?我的認爲比VBScript要更加容易上手一些。管理系統更加方便!
PowerShell的常見參數
咱們前面介紹過,爲了簡化咱們的記憶,PowerShell對cmdlet使用了全新的"動詞-名詞"的命名方式,更加方便的是,幾乎全部的cmdlet都擁有統一的標準化參數,固然,我說了,幾乎全部的——並不是所有。下面這個列表,列舉出了「公共參數」(這些參數的名稱是咱們沒法自定義使用的):
-confirm 在執行cmdlet前提示用戶。
-debug 提供相關調試信息。
-ErrorAction 提示cmdlet在執行某項操做時可能出現的錯誤。如:繼續,中止等。
-ErrorVariable 使用一個特定的變量($error)來保存錯誤信息。
-OutVariable 用於保存輸出信息的變量。
-OutBuffer 肯定在進行下一次管道傳遞前須要緩存的對象數量。
-Verbose 爲咱們提供更多細節。
-whatif 並不會真正執行cmdlet,只是告訴你會發生什麼。
此外,PowerShell中還保留了這些參數的下列別名:vb、db、ea、ev、ov 和 ob。
參數太多很差記?好辦,記得使用"Tab"鍵,如:
get-service -<Tab>
或者使用幫助命令"get-help":
get-help get-service -full <Enter>
好了,咱們作一些簡單的演示吧:
Set-ExecutionPolicy Unrestricted -whatif <enter>
是否是很方便?在執行cmdlet以前,"-whatif"就會告訴你接下來會發生什麼。
那麼以下這條cmdlet呢:
Set-ExecutionPolicy Unrestricted -confirm <enter>
是的,它將返回一條驗證操做,以獲取用戶的進一步許可。只是"Y"、"A"、"N"、"L"與"?"咱們都能輕易理解,那麼"S"呢?
請注意觀察如下執行結果:
Set-ExecutionPolicy Unrestricted -confirm<enter> Are you sure you want… S<enter> (places the prompt in suspend mode as denoted by 「>>」). >>Get-ExecutionPolicy<enter> Resricted (or whatever the policy is set to). >>exit<enter> (Typing 「exit」 leaves suspend mode and returns to the original command) Are you sure you want… Y<enter> (Confirms 「Yes」 and sets the ExecutionPolicy to 「Unrestricted」).
執行實例截圖:
聰明的你,明白了麼?
好了,本節內容就到這裏。本節中對PowerShell中對象、格式與參數的介紹,僅僅是其冰山一角,在後續的教程中,咱們將繼續利用今天學習的來進行工做。固然,在本節中還有不少其餘咱們還沒有涉及到的內容、參數等,但願各位童鞋能積極利用PowerShell中所提供的工具進行探索,如"get-help"、"get-member"命令等。
Ps:最後,很是感謝各位能熱情而持續的關注本教程,若是您有任何意見或問題,請進行留言,我將作詳細解答!謝謝。
本文出自 「馬睿的技術博客」 博客,請務必保留此出處http://marui.blog.51cto.com/1034148/290535