题
文档状态:
添加一个用户定义的自定义部件 一个Windows PowerShell中的一个实例 对象
什么 “的Windows PowerShell对象” 代表?
此正常工作:
$obj = new-object system.object
$obj | add-member -membertype noteproperty -name Name -value "OK"
$obj.name
但是,这并不:
$obj = @{}
其实,我尝试添加属性$错误[0]
解决方案
PowerShell有什么叫做PSObject是围绕任何.NET对象的包装(也可以是一个完全自定义对象),当你调用添加会员,PowerShell是隐含了PSObject包装真正的.NET对象。
添加会员的工作方式取决于你是否开始与一个PSObject。如果你没有用PSObject开始,添加会员将包装输入在PSObject和你需要为了看到调整的对象变量重新分配。
因此,例如:
$x = [Environment]::OSVersion
$x | Add-Member NoteProperty IsVista $true
$x | Format-List # does not show the new property
这是因为OSVERSION不裹是PSObject。加入会员做包装,但包装是失去,因为你不重新分配$ x到被包装的对象。与此对比的行为:
$x = New-Object OperatingSystem ('Win32NT', '6.0')
$x | Add-Member NoteProperty IsVista $true
$x | Format-List # DOES show the new property
这是因为新物体隐式包装在一个PSObject新的实例。所以你添加会员通话将成员添加到现有的包装。
让我们回到第一个例子,你可以通过将其更改为它按预期工作:
$x = [Environment]::OSVersion
$x = $x | Add-Member NoteProperty IsVista $true -PassThru
$x | Format-List # DOES show the new property
现在这一切之后,该哈希表不工作,你所期望的方式的原因是因为哈希表是通过PowerShell的特殊处理,基本上为哈希表适配器使用的按键为属性(有点),并添加会员将不与这种对象的预期方式工作。
不隶属于 StackOverflow