Powershell 如何创建只读属性

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

当我运行这段代码时,它会导致$o有一个没有值的Name属性,即使我将'MyObj'作为名称传递。我做错了什么

谢谢你的帮助

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()正是我所需要的。谢谢