Powershell 如何创建只读属性
当我运行这段代码时,它会导致$o有一个没有值的Name属性,即使我将'MyObj'作为名称传递。我做错了什么 谢谢你的帮助Powershell 如何创建只读属性,powershell,Powershell,当我运行这段代码时,它会导致$o有一个没有值的Name属性,即使我将'MyObj'作为名称传递。我做错了什么 谢谢你的帮助 function CreateSomething { param( [string] $name ) $o = new-object PSObject write-host '$name:' $name $o | add-member -name Name -passThru -force -memberType ScriptPropert
function CreateSomething {
param( [string] $name )
$o = new-object PSObject
write-host '$name:' $name
$o | add-member -name Name -passThru -force -memberType ScriptProperty -value { $name }
$o
}
$o = CreateSomething -name MyObj
$o
你想在这里实现什么
-值{$name}
将是用于ScriptProperty的scriptblock,它不知道$name
(它不在范围内)
您可以这样做:
$o | add-member -name Name -passThru -force -memberType ScriptProperty -value { $name }.GetNewClosure()
我不明白你为什么不能这样做:
$o | add-member -name Name -passThru -force -memberType NoteProperty -value $name
注意:由于您在上述语句中使用了
-passThru
,因此可以省略函数最后一行中的一个$o
。我希望创建一个名为“Name”的只读属性,返回“MyObj”。如果我使用NoteProperty,它会是读/写吗?@bddogcaball-我已经给出了一个ScriptProperty
alternative tooAha!使用GetNewClosure()的ScriptProperty替代方案有效。我更改了帖子的标题,以反映我真正想要实现的目标。GetNewClosure()正是我所需要的。谢谢