更改现有PowerShell对象

时间:2015-12-23 22:55:18

标签: powershell

我有一个使用函数创建的自定义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
    }
}

2 个答案:

答案 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

PowerShell: Creating Custom Objects