Add-Member
常用来创建自定义对象,例如:
1 2 3 4 5
| $o = New-Object -TypeName PSObject $o | Add-Member -MemberType NoteProperty -Name Notes -Value 'Something' $o | Add-Member -MemberType NoteProperty -Name Date -Value (Get-Date)
$o
|
这可以工作,结果类似这样:
PS C:\> $o
Notes Date
----- ----
Something 10/28/2016 3:56:53 PM
然而,这样做效率不高。因为 Add-Member
时动态地扩展现有的对象,而不是创建新的对象。以上代码可以用这种方法更容易地实现:
1 2 3 4 5 6
| $o = [PSCustomObject]@{ Notes = 'Something' Date = Get-Date }
$o
|
Add-Member
可以做更多高级的事情,例如添加脚本属性和方法。请检查当您向以上对象添加动态脚本属性时发生了什么:
1 2 3 4 5 6
| $o = [PSCustomObject]@{ Notes = 'Something' Date = Get-Date }
$o | Add-Member -MemberType ScriptProperty -Name CurrentDate -Value { Get-Date }
|
现在请看多次查询该对象时,它的 Date
和 CurrentDate
属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| PS C:\> $o
Notes Date CurrentDate ----- ---- ----------- Something 10/28/2016 4:01:54 PM 10/28/2016 4:01:57 PM
PS C:\> $o
Notes Date CurrentDate ----- ---- ----------- Something 10/28/2016 4:01:54 PM 10/28/2016 4:02:00 PM
PS C:\> $o
Notes Date CurrentDate ----- ---- ----------- Something 10/28/2016 4:01:54 PM 10/28/2016 4:02:02 PM
|
Date
属性返回的是静态信息而CurrentDate
属性总是返回当前时间,因为它的值是一个脚本,每次查询这个属性的时候都会执行一次。