4. 类型

编辑说明

重要

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[],这是引用类型的典型类型。 所谓数组类型的值可以保存对一个实际包含数组元素的对象的引用,也可以保存一个值为 $nullnull 引用。 这两种类型之间的重要区别最能通过它们在赋值期间的语义差异来体现。 例如,

$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) 类型,但不包括布尔(§4.2.1) 或 char(§4.2.2)。 实现可以提供其他数值类型(如带符号字节、无符号整数和其他大小的整数)。

集合 是一组或多个相关项,这些项的类型不相同。 集合类型的示例包括数组、堆栈、队列、列表和哈希表。 程序可以对集合中的元素进行枚举(或循环访问),一次访问一个元素。 执行此操作的常见方法是 foreach 语句(§8.4.4)和 ForEach-Object cmdlet。 表示枚举数的对象的类型在 §4.5.16中介绍。

在本章中,有一些表列出了给定类型的可访问成员。 对于方法,类型采用以下形式编写:returnType/argumentTypeList。 如果参数类型列表太长而无法放入该列,则会显示在 Purpose 列中。

其他整数类型 SByteInt16UInt16UInt32UInt64,全部在命名空间 系统

许多集合类定义为 System.CollectionsSystem.Collections.Generic 命名空间的一部分。 大多数集合类实现接口 ICollectionIComparerIEnumerableIListIDictionary以及 IDictionaryEnumerator 及其泛型等效项。

还可以对某些类型使用速记名称。 有关详细信息,请参阅 about_Type_Accelerators

4.1 特殊类型

4.1.1 void 类型

无法实例化此类型。 它提供了一种使用强制转换运算符显式丢弃值的方法 (§7.2.9)。

4.1.2 Null 类型

null 类型 有一个实例,即自动变量$null(§2.3.2.2),也称为 null 值。 此值提供在引用上下文中表示“无内容”的方法。 此类型的特征未指定。

4.1.3 对象类型

PowerShell 中除 null 类型(§4.1.2) 以外的每个类型都直接或间接派生自类型对象,因此对象是所有非 null 类型的最终基类型。 被限制为对象类型的变量(§5.3)实际上并没有限制,因为它可以包含任何类型的值。

4.2 值类型

4.2.1 布尔值

布尔类型 bool。 这种类型只有两个值:FalseTrue,分别由自动变量 $false$true表示(§2.3.2.2)。

在 PowerShell 中,bool 映射到 System.Boolean

4.2.2 字符

字符值具有类型 char,它能够存储任何 UTF-16 编码的 16 位 Unicode 码位。

char 类型具有以下可访问成员:

成员 成员种类 类型 用途
最大值 静态属性 (只读) char char 类型的最大可能值
最小值 静态属性 (只读) char char 类型的最小可能值
IsControl 静态方法 bool/char 测试字符是否为控制字符
IsDigit 静态方法 bool/char 测试字符是否为十进制数字
IsLetter 静态方法 bool/char 测试字符是否为字母
IsLetterOrDigit 静态方法 bool/char 测试字符是小数位数还是字母字母
IsLower 静态方法 bool/char 测试字符是否为小写字母
IsPunctuation 静态方法 bool/char 测试字符是否为标点符号
IsUpper 静态方法 bool/char 测试字符是否为大写英文字母
IsWhiteSpace 静态方法 bool/char 测试字符是否为空格字符。
ToLower 静态方法 char/string 将字符转换为小写
ToUpper 静态方法 char/string 将字符转换为大写

Windows PowerShell:char 映射到 System.Char。

4.2.3 整数

有两种带符号整数类型,二者均使用二进制补码表示负值。

  • 类型 int,使用 32 位,范围为 -2147483648 到 +2147483647,包括在内。
  • 类型 long,使用 64 位,范围为 -9223372036854775808 到 +9223372036854775807,包括在内。

Type int 具有以下可访问成员:

成员 成员种类 类型 用途
最大值 静态属性 (只读) int int 类型的最大可能值
最小值 静态属性 (只读) int int 类型的最小可能值

类型 long 具有以下可访问成员:

成员 成员种类 类型 用途
最大值 静态属性 (只读) long long 类型的最大可能值
最小值 静态属性 (只读) long long 类型的最小可能值

