相关文章推荐
Windows PowerShell 語言規格 3.0 於 2012 年 12 月發行,並以 Windows PowerShell 3.0 為基礎。 此規格不會反映 PowerShell 的目前狀態。 沒有計劃更新此檔以反映目前的狀態。 此文件在此呈現,以作歷史參考。

規格檔可作為 Microsoft Word 檔案從 Microsoft 下載中心取得,位置為: https://www.microsoft.com/download/details.aspx?id=36389 。該 Word 檔案已於 Microsoft Learn 上轉換以供展示。 在轉換期間,已進行一些編輯變更,以配合 Docs 平臺的格式設定。 已修正某些錯字和次要錯誤。

在 PowerShell 中,每個值都有一個類型,而類型分為兩個主要類別之一: 實值型別 參考型別 。 請考慮類型 int ,這是實值型別的一般類型。 類型 int 的值完全獨立;表示該值所需的所有位都會儲存在該值中,而該值中的每個位模式都代表其類型的有效值。 現在,請考慮陣列型別 int[] ,這是一種典型的參考型別。 陣列類型的所謂的值可以儲存指向實際包含陣列元素物件的參考,或 null 參考 ,其值為 $null 。 這兩種類型類別之間的重要區別,最佳方法是觀察它們在賦值過程中的語義差異。 例如

$i = 100 # $i designates an int value 100
$j = $i # $j designates an int value 100, which is a copy
$a = 10,20,30 # $a designates an object[], Length 3, value 10,20,30
$b = $a # $b designates exactly the same array as does $a, not a copy
$a[1] = 50 # element 1 (which has a value type) is changed from 20 to 50
$b[1] # $b refers to the same array as $a, so $b[1] is 50

如我們所見,參考型別值的指派牽涉到 淺層複製;也就是說,對象參考的複本,而不是其實際值。 相反地,深層複製 也需要建立對象的複本。

數值 類型是允許整數或小數的表示和運算,並支持對這些值進行算術運算。 數值型別集合包括整數(•4.2.3)和實數(•4.2.4)類型,但不包括 bool (.2.1) 或 char (•4.2.2)。 實作可能會提供其他數值類型(例如帶正負號的位元組、不帶正負號的整數和其他大小的整數)。

集合 是由一個或多個相關項目組成的群組,它們不必具有相同的類型。 集合類型的範例包括數位、堆疊、佇列、清單和哈希表。 程式可以 列舉集合中的元素(或 逐一查看),一次存取每個元素。 執行此作業的常見方式是使用 foreach 語句(§8.4.4)和 ForEach-Object cmdlet。 代表列舉器的物件類型在 §4.5.16中進行說明。

在本章中,有數據表列出指定類型的可存取成員。 針對方法,Type 會以下列形式撰寫:returnType/argumentTypeList。 如果自變數類型清單太長而無法放入該資料行中,則會改為顯示在 [目的] 資料行中。

其他整數類型則 SByteInt16UInt16UInt32UInt64,全都在命名空間 System

許多集合類別都是 System.CollectionsSystem.Collections.Generic 命名空間的一部分。 大部分的集合類別都會實作介面 ICollectionIComparerIEnumerableIListIDictionaryIDictionaryEnumerator 及其泛型等效版本。

您也可以針對某些類型使用速記名稱。 如需詳細資訊,請參閱 about_Type_Accelerators

4.1 特殊類型

4.1.1 void 類型

無法具現化此類型。 它提供了一個方法,讓我們可以透過使用型別轉換運算子來明確丟棄一個值(§7.2.9)。

4.1.2 空值類型

null 類型 有一個實例,即自動變數$null (.3.2.2),也稱為 null 值。 這個值提供在參考內容中表示「無用」的方法。 此類型的特性未指定。

4.1.3 物件類型

除了 Null 型別以外,PowerShell 中的每個型別(4.1.2)都是直接或間接衍生自型別物件,因此物件是所有非 Null 型別的最終基底型別。 類型為物件的變數約束(§5.3)實際上是沒有約束的,因為它可以包含任何類型的值。

