本節将要給大家介紹一下PowerShell下的對象,基本格式以及參數。依然屬于PowerShell的基礎。
PowerShell中的對象
在本教程開篇我們說過,PowerShell是基于面向對象化的,不像傳統的shell那樣基于文本。這其中最主要的原因就是因為Win平台在管理操作上主要以面向對象為主,是以為了符合系統特點和我們的操作習慣,PowerShell也繼承了這一特色。是以,不像傳統的shell,在PowerShell中,我們可以随意地與對象進行互動,
先來認識一下,什麼是對象——object
不知各位有沒有從事開發的經驗。實際上,面向對象這一概念的提出就是為了更好用程式語言解決現實問題而提出的。
廢話不多說,直接切入正題。在PowerShell中,“對象”是指我們收集資訊或者執行操作的行為。包括屬性(資訊,我們可以收集)和方法(我們可以執行)。
有一個生動的例子——“燈泡”。對象是顯而易見的,它是一個燈泡。一個燈泡的屬性可能包括了其顔色,功率和類型(熒光燈,白熾燈或鹵素燈)。對于它的操作,或者稱之為方法,則是我們可以執行的行為,如打開和關閉。這很容易了解!
讓我們看看在PowerShell中一個對象的屬性以及其方法。
首先,你可能會經常使用它"Get-Member”,這個cmdlet是用來檢查一個對象具有哪些屬性和方法的。
例如:
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