有一个无符号整数类型:

  • 类型 byte,使用 8 位,范围为 0 到 255,包括在内。

类型 byte 具有以下可访问成员:

成员 成员种类 类型 用途
最大值 静态属性 (只读) 字节 byte 类型的最大可能值
最小值 静态属性 (只读) 字节 byte 类型的最小可能值

在 PowerShell 中,byteintlong 分别映射到 System.ByteSystem.Int32System.Int64

4.2.4 实数

4.2.4.1 浮点数和双精度值

有两种实数(或浮点)类型:

  • 类型 float 使用 32 位 IEEE 单精度表示形式。
  • 类型 double 使用 64 位 IEEE 双精度表示形式。

第三个类型名称,single,是类型 float的同义词;在整个规范中使用 float

尽管此规范定义了类型 floatdouble 的大小和表示形式,但实现可能会对中间结果使用扩展精度。

类型 float 具有以下可访问成员:

成员 成员种类 类型 用途
最大值 静态属性 (只读) 漂浮 类型 float 的最大可能值
最小值 静态属性 (只读) 漂浮 类型 float 的最小可能值
NaN 静态属性 (只读) 漂浮 常量值 Not-a-Number
NegativeInfinity 静态属性 (只读) 漂浮 常量值负无穷大
PositiveInfinity 静态属性 (只读) FLOAT 常量值正无穷大

类型 double 具有以下可访问成员:

成员 成员种类 类型 用途
最大值 静态属性 (只读) double 类型 double 的最大可能值
最小值 静态属性 (只读) double 类型 double 的最小可能值
NaN 静态属性 (只读) double 常量值 Not-a-Number
NegativeInfinity 静态属性 (只读) double 常量值负无穷大
PositiveInfinity 静态属性 (只读) double 常量值正无穷大

在 PowerShell 中,floatdouble 分别映射到 System.SingleSystem.Double

4.2.4.2 十进制

类型 decimal 使用 128 位表示形式。 它至少必须支持缩放 s,使 0 <= s<= 至少 28,取值范围从 -79228162514264337593543950335 到 79228162514264337593543950335。十进制的实际表示形式由实现定义。

类型 decimal 具有以下可访问成员:

成员 成员种类 类型 用途
最大值 静态属性 (只读) 十进制 类型 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.000/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 位为零
      • 第 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 运行时将继续处理,并通知用户已发生操作。
查询 枚举常量 PowerShell 运行时将停止处理,并询问用户应如何继续。
SilentlyContinue 枚举常量 PowerShell 运行时将继续处理,而不会通知用户已发生操作。
停止 枚举常量 发生操作时,PowerShell 运行时将停止处理。

在 PowerShell 中,此类型是 System.Management.Automation.ActionPreference

4.2.6.2 Confirm-Impact 类型

此实现定义的类型具有以下互斥值可访问成员:

成员 成员种类 用途
枚举常量 执行的操作有丢失数据的风险很高,例如重新格式化硬盘。
枚举常量 执行的操作存在丢失数据的风险较低。
中等 枚举常量 执行的操作有丢失数据的中等风险。
没有 枚举常量 请勿确认任何操作(取消所有确认请求)。

在 PowerShell 中,此类型为 System.Management.Automation.ConfirmImpact

4.2.6.3 File-Attributes 类型

此实现定义类型具有以下可访问成员,可以组合这些成员:

成员 成员种类 用途
存档 枚举常量 文件的存档状态。 应用程序使用此属性标记文件以供备份或删除。
压缩 枚举常量 文件已压缩。
设备 保留以供将来使用。
Directory 枚举常量 该文件是一个目录。
加密 枚举常量 文件或目录已加密。 对于文件,这意味着文件中的所有数据都已加密。 对于目录,这意味着加密是新创建的文件和目录的默认值。
已隐藏 枚举常量 文件已隐藏,因此不包含在普通目录列表中。
正常 枚举常量 该文件是正常的,没有设置其他属性。 仅当单独使用时,此属性才有效。
NotContentIndexed 枚举常量 操作系统的内容索引服务不会为该文件编制索引。
离线 枚举常量 文件处于脱机状态。 文件的数据不会立即可用。
ReadOnly 枚举常量 文件为只读文件。
ReparsePoint 枚举常量 该文件包含一个重新分析点,它是与文件或目录关联的自定义的数据块。
SparseFile 枚举常量 文件是稀疏文件。 稀疏文件通常是数据大多为零的大型文件。
系统 枚举常量 该文件是系统文件。 该文件是操作系统的一部分,或者由操作系统独占使用。
临时 枚举常量 该文件是临时的。 文件系统尝试将所有数据保留在内存中以更快地访问,而不是将数据刷新回大容量存储。 应用程序应尽快删除临时文件。

