向 Windows PowerShell 对象的实例中添加用户定义的自定义成员。
语法
Add-Member [-MemberType] {<AliasProperty> | <CodeProperty> | <Property> | <NoteProperty> | <ScriptProperty> | <Properties> | <PropertySet> | <Method> | <CodeMethod> | <ScriptMethod> | <Methods> | <ParameterizedProperty> | <MemberSet> | <Event> | <All>} [-Name] <string> -InputObject <psobject> [[-Value] <Object>] [[-SecondValue] <Object>] [-Force] [-PassThru] [<CommonParameters>]
说明
Add-Member cmdlet 可向 Windows PowerShell 对象的实例中添加用户定义的自定义成员。允许添加的成员类型包括:AliasProperty、CodeProperty、NoteProperty、ScriptProperty、PropertySet、CodeMethod、MemberSet 和 ScriptMethod。通过使用 Value 参数可设置成员的初始值。在成员的类型为 AliasProperty、ScriptProperty、CodeProperty 和 CodeMethod 的情况下,可以使用 SecondValue 参数来提供附加信息。
附加成员将添加到通过管道传递给 Add-Member 或使用 InputObject 参数指定的对象的特定实例中。只有在该实例存在时,附加成员才可用。可使用 Export-Clixml cmdlet 将该实例(包括附加成员)保存到文件中。Import-Clixml cmdlet 可以使用该文件中存储的信息来重新创建相应对象的实例。
参数
-Force
添加新成员,即使与其同名的成员已存在。但不适用于核心成员类型。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-InputObject <psobject>
指定要向其添加新成员的对象。输入一个包含对象的变量,或键入可获取对象的命令或表达式。
是否为必需? |
true |
位置? |
named |
默认值 |
|
是否接受管道输入? |
true (ByValue) |
是否接受通配符? |
false |
-MemberType <PSMemberTypes>
指定要添加的成员类型。此参数是强制参数。
此参数的有效值为:
-- AliasProperty:一种可为现有属性定义新名称的属性。
-- CodeMethod:一种可引用 Microsoft .NET Framework 类的静态方法的方法。
-- CodeProperty:一种可引用 .NET Framework 类的静态属性的属性。
-- MemberSet:属性和方法的预定义集合,如 PSBase、PSObject 和 PSTypeNames。
-- Method:基础 .NET Framework 对象的方法。
-- NoteProperty:具有静态值的属性。
-- ParameterizedProperty:具有参数和参数值的属性。
-- Property:基础 .NET Framework 对象的属性。
-- PropertySet:对象属性的预定义集合。
-- ScriptMethod:其值是脚本输出的方法。
-- ScriptProperty:其值是脚本输出的属性。
-- All:获取全部成员类型。
-- Methods:获取对象的所有类型的方法(如 method、codemethod、scriptmethod)
-- Properties:获取对象的所有类型的属性(如 property、codeproperty、aliasproperty、scriptproperty)。
并非所有对象都具有成员的全部类型。如果您指定的成员类型不是对象所具有的,则 Windows PowerShell 会返回错误。
Event 成员类型对 Add-Member 无效。
是否为必需? |
true |
位置? |
1 |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
true |
-Name <string>
指定要添加的成员名称。
如果省略“Name”参数名称,则 -Name 参数的值必须为命令中第二个未命名的参数值。如果包含参数名称,则该参数可以以任何顺序出现。
是否为必需? |
true |
位置? |
2 |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-PassThru
将新扩展的对象传递至管道。默认情况下,此 cmdlet 将不产生任何输出。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-SecondValue <Object>
指定有关 AliasProperty、ScriptProperty、CodeProperty 或 CodeMethod 成员的可选附加信息。如果在添加 AliasProperty 时使用此参数,则此参数必须为数据类型。向指定数据类型的转换将添加到 AliasProperty 的值中。例如,如果添加了为字符串属性提供替代名称的 AliasProperty,则也可指定 System.Int32 的 SecondValue 参数来指示该字符串属性的值在使用对应的 AliasProperty 进行访问时应转换为整数。
在添加 ScriptProperty 成员时,可以使用 SecondValue 参数来指定附加的 ScriptBlock。这种情况下,将使用 Value 参数中指定的第一个 ScriptBlock 来获取变量的值。SecondValue 参数中指定的第二个 ScriptBlock 可用于设置变量的值。
是否为必需? |
false |
位置? |
4 |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-Value <Object>
指定添加成员的初始值。若要添加 AliasProperty、CodeProperty 或 CodeMethod 成员,则可通过使用 SecondValue 参数提供可选的附加信息。
是否为必需? |
false |
位置? |
3 |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
<CommonParameters>
此 cmdlet 支持通用参数:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息,请参阅 about_Commonparameters.
输入和输出
输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。
输入 |
System.Management.Automation.PSObject 可将任何对象类型通过管道传递至 Add-Member。 |
输出 |
None 或 System.Object 如果使用 PassThru 参数,则 Add-Member 返回新扩展的对象。否则,此 cmdlet 将不产生任何输出。 |
说明
只能向 PSObject 对象添加成员。若要确定对象是否为 PSObject 对象,请使用“is”运算符。例如,若要测试 $obj 变量中存储的对象,请键入“$obj -is [PSObject]”。
MemberType、Name、Value 和 SecondValue 参数的名称为可选项。如果省略参数名称,则未命名参数的值必须按以下顺序出现:MemberType、Name、Value、SecondValue。如果包括参数名称,则参数能够以任何顺序出现
示例 1
C:\PS>$a = (get-childitem)[0] C:\PS> $a | add-member -membertype noteproperty -name Status -value done C:\PS> $a | get-member -type noteproperty TypeName: System.IO.DirectoryInfo Name MemberType Definition ---- ---------- ---------- PSChildName NoteProperty System.String PSChildName=Co PSDrive NoteProperty System.Management.Automation PSIsContainer NoteProperty System.Boolean PSIsContainer PSParentPath NoteProperty System.String PSParentPath=M PSPath NoteProperty System.String PSPath=Microso PSProvider NoteProperty System.Management.Automation Status NoteProperty System.String Status=done 说明 ----------- 这些命令将状态注释属性添加到 Get-ChildItem 返回的 DirectoryInfo 对象,并向该对象赋予一个“done”值。 第一个命令获取 Get-Childitem 返回的第一个对象(索引 0)。 第二个命令用于添加注释属性。 第三个命令使用管道运算符 (|) 将更新后的对象发送到 Get-Member cmdlet。输出显示已添加属性。
示例 2
C:\PS>$a = (get-childitem)[0] C:\PS> $a | add-member -membertype aliasproperty -name FileLength -value Length C:\PS> $a.filelength 说明 ----------- 这些命令将向 Get-ChildItem 返回的 DirectoryInfo 对象添加 FileLength 别名属性。新属性是 Length 属性的别名。 第一个命令获取 Get-Childitem 返回的第一个对象(索引 0)。 第二个命令用于添加别名属性。 第三个命令将返回新 FileLength 属性的值。
示例 3
C:\PS>$a = "a string" C:\PS> $a = $a | add-member -membertype noteproperty -name StringUse -value Display -passthru C:\PS> $a.StringUse 说明 ----------- 这些命令用于将 StringUse 属性添加到字符串。由于字符串不是 PSObject 对象,因此必须将 PassThru 参数包括在命令中,以将扩展的字符串保存到变量中。示例中的最后一个命令用于显示新属性。
示例 4
C:\PS>$a = "this is a string" C:\PS> $a = add-member -inputobject $a -membertype scriptmethod -name words ` -value {$this.split()} -passthru C:\PS> $a.words() 说明 ----------- 这些命令将向字符串对象添加脚本方法。脚本方法公开了 .NET Framework 类库类 System.String 的 Split() 方法,以便于通过对字符串对象调用名为“Words”的方法来返回字符串中的各个单词。请注意,指定 PassThru 参数可强制 Add-Member 返回扩展的字符串对象作为将存储在 $a 变量中的输出。
示例 5
C:\PS>$event = get-eventlog -logname system -newest 1 C:\PS> $event.TimeWritten | get-member C:\PS> add-member -inputobject $event -membertype aliasproperty -name When ` -value TimeWritten -secondvalue System.String C:\PS> $event.When | get-member 说明 ----------- 这些命令将向由 Get-EventLog cmdlet 返回的 EventLogEntry 对象添加 AliasProperty。AliasProperty 将命名为“When”,且此属性是该对象的 TimeWritten 属性的别名。SecondValue 参数用于指定在使用 AliasProperty 进行访问时属性值应转换为类型 System.String;TimeWritten 属性为 DateTime 对象。 第一个命令使用 Get-EventLog cmdlet 从 System 事件日志中检索最近发生的事件,并将其存储在 $event 变量中。 第二个命令用于访问该事件的 TimeWritten 属性,并通过管道将其传递给 Get-Member cmdlet 以表明该属性是 DateTime 类型。然后使用 Add-Member 向存储在 $event 变量中的 EventLogEntry 对象的实例添加 AliasProperty 成员。Name 参数用于将新成员的名称设置为“When”,而 Value 参数用于指定该新成员名称为 TimeWritten 属性的别名。SecondValue 参数用于指示,在使用此新成员时,它所返回的值应从其原来的 System.DateTime 类型转换为 System.String 类型。 第三个命令用于访问新成员,并通过管道将其传递给 Get-Member cmdlet 以确认它属于 System.String 类型。
示例 6
C:\PS>function Copy-Property ($From, $To) { foreach ($p in Get-Member -InputObject $From -MemberType Property) { Add-Member -InputObject $To -MemberType NoteProperty -Name $p.Name -Value $From.$($p.Name) -Force $To.$($p.Name) = $From.$($p.Name) } } 说明 ----------- 此函数将一个对象的所有属性复制到另一个对象中。 函数中的第一个命令声明了函数名称并列出其参数。 Foreach 循环使用 Get-Member cmdlet 来获取 From 对象的每个属性。将针对每个属性依次执行 Foreach 循环中的命令。 Add-Member 命令将该 From 对象的属性当作 NoteProperty 添加到 To 对象中。它采用 Force 参数以便该命令可以添加同名的成员。 函数中的最后一个命令为新属性指定的名称与原属性的名称相同。
另请参阅