如何创建只读属性

时间:2012-07-23 16:26:31

标签: 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 ScriptProperty -value { $name }
   $o
}

$o = CreateSomething -name MyObj
$o

1 个答案:

答案 0 :(得分:5)

你想在这里实现什么?

-value { $name }将是用于ScriptProperty的脚本块,它不知道$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