在 PowerShell 中,此类型为 System.IO.FileAttributes,具有属性 FlagsAttribute。

4.2.6.4 Regular-Expression-Option 类型

此实现定义类型具有以下可访问成员,可以组合这些成员:

成员 成员种类 用途
IgnoreCase 枚举常量 指定匹配不区分大小写。
没有 枚举常量 指定不设置任何选项。

实现可以提供其他值。

在 PowerShell 中,此类型为 System.Text.RegularExpressions.RegexOptions,具有属性 FlagsAttribute。 定义了以下额外值:CompiledCultureInvariantECMAScriptExplicitCaptureIgnorePatternWhitespaceMultilineRightToLeftSingleline

4.3 参考类型

4.3.1 字符串

字符串值具有类型字符串,并且是字符类型的零个或多个字符的不可变序列,每个字符包含 UTF-16 编码的 16 位 Unicode 码位。

类型字符串具有以下可访问成员:

成员 成员种类 类型 用途
长度 实例属性 int(只读) 获取字符串中的字符数
ToLower 实例方法 字符串 创建包含小写等效项的新字符串
ToUpper 实例方法 字符串 创建包含大写等效项的新字符串

在 PowerShell 中,string 映射到 System.String

4.3.2 数组

所有数组类型都派生自类型 Array。 此类型具有以下可访问成员:

成员 成员种类 类型 用途
长度 Instance 属性(只读) int 数组中的元素数
Rank 实例属性 (只读) int 数组中的维度数
复制 静态方法 void/see Purpose 列

将一系列元素从一个数组复制到另一个数组。 有四个版本,其中 是源数组,目标 是目标数组,计数 是要复制的元素数,sourceIndexdestinationIndex 是各自数组中的起始位置:

