[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.ScriptBlock。
Invoke 會傳回 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。 變數的名稱是字典索引鍵。 環境變數的值是字典值。
名稱 是一個等於 Key 的AliasProperty。
4.5.7 應用程式描述類型
此類型會封裝應用程式的狀態。 它有下列可存取的成員:
實體屬性(唯讀)
由實作定義的集合
與命令相關聯的參數集相關信息。 針對每個參數,結果會顯示參數名稱和類型,並依位置或 switch 參數指出參數是否為必要參數。 如果函式像 Cmdlet 一樣運作(請參閱上述 CmdletBinding),集合結尾會包含 通用參數。
ScriptBlock
實體屬性(唯讀)
scriptblock (§4.3.6)
函式的主體
在 PowerShell 中,此類型為 System.Management.Automation.FunctionInfo。
CommandType 的類型為 System.Management.Automation.CommandTypes。
Options 的類型為 System.Management.Automation.ScopedItemOptions。
OutputType 的類型為 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.PSModuleInfo。
ModuleType 的類型為 System.Management.Automation.ModuleType。
4.5.13 自定義物件描述類型
此類型會封裝自定義物件的狀態。 它沒有可存取的成員。
在 PowerShell 中,此類型為 System.Management.Automation.PSCustomObject。 cmdlet Import-Module 和 New-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.DirectoryInfo。
Attributes 屬性的類型為 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 物件:psbase、psadapted、psextended,以及 pstypenames。 如需這些成員的詳細資訊,請參閱 cmdlet Get-Member 中的 Force 和 View 參數。
實例成員可以隱藏相同名稱的擴充和/或已調整成員,而擴充成員則可隱藏已調整的成員。 在這種情況下,可以使用成員集 psadapted 和 psextended 來存取這些隱藏的成員。
如果 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