向 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 参数以便该命令可以添加同名的成员。

函数中的最后一个命令为新属性指定的名称与原属性的名称相同。






另请参阅




目录