文档状态:

  

添加一个用户定义的自定义部件   一个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的特殊处理,基本上为哈希表适配器使用的按键为属性(有点),并添加会员将不与这种对象的预期方式工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top