复制(目标、int 计数
复制(目标、long 计数
复制(sourceIndex目标destinationIndex、int 计数
复制(sourceIndex目标destinationIndex、long 计数

GetLength 实例方法(只读) int/none

给定维度中的元素数

GetLength(int 维度

有关数组的更多详细信息,请参阅 §9。

在 PowerShell 中,Array 映射到 System.Array

4.3.3 哈希表

类型哈希表具有以下可访问成员:

成员 成员种类 类型 用途
计数 实例属性 int 获取哈希表中的键/值对数
钥匙 实例属性 实现定义的 获取所有键的集合
价值观 实例属性 实现定义的 获取所有值的集合
删除 实例方法 无效/无 删除指定的键/值

有关哈希表的更多详细信息,请参阅 §10。

在 PowerShell 中,Hashtable 映射到 System.Collections.HashtableHashtable 元素存储在类型 DictionaryEntry的对象中,键和值返回的集合具有类型 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 提供支持正则表达式处理机制。 它用于约束其相应参数可能包含正则表达式的参数类型(§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 类型

类型 scriptblock 表示可用作单个单元的预编译脚本文本块(§7.1.8)。 它具有以下可访问成员:

成员 成员种类 类型 用途
属性 实例属性(只读) 属性集合 获取脚本块的属性。
文件 实例属性(只读) 字符串 获取在其中定义脚本块的文件的名称。
模块 实例属性(只读) 实现定义的 ([§4.5.12][§4.5.12]) 获取有关在其中定义脚本块的模块的信息。
GetNewClosure 实例方法 scriptblock
/没有
检索绑定到模块的脚本块。 调用方上下文中的任何局部变量都将复制到模块中。
Invoke 实例方法 object/object[] 的集合 使用指定的参数调用脚本块并返回结果。
InvokeReturnAsIs 实例方法 object/object[] 使用指定的参数调用脚本块,并返回生成的任何对象。
创建 静态方法 scriptblock
/字符串
创建包含指定脚本的新 scriptblock 对象。

在 PowerShell 中,scriptblock 映射到 System.Management.Automation.ScriptBlockInvoke 返回 PSObject的集合。

4.3.8 math 类型

类型 math 提供对数学计算有用的某些常量和方法的访问。 它具有以下可访问成员:

成员 成员种类 类型 用途
E 静态属性 (只读) double 自然对数基数
PI 静态属性 (只读) double 圆周与直径之比
Abs 静态方法 numeric/numeric 绝对值(返回类型与传入的参数的类型相同)
Acos 静态方法 double / double 余弦值为指定数值的角度
Asin 静态方法 double / double 正弦值为指定数值的角度
阿坦 静态方法 double / double 正切值为指定数值的角度
Atan2 静态方法 double / double y、double x 正切值为两个指定数字 xy 的商的角度
天花板 静态方法

decimal / decimal

double / double

大于或等于指定数字的最小整数
Cos 静态方法 double / double 指定角度的余弦值
Cosh 静态方法 double / double 指定角度的双曲余弦值
Exp 静态方法 double / double e 的指定次幂
Floor 静态方法

decimal / decimal

double / double

小于或等于指定数字的最大整数
日志 静态方法

double / double number

double / double number、double base

以 e 为底或以 base 为底的数字对数
Log10 静态方法 double / double 指定数字的十进制对数
麦克斯 静态方法 numeric/numeric 两个指定数字中的较大值(返回类型与传入的参数的类型相同)
Min 静态方法 numeric/numeric、numeric 两个指定数字中的较小值(返回类型与传入的参数的类型相同)
Pow 静态方法 double / double x、double y 指定数字 x 的指定次幂 y
正弦 静态方法 double / double 指定角度的正弦值
Sinh 静态方法 double / double 指定角度的双曲正弦值
Sqrt 静态方法 double / double 指定数字的平方根
Tan 静态方法 double / double 指定角度的正切
Tanh 静态方法 double / double 给定角度的双曲正切值

在 PowerShell 中,Math 映射到 System.Math

4.3.9 ordered 类型

类型 ordered 是仅用于转换的伪类型。

4.3.10 pscustomobject 类型

类型 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 提供程序说明类型

此类型封装提供程序的状态。 它具有以下可访问成员:

成员 成员种类 类型 用途
驱动器 实例属性(只读) 实现定义的 (§4.5.2) 驱动器说明对象的集合
名字 实例属性(只读) 字符串 提供者的名称

在 PowerShell 中,该类型为 System.Management.Automation.ProviderInfo

4.5.2 驱动器说明类型

此类型封装驱动器的状态。 它具有以下可访问成员:

成员 成员种类 类型 用途
当前位置 实例属性(读写) 字符串 驱动器的当前工作位置(§3.1.4
描述 实例属性(读写) 字符串 驱动器的说明
名字 实例属性(只读) 字符串 驱动器的名称
实例属性(只读) 字符串 驱动器的名称

在 PowerShell 中,此类型是 System.Management.Automation.PSDriveInfo

4.5.3 变量说明类型

此类型封装变量的状态。 它具有以下可访问成员:

成员 成员种类 类型 用途
属性 实例属性(只读) 实现定义的 特性集合
描述 实例属性(读写) 字符串 通过 New-VariableSet-Variable cmdlet 分配给变量的说明。
模块 实例属性(只读) 实现定义的 (§4.5.12) 从中导出此变量的模块
模块名称 实例属性(只读) 字符串 定义此变量的模块
名字 实例属性(只读) 字符串 使用 PowerShell 语言或通过 New-VariableSet-Variable cmdlet 创建变量时分配给变量的名称。
选项 实例属性(读写) 字符串 通过 New-VariableSet-Variable cmdlet 分配给变量的选项。
实例属性(读写) 对象 在 PowerShell 语言或通过 New-VariableSet-Variable cmdlet 分配变量时分配给变量的值。

在 PowerShell 中,此类型为 System.Management.Automation.PSVariable

Windows PowerShell:属性集合的类型为 System.Management.Automation.PSVariableAttributeCollection。

4.5.4 别名说明类型

此类型封装别名的状态。 它具有以下可访问成员:

成员 成员种类 类型 用途
命令类型 实例属性(只读) 实现定义的 应与“Alias”进行比较。
定义 实例属性(只读) 字符串 通过 New-AliasSet-Alias cmdlet 为其分配别名的命令或别名。
描述 实例属性(读写) 字符串 通过 New-AliasSet-Alias cmdlet 分配给别名的说明。
模块 实例属性(只读) 实现定义(§4.5.12 从中导出此别名的模块
ModuleName 实例属性(只读) 字符串 在其中定义此别名的模块
名字 实例属性(只读) 字符串 通过 New-AliasSet-Alias cmdlet 创建别名时,分配给该别名的名称。
选项 实例属性(读写) 字符串 通过 New-Alias New-AliasSet-Alias cmdlet 分配给别名的选项。
输出类型 实例属性(只读) 实现定义的集合 指定别名所引用命令的输出值类型。
参数 实例属性(只读) 实现定义的集合 命令的参数。
ParameterSets 实例属性(只读) 实现定义的集合 有关与命令关联的参数集的信息。
ReferencedCommand 实例属性(只读) 实现定义的 有关此别名立即引用的命令的信息。
ResolvedCommand 实例属性(只读) 实现定义的 有关别名最终解析到的命令的信息。

在 PowerShell 中,此类型为 System.Management.Automation.AliasInfo

4.5.5 工作位置说明类型

此类型描述工作地点的状态。 它具有以下可访问成员:

成员 成员种类 类型 用途
驱动器 实例属性(只读) 实现定义(§4.5.2 驱动器描述对象
路径 实例属性(只读) 字符串 工作位置
提供程序 实例属性(只读) 实现定义(§4.5.1 提供者
ProviderPath 实例属性(只读) 字符串 提供程序的当前路径

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

在 PowerShell 中,当前工作位置由类型 System.Management.Automation.PathInfo的对象表示。 工作位置的堆栈由类型为 System.Management.Automation.PathInfoStack的对象表示,该对象是 PathInfo 对象的集合。

4.5.6 环境变量说明类型

此类型封装环境变量的状态。 它具有以下可访问成员:

成员 成员种类 类型 用途
名字 实例属性(读写) 字符串 环境变量的名称
实例属性(读写) 字符串 环境变量的值

在 PowerShell 中,这种类型是 System.Collections.DictionaryEntry。 变量的名称是字典键。 环境变量的值是字典值。 NameAliasProperty,相当于 Key

4.5.7 应用程序说明类型

此类型封装应用程序的状态。 它具有以下可访问成员:

成员 成员种类 类型 用途
CommandType 实例属性(只读) 实现定义的 应与“Application”进行比较。
定义 实例属性(只读) 字符串 应用程序的说明。
扩展 实例属性(读写) 字符串 应用程序文件的扩展名。
模块 实例属性(只读) 实现定义(§4.5.12 定义此命令的模块。
模块名称 实例属性(只读) 字符串 定义命令的模块的名称。
名字 实例属性(只读) 字符串 命令的名称。
输出类型 实例属性(只读) 实现定义的集合 指定命令输出的值的类型。
参数 实例属性(只读) 实现定义的集合 命令的参数。
ParameterSets 实例属性(只读) 实现定义的集合 有关与命令关联的参数集的信息。
路径 实例属性(只读) 字符串 获取应用程序文件的路径。

在 PowerShell 中,此类型是:System.Management.Automation.ApplicationInfo

4.5.8 Cmdlet 类型说明

此类型封装 cmdlet 的状态。 它具有以下可访问成员:

成员 成员种类 类型 用途
命令类型 (CommandType) 实例属性(只读) 实现定义的 应与“Cmdlet”进行比较。
默认参数集 实例属性(只读) 实现定义的 默认参数集是在 PowerShell 无法根据提供的参数确定要使用哪个参数集时使用的。
定义 实例属性(只读) 字符串 cmdlet 的说明。
HelpFile 实例属性(读写) 字符串 cmdlet 帮助文件的路径。
实现类型 实例属性(读写) 实现定义的 实现 cmdlet 的类型。
模块 实例属性(只读) 实现定义(§4.5.12 定义此 cmdlet 的模块。
模块名称 实例属性(只读) 字符串 定义 cmdlet 的模块的名称。
名字 实例属性(只读) 字符串 cmdlet 的名称。
名词 实例属性(只读) 字符串 cmdlet 的名词名称。
输出类型 实例属性(只读) 实现定义的集合 指定 cmdlet 输出的值的类型。
参数 实例属性(只读) 实现定义的集合 cmdlet 的参数。
ParameterSets 实例属性(只读) 实现定义的集合 有关与 cmdlet 关联的参数集的信息。
动词 实例属性(只读) 字符串 cmdlet 的动词名称。
PSSnapIn 实例属性(只读) 实现定义的 Windows PowerShell:有关用于注册 cmdlet 的 Windows PowerShell 插件的信息。

在 PowerShell 中,此类型是 System.Management.Automation.CmdletInfo

4.5.9 外部脚本说明类型

此类型封装外部脚本的状态(由 PowerShell 直接执行,但不内置)。 它具有以下可访问成员:

成员 成员种类 类型 用途
CommandType 实例属性(只读) 实现定义的 应与“ExternalScript”进行比较。
定义 实例属性(只读) 字符串 脚本的定义。
模块 实例属性(只读) 实现已定义(§4.5.12 定义此脚本的模块。
模块名称 实例属性(只读) 字符串 定义脚本的模块的名称。
名字 实例属性(只读) 字符串 脚本的名称。
原始编码 实例属性(只读) 实现定义的 用于将脚本的字符转换为字节的原始编码。
输出类型 实例属性(只读) 实现定义的集合 指定脚本输出的值的类型。
参数 实例属性(只读) 实现定义的集合 脚本的参数。
参数集合 实例属性(只读) 实现定义的集合 有关与脚本关联的参数集的信息。
路径 实例属性(只读) 字符串 脚本文件的路径。
ScriptBlock 实例属性(只读) scriptblock 外部脚本。
ScriptContents 实例属性(只读) 字符串 脚本的原始内容。

在 PowerShell 中,这种类型表示为 System.Management.Automation.ExternalScriptInfo

4.5.10 函数说明类型

此类型封装函数的状态。 它具有以下可访问成员:

成员 成员种类 类型 用途
CmdletBinding 实例属性(只读) 布尔 指示函数是否使用编译的 cmdlet 使用的相同参数绑定(请参阅 §12.3.5)。
CommandType 实例属性(只读) 实现定义的 可以将此对象与“Function”或“Filter”进行比较以检查是否相等,进而确认该对象代表的是哪一个。
默认参数集 实例属性(只读) 字符串 指定在参数无法确定时要使用的参数集(请参阅 §12.3.5)。
定义 实例属性(只读) 字符串 ScriptBlock 的字符串版本
描述 实例属性(读写) 字符串 函数的说明。
模块 实例属性(只读) 实现定义(§4.5.12 从中导出此函数的模块
ModuleName 实例属性(只读) 字符串 在其中定义此函数的模块
名字 实例属性(只读) 字符串 函数的名称
选项 实例属性(读写) 实现定义的 函数的范围选项(§3.5.4)。
输出类型 实例属性(只读) 实现定义的集合 按顺序指定值输出的类型(请参阅 §12.3.6)。
参数 实例属性(只读) 实现定义的集合 按顺序指定参数名称。 如果函数的行为类似于 cmdlet(请参阅上面的 CmdletBinding),则集合末尾将包含 常见参数
ParameterSets 实例属性(只读) 实现定义的集合 有关与命令关联的参数集的信息。 对于每个参数,结果显示参数名称和类型,并按位置或开关参数指示该参数是否为必填项。 如果函数的行为类似于 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]]
  • 可见性具有类型 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 模块说明类型

此类型封装模块的状态。 它具有以下可访问成员:

成员 成员种类 类型 用途
描述 实例属性(读写) 字符串 模块的说明(由清单文件设置)
ModuleType 实例属性(只读) 实现定义的 模块的类型(清单、脚本或二进制文件)
名字 实例属性(只读) 字符串 模块的名称
路径 实例属性(只读) 字符串 模块的路径

在 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 或函数的对象。 此对象的类型是定义的实现;它具有以下可访问成员:

成员 成员种类 类型 用途
参数集名称 实例属性(只读) 字符串 当前参数集的名称(请参阅 ParameterSetName)
ShouldContinue 实例方法

重载

/bool

请求用户确认某项操作。
ShouldProcess 实例方法

超负荷

/bool

在执行操作之前,请求用户确认。

在 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 语句创建的枚举器。

枚举器的类型是由实现定义的,它具有以下可访问的成员:

成员 成员种类 类型 用途
当前 实例属性(只读) 对象 获取集合中的当前元素。 如果枚举器当前未定位在集合的元素上,则行为取决于实现的定义。
MoveNext 实例方法 None/bool 将枚举器推进到集合的下一个元素。 如果枚举器成功推进到下一个元素,则返回$true;如果枚举器已超过集合的末尾,则返回$false。

在 PowerShell 中,这些成员在接口 System.IEnumerator中定义,该接口由下面标识的类型实现。 如果枚举器当前未定位在集合的元素上,则会引发 InvalidOperationException 类型的异常。 对于 $foreach,此类型为 System.Array+SZArrayEnumerator。 对于 $input,此类型为 System.Collections.ArrayList+ArrayListEnumeratorSimple。 对于 $switch,此类型为 System.Array+SZArrayEnumerator

4.5.17 目录说明类型

cmdlet New-Item 可以创建各种种类的项目,包括 FileSystem 目录。 目录描述对象的类型由实现定义;它具有以下可访问成员:

成员 成员种类 类型 用途
属性 实例属性(读写) 实现定义(§4.2.6.3 获取或设置目录对象的一个或多个属性。
CreationTime 实例属性(读写) 实现定义(§4.5.19 获取和设置目录对象的创建时间。
扩展 Instance 属性(只读) 字符串 获取目录名称的扩展部分。
FullName 实例属性(只读) 字符串 获取目录的完整路径。
LastWriteTime 实例属性(读写) 实现定义的 (§4.5.19) 获取并设置上次写入目录的时间。
名字 Instance 属性(只读) 字符串 获取目录的名称。

在 PowerShell 中,此类型为 System.IO.DirectoryInfo属性 属性的类型为 System.IO.FileAttributes

4.5.18 文件说明类型

cmdlet New-Item 可以创建各种类型的项,包括 FileSystem 文件。 文件描述对象的类型由实现定义,具有以下可访问成员:

成员 成员种类 类型 用途
属性 实例属性(读写) 实现定义(§4.2.6.3 获取或设置文件对象的一个或多个属性。
BaseName Instance 属性(只读) 字符串 获取文件的名称,不包括扩展名。
CreationTime 实例属性(读写) 实现定义的 (§4.5.19) 获取和设置文件对象的创建时间。
扩展 Instance 属性(只读) 字符串 获取文件名的扩展部分。
FullName 实例属性(只读) 字符串 获取文件的完整路径。
LastWriteTime 实例属性(读写) 实现定义(§4.5.19 获取并设置上次写入文件的时间。
长度 Instance 属性(只读) long 获取文件的大小(以字节为单位)。
名字 Instance 属性(只读) 字符串 获取文件名。
版本信息 Instance 属性(只读) 实现定义的 Windows PowerShell:此 ScriptProperty 返回文件的 System.Diagnostics.FileVersionInfo。

在 PowerShell 中,此类型是 System.IO.FileInfo

4.5.19 日期时间说明类型

日期时间说明对象的类型由实现定义;它有以下可访问成员:

成员 成员种类 类型 用途
实例属性(只读) int 获取此实例所表示月份的日部分。
工时 实例属性(只读) int 获取此实例所表示日期的小时部分。
分钟 实例属性(只读) int 获取此实例所表示日期的分钟部分。
Month 实例属性(只读) int 获取此实例所表示日期的月份部分。
Second 实例属性(只读) int 获取此实例所表示日期的秒部分。
Year 实例属性(只读) int 获取此实例所表示日期的年份部分。

此类型的对象可以通过 cmdlet Get-Date创建。

在 PowerShell 中,此类型为 System.DateTime

4.5.20 组信息说明类型

组信息 说明对象的类型是由实现定义的;它具有以下可访问成员:

成员 成员类型 类型 目的
计数 实例属性(只读) int 获取组中的元素数。
实例属性(只读) 实现定义的集合 获取组的元素。
名字 实例属性(只读) 字符串 获取组的名称。
价值观 实例属性(只读) 实现定义的集合 获取组元素的值。

此类型的对象可以通过 cmdlet Group-Object创建。

在 PowerShell 中,此类型为 Microsoft.PowerShell.Commands.GroupInfo

4.5.21 Generic-Measure-Info 说明类型

generic-measure-info 说明对象的类型由实现定义;它有以下可访问成员:

成员 成员种类 类型 用途
平均 实例属性(只读) double 获取所测量属性值的平均值。
计数 实例属性(只读) int 获取具有指定属性的对象数。
最大 实例属性(只读) double 获取指定属性的最大值。
最低 实例属性(只读) double 获取指定属性的最小值。
财产 实例属性(只读) 字符串 获取要测量的属性。
求和 实例属性(只读) double 获取指定属性的值的总和。

此类型的对象可以通过 cmdlet Measure-Object创建。

在 PowerShell 中,此类型是 Microsoft.PowerShell.Commands.GenericMeasureInfo

4.5.22 Text-Measure-Info 说明类型

文本信息 描述对象的类型是由实现定义的,具有以下可访问的成员:

成员 成员种类 类型 用途
角色 实例属性(只读) int 获取目标对象中的字符数。
实例属性(只读) int 获取目标对象中的行数。
财产 实例属性(只读) 字符串 获取要测量的属性。
单词 实例属性(只读) int 获取目标对象中的字数。

此类型的对象可以通过 cmdlet Measure-Object创建。

在 PowerShell 中,此类型为 Microsoft.PowerShell.Commands.TextMeasureInfo

4.5.23 凭据类型

然后,可以在各种安全操作中使用凭据对象。 凭据对象的类型由实现定义,它具有以下可访问的成员:

成员 成员类型 类型 目的
密码 实例属性(只读) 实现定义的 获取密码。
UserName 实例属性(只读) 字符串 获取用户名。

此类型的对象可以通过 cmdlet Get-Credential创建。

在 PowerShell 中,此类型标识符为 System.Management.Automation.PSCredential

4.5.24 方法设计器类型

方法指示器的类型由实现定义;它具有以下可访问成员:

成员 成员种类 类型 用途
Invoke 实例方法 对象/变量的数量和类型 接受可变数量的参数,并通过传递参数间接调用父方法指示符引用的方法。

此类型的对象可以通过 调用表达式§7.1.3)创建。

在 PowerShell 中,此类型为 System.Management.Automation.PSMethod。

4.5.25 成员定义类型

此类型封装成员的定义。 它具有以下可访问成员:

成员 成员种类 类型 用途
定义 实例属性(只读) 字符串 获取成员的定义。
会员类型 实例属性(只读) 实现定义的 获取成员的 PowerShell 类型。
名字 实例属性(只读) 字符串 获取成员的名称。
TypeName 实例属性(只读) 字符串 获取成员的类型名称。

在 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 指定名为 “支持”的成员,obj.psextended 仅提供对该成员的访问权限,而不是通过 Add-Member添加的成员。

可通过三种方式创建自定义对象,该对象具有新的成员 M:

  1. 此方法可用于添加一个或多个 NoteProperty 成员。

    $x = New-Object PSObject -Property @{M = 123}
    
  2. 此方法可用于添加 NoteProperty 或 ScriptMethod 成员。

    $x = New-Module -AsCustomObject {$M = 123 ; Export-ModuleMember --Variable M}
    
  3. 此方法可用于添加任何类型的成员。

    $x = New-Object PSObject
    Add-Member -InputObject $x -Name M -MemberType NoteProperty -Value 123
    

PSObject 是所有 PowerShell 类型的基类型。