4.2 實值型別

4.2.1 布爾值

布林型別 bool。 這個類型只有兩個值,FalseTrue,分別以自動變數 $false$true表示 (3.2.2)。

在 PowerShell 中,bool 對應至 System.Boolean

4.2.2 字元

字元值具有 char 類型,其能夠儲存任何 UTF-16 編碼的 16 位 Unicode 字碼點。

字元類型 char 具有下列可存取的成員:

  • 輸入 int,它使用32位,範圍從 -2147483648 到 +2147483647,包括端點。
  • 輸入 long,這種類型使用 64 位元,範圍從 -9223372036854775808 到 +9223372036854775807,包含兩端。
  • 類型 int 具有下列可存取的成員:

    在 PowerShell 中,byteintlong 分別對應至 System.ByteSystem.Int32System.Int64

    4.2.4 實數

    4.2.4.1 浮點數和雙精度

    有兩種實數(或浮點數)類型:

  • 類型 float 使用 32 位 IEEE 單精度表示法。
  • 類型 double 使用 64 位 IEEE 雙精確度表示法。
  • 第三個類型名稱 single是類型 float的同義字;此規格會使用 float

    雖然此規格定義了 floatdouble 類型的大小和表示,但實作可能會對中間結果使用擴充精確度。

    類型 float 具有下列可存取的成員:

    在 PowerShell 中,floatdouble 分別對應至 System.SingleSystem.Double

    4.2.4.2 十進位

    類型 decimal 使用 128 位表示法。 至少,它必須支援一個範圍 s,使得 0 <= s<至少為 28,並且值的範圍是 -79228162514264337593543950335 到 79228162514264337593543950335。 decimal 的實際表示依具體實作而定。

    decimal 類型具有下列可存取的成員:

    十進制實數具有一個稱為 小數位數的特徵,代表小數點右邊的數字數。 例如,值 2.340 的尺規為 3,其中尾端零很重要。 當兩個十進位實數相加或相減時,結果的小數位數是兩個小數位數中的較大值。 例如,1.0 + 2.000 是 3.000,而 5.0 - 2.00 是 3.00。 當兩個十進位實數相乘時,結果的小數位數是兩個小數位數的總和。 例如,1.0 * 2.000 是 2.0000。 當兩個十進位實數相除時,結果的小數位數是第一個數字的小數位數減去第二個數字的小數位數。 例如,4.00000/2.000 是 2.00。 不過,尺度不能小於維護正確結果所需的水平。 例如,3.000/2.000、3.00/2.000、3.0/2.000 和 3/2 都是 1.5。

    在 PowerShell 中,decimal 對應至 System.Decimal。 十進位的表示如下:

  • 當視為四個 int 值的陣列時,它包含下列元素:
    • 索引 0 (位 0-31) 包含小數係數的低階 32 位。
    • 索引 1 (位元 32-63) 包含小數係數的中間 32 位。
    • 索引 2 (位元 64-95) 包含小數係數的高階 32 位。
    • 索引 3 (位 96-127) 包含符號位和比例尺,如下所示:
      • 位元0-15是零
      • bits 16‑23 包含刻度,範圍為值0-28。
      • 位元 24 至 30 皆為零
      • 位 31 是正負號 (0 表示正數,1 表示負數)
      • 4.2.5 開關類型

        這個類型可用來限制命令中的參數類型(。8.10.5)。 如果具有對應參數名稱的自變數存在,參數測試$true;否則,它會測試 $false

        在 PowerShell 中,switch 對應至 System.Management.Automation.SwitchParameter

        4.2.6 列舉類型

        列舉型別是定義一組具名常數的列舉型別,代表可指派給該列舉型別之物件的所有可能值。 在某些情況下,這組值的特性導致每次只能表示其中一個值。 在其他情況下,一組值是兩個相異的乘冪,而且使用 -bor 運算符 (7.8.5),可以在相同的物件中編碼多個值。

        PowerShell 環境提供許多列舉類型,如下列各節所述。

        4.2.6.1 Action-Preference 類型

        這個實作定義的類型具有下列可存取的互斥值成員:

        在 PowerShell 中,此類型為 System.Management.Automation.ActionPreference

        4.2.6.2 Confirm-Impact 類型

        這個實作定義的類型具有下列可存取的互斥值成員:

        在 PowerShell 中,此類型為 System.Management.Automation.ConfirmImpact

        4.2.6.3 File-Attributes 類型

        這個實作定義型別具有下列可存取的成員,可以合併:

        在 PowerShell 中,此類型為 System.IO.FileAttributes 與屬性 FlagsAttribute。

        4.2.6.4 常規Expression-Option類型

        這個實作定義型別具有下列可存取的成員,可以合併:

        實作可能會提供其他值。

        在 PowerShell 中,此類型是具有屬性 System.Text.RegularExpressions.RegexOptionsFlagsAttribute。 定義了下列額外值:CompiledCultureInvariantECMAScriptExplicitCaptureIgnorePatternWhitespaceMultilineRightToLeftSingleline

        4.3 參考型別

        4.3.1 字串

        字串值的類型是字串,它是一個由零個或多個字元組成的不可變序列,每個字元都包含以UTF-16編碼的16位元Unicode碼位。

        類型字串具有下列可存取的成員:

        空白/請參閱用途欄

        將一個陣列中的一系列元素複製到另一個陣列中。 有四個版本,其中 來源 是來源陣列,目的地 是目的地陣列,計數 是要複製的元素數目,sourceIndexdestinationIndex 是各自數位中的起始位置:

        複製(來源目的地,int 計數
        複製(來源目的地,長 計數
        copy(sourcesourceIndexdestinationdestinationIndex,int count
        copy(sourcesourceIndexdestinationdestinationIndex、long count

        GetLength 實例方法(只讀) int/none

        指定維度中的項目數目

        GetLength (int 維度)

        如需陣列的詳細資訊,請參閱 §9.

        在 PowerShell 中,array 對應至 System.Array

        4.3.3 哈希表

        類型 Hashtable 具有下列可存取的成員:

        如需哈希表的詳細資訊,請參閱 <10>。

        在 PowerShell 中,Hashtable 對應至 System.Collections.HashtableHashtable 項目會儲存在類型為 DictionaryEntry的物件中,而 Keys 和 Values 所傳回的集合具有類型 ICollection

        4.3.4 xml 類型

        類型 xml 會實作 W3C 檔案物件模型 (DOM) 層級 1 核心和核心 DOM 層級 2。 DOM 是 XML 文件在記憶體中的樹狀結構表示,方便對該文件進行導覽和編輯。 此類型支援註標運算符 [] (•7.1.4.4)。

        在 PowerShell 中,xml 對應至 System.Xml.XmlDocument

        4.3.5 正則表示式(regex)類型

        類型 regex 提供支援正則表達式處理機制。 它用來限制參數類型(§5.3),其對應的引數可能包含正則表達式。

        在 PowerShell 中,regex 對應至 System.Text.RegularExpressions.Regex

        4.3.6 ref 類型

        一般而言,參數會以傳值方式傳遞至命令。 如果參數具有某種值類型,則會傳遞該值的複本。 如果引數具有某個參考類型,則會傳遞此參考的複本。

        類型 ref 提供機制,允許以傳址方式將參數傳遞至命令,讓命令可以修改參數的值。 類型 ref 具有下列可存取的成員:

        function Doubler {
            param ([ref]$x) # parameter received by reference
            $x.Value *= 2.0 # note that 2.0 has type double
        $number = 8 # designates a value of type int, value 8
        Doubler([ref]$number) # argument received by reference
        $number # designates a value of type double, value 8.0
        

        考慮在$number有類型限制的情況下:

        [int]$number = 8 # designates a value of type int, value 8
        Doubler([ref]$number) # argument received by reference
        $number # designates a value of type int, value 8
        

        如所示,引數及其對應的參數都必須在 ref宣告。

        在 PowerShell 中,ref 對應至 System.Management.Automation.PSReference

        4.3.7 腳本區塊類型

        類型 scriptblock 代表預先編譯的腳本文字區塊(§7.1.8),可以作為單一單位使用。 它有下列可存取的成員:

        在 PowerShell 中,scriptblock 對應至 System.Management.Automation.ScriptBlockInvoke 會傳回 PSObject的集合。

        4.3.8 數學類型

        類型 math 提供某些常數和方法的存取權,這些常數和方法在數學計算中很有用。 它有下列可存取的成員:

        類型 pscustomobject 是僅用於轉換的虛擬類型。

        4.4 泛型型別

        許多程式設計語言和環境提供類型,這些類型可以 特化。 其中許多類型稱為 容器類型,因為實例可以包含某些其他類型的物件。 請考慮一種類型,稱為 Stack,它可以用來表示可推送和彈出的元素堆疊。 一般而言,堆疊的使用者只想在該堆疊上儲存一種物件。 不過,如果語言或環境不支援類型特製化,則必須實作Stack類型的多個不同變體,即使它們都執行相同的工作,只要使用不同的類型元素即可。

        型別特製化允許實作 泛型型別,使其在使用時可以限制處理某些類型的子集。 例如

      • 專門用來儲存字串的泛型堆疊類型,可能會寫入為 Stack[string]
      • 一種專門儲存 int 索引鍵及其相關字串值的泛型字典類型,可能會表示為 Dictionary[int,string]
      • 字串堆疊可能會寫入為 Stack[Stack[string]]
      • 雖然 PowerShell 未定義任何內建泛型類型,但如果主機環境提供這類類型,就可以使用這類類型。 請參閱 中的語法 :7.1.10

        這個類型 Stack[string] 的完整名稱是 System.Collections.Generic.Stack[string]。 這個類型 Dictionary[int,string] 的完整名稱是 System.Collections.Generic.Dictionary[int,string]

        4.5 匿名類型

        在某些情況下,PowerShell 的實作會建立某些類型的物件,而這些物件具有可存取腳本的成員。 不過,這些類型的實際名稱不需要被指定,只要能夠充分指定可存取的成員以便使用即可。 也就是說,腳本可以儲存這些類型的物件,並存取其成員,而不需要實際知道這些類型的名稱。 下列子區段會指定這些類型。

        4.5.1 提供者描述類型

        此類別會封裝提供者的狀態。 它有下列可存取的成員:

        在 PowerShell 中,此類型為 System.Management.Automation.PSVariable

        Windows PowerShell:屬性集合的類型為 System.Management.Automation.PSVariableAttributeCollection。

        4.5.4 別名描述類型

        此類型用以封裝別名的狀態。 它有下列可存取的成員:

        工作位置的堆栈是工作位置物件的集合,如上所述。

        在 PowerShell 中,目前的工作位置是以 類型為 System.Management.Automation.PathInfo的物件來表示。 工作位置的堆疊是由類型為 System.Management.Automation.PathInfoStack的物件來表示,這是 PathInfo 物件的集合。

        4.5.6 環境變數描述類型

        此類型會封裝環境變數的狀態。 它有下列可存取的成員:

        在 PowerShell 中,此類型為 System.Collections.DictionaryEntry。 變數的名稱是字典索引鍵。 環境變數的值是字典值。 名稱 是一個等於 KeyAliasProperty

        4.5.7 應用程式描述類型

        此類型會封裝應用程式的狀態。 它有下列可存取的成員:

        實體屬性(唯讀) 由實作定義的集合 與命令相關聯的參數集相關信息。 針對每個參數,結果會顯示參數名稱和類型,並依位置或 switch 參數指出參數是否為必要參數。 如果函式像 Cmdlet 一樣運作(請參閱上述 CmdletBinding),集合結尾會包含 通用參數。 ScriptBlock 實體屬性(唯讀) scriptblock (§4.3.6) 函式的主體

        在 PowerShell 中,此類型為 System.Management.Automation.FunctionInfo

        CommandType 的類型為 System.Management.Automation.CommandTypesOptions 的類型為 System.Management.Automation.ScopedItemOptionsOutputType 的類型為 System.Collections.ObjectModel.ReadOnlyCollection``1[[System.Management.Automation.PSTypeName,System.Management.Automation]]Parameters 的類型為 System.Collections.Generic.Dictionary``2[[System.String,mscorlib],[System.Management.Automation.ParameterMetadata,System.Management.Automation]]ParameterSets 的類型為 System.Collections.ObjectModel.ReadOnlyCollection``1[[System.Management.Automation.CommandParameterSetInfo,System.Management.Automation]]
      • Visibility 的類型 System.Management.Automation.SessionStateEntryVisibility
      • PowerShell 也有稱為 Visibility的屬性。
      • 4.5.11 篩選描述類型

        此類別封裝篩選器的狀態。 其具有與函式描述類型相同的可存取成員集 (≦ 4.5.10)。

        在 PowerShell 中,此類型為 System.Management.Automation.FilterInfo。 其屬性集與 System.Management.Automation.FunctionInfo 相同(4.5.11)。

        4.5.12 模組描述類型

        此類型會封裝模組的狀態。 它有下列可存取的成員:

        在 PowerShell 中,此類型為 System.Management.Automation.PSModuleInfoModuleType 的類型為 System.Management.Automation.ModuleType

        4.5.13 自定義物件描述類型

        此類型會封裝自定義物件的狀態。 它沒有可存取的成員。

        在 PowerShell 中,此類型為 System.Management.Automation.PSCustomObject。 cmdlet Import-ModuleNew-Object 可以產生此類型的物件。

        4.5.14 命令描述類型

        自動變數 $PSCmdlet 是代表所執行 Cmdlet 或函式的物件。 這個物件的類型是已定義的實作;它有下列可存取的成員:

        在 PowerShell 中,此類型為 System.Management.Automation.PSScriptCmdlet。

        4.5.15 錯誤記錄描述類型

        自動變數 $Error 包含一組錯誤記錄,這些記錄代表最近的錯誤(\3.12)。 雖然此集合的類型未指定,但它確實支援下標以存取個別錯誤記錄。

        在 PowerShell 中,集合類型是 System.Collections.ArrayList。 集合中個別錯誤記錄的類型 System.Management.Automation.ErrorRecord。 此類型具有下列公用屬性:

      • CategoryInfo - 取得錯誤類別的相關信息。
      • ErrorDetails - 取得並設定更詳細的錯誤資訊,例如替代錯誤訊息。
      • 例外 - 取得與此錯誤記錄相關聯的例外。
      • FullyQualifiedErrorId - 取得此錯誤記錄的完整錯誤識別碼。
      • InvocationInfo - 取得發生錯誤時所叫用命令的相關信息。
      • PipelineIterationInfo - 取得建立此錯誤記錄時管線的狀態
      • TargetObject - 取得發生錯誤時正在處理的物件。
      • 4.5.16 列舉器說明類型

        許多變數是集合的列舉器(第4節)。 針對任何 $foreach 陳述,自動變數 foreach 是所建立的列舉器。 自動變數 $input 是從管線傳遞至函式之集合的列舉值。 針對任何 $switch 陳述,自動變數 switch 是所建立的列舉器。

        列舉值的類型由實作定義; 它具有以下可存取的成員:

        在 PowerShell 中,這些成員定義於 介面 System.IEnumerator中,此介面是由下列識別的類型所實作。 如果列舉器目前未定位於集合的元素上,則會引發類型 InvalidOperationException 的異常。 針對 $foreach,此類型為 System.Array+SZArrayEnumerator。 針對 $input,此類型為 System.Collections.ArrayList+ArrayListEnumeratorSimple。 針對 $switch,此類型為 System.Array+SZArrayEnumerator

        4.5.17 目錄描述類型

        Cmdlet New-Item 可以建立各種種類的項目,包括 FileSystem 目錄。 目錄描述對象的類型是已定義的實作;它有下列可存取的成員:

        在 PowerShell 中,此類型為 System.IO.DirectoryInfoAttributes 屬性的類型為 System.IO.FileAttributes

        4.5.18 檔案描述類型

        cmdlet New-Item 可以建立各種類型的項目,包括 FileSystem 檔案。 檔案描述對象的類型是已定義的實作;它有下列可存取的成員:

        此類型的物件可由 Cmdlet Group-Object建立。

        在 PowerShell 中,此類型為 Microsoft.PowerShell.Commands.GroupInfo

        4.5.21 泛型-度量-訊息 描述類型

        類型的 泛型量值資訊描述物件是由實現定義的;它具有以下可訪問的成員:

        此類型的物件可由 Cmdlet Measure-Object建立。

        在 PowerShell 中,此類型為 Microsoft.PowerShell.Commands.GenericMeasureInfo

        4.5.22 文字 -Measure-Info 描述類型

        文字資訊 描述物件的類型由實作決定;它有下列可存取的成員:

        此類型的物件可由 cmdlet Measure-Object建立。

        在 PowerShell 中,此類型為 Microsoft.PowerShell.Commands.TextMeasureInfo

        4.5.23 認證類型

        認證物件接著可用於各種安全性作業。 認證對象的類型是已定義的實作;它有下列可存取的成員:

        此類型的物件可由 Cmdlet Get-Credential建立。

        在 PowerShell 中,此類型為 System.Management.Automation.PSCredential

        4.5.24 方法指示項類型

        方法指示項的類型是由實作決定的。它有下列可存取的成員:

        這個類型的物件可由 調用表達式 建立(7.1.3)。

        在 PowerShell 中,此類型為 System.Management.Automation.PSMethod。

        4.5.25 成員定義類型

        此類型用來封裝成員的定義。 它有下列可存取的成員:

        在 PowerShell 中,此類型為 Microsoft.PowerShell.Commands.MemberDefinition

        4.6 類型延伸和適應

        PowerShell 實作包含一系列核心類型(本章記載),每個類型都包含自己的一組 基底成員。 這些成員可以是方法或屬性,而且可以是實例或靜態成員。 例如,類型字串的基底成員 (4.3.1) 是實例屬性 Length 和實例方法 ToLower 和 ToUpper。

        建立物件時,它會包含該物件類型的所有實例屬性,而且該類型的實例方法可以在該物件上呼叫。 物件可透過在執行時新增實例成員來自訂。 結果稱為 自訂物件。 加入實例的任何成員只存在於該實例的存續期;相同核心類型的其他實例不會受到影響。

        型別的基底成員集可以藉由新增下列類型的成員來增強:

        已調適的成員,透過 擴充類型系統(ETS),其大多數細節未具體說明。 擴充了成員,透過 Cmdlet Add-Member

        在 PowerShell 中,擴充成員也可以透過 types.ps1xml 檔案新增。 調整和擴充成員統稱為 綜合成員

        ETS 會將下列成員新增至所有 PowerShell 物件:psbasepsadaptedpsextended,以及 pstypenames。 如需這些成員的詳細資訊,請參閱 cmdlet Get-Member 中的 ForceView 參數。

        實例成員可以隱藏相同名稱的擴充和/或已調整成員,而擴充成員則可隱藏已調整的成員。 在這種情況下,可以使用成員集 psadaptedpsextended 來存取這些隱藏的成員。

        如果 types.ps1xml 指定名為 Supports的成員,obj.psextended 只提供該成員的存取權,而不是透過 Add-Member新增的成員。

        有三種方式可建立具有新成員 M 的自定義物件:

      • 這個方法可用來新增一或多個 NoteProperty 成員。

        $x = New-Object PSObject -Property @{M = 123}
        
      • 這個方法可用來新增 NoteProperty 或 ScriptMethod 成員。

        $x = New-Module -AsCustomObject {$M = 123 ; Export-ModuleMember --Variable M}
        
      • 這個方法可以用來新增任何類型的成員。

        $x = New-Object PSObject
        Add-Member -InputObject $x -Name M -MemberType NoteProperty -Value 123
        
  •  
    推荐文章