我有一个使用函数创建的自定义PowerShell对象:
$obj = myfunction -name "hello" -value 5
创建之后我想更改value属性但是这样做(如下所示)不起作用
$obj.value = 1
我已经搜索过,似乎找不到任何东西 - 有人可以解释我是如何做到这一点的吗?
这是我的函数,它创建一个返回对象
function myfunction
{
[CmdletBinding()]
[OutputType([System.Collections.Hashtable])]
Param
(
[Parameter(Mandatory=$true,
Position=0)]
[String]
$name,
[Parameter(Mandatory=$true,
Position=1)]
[int]
$value,
)
Process
{
$myfunction = @{
name = $name
value = $value
}
write-output $myfunction
}
}
答案 0 :(得分:3)
如果你要返回哈希表,你应该能够做你写的:
PS> $obj = myfunction -name "hello" -value 5
PS> $obj.value = 1
PS> $obj
Name Value
---- -----
name hello
value 1
然而,"安全"方法是使用方括号。
您可能想尝试一下,因为我的直觉是您尝试设置.Values
而非.Value
...而.Values
是Hashtables的不可设置属性。< / p>
PS> $obj = myfunction -name "hello" -value 5
PS> $obj["value"] = 1
PS> $obj
Name Value
---- -----
name hello
value 1
无论哪种方式,你可以通过创建一个真实的PSCustomObject来避免这一切,正如@ jaqueline-vanek在她的回答中所做的那样。
答案 1 :(得分:2)
PS C:\Users\joshua> $obj = [PSCustomObject]@{ hello = 5 }
PS C:\Users\joshua> $obj.hello
5
PS C:\Users\joshua> $obj.hello = 1
PS C:\Users\joshua> $obj.hello
1