Set Value of Nested Object Property by Name in PowerShell

前端 未结 2 1337
傲寒
傲寒 2020-12-21 04:59

I want to set value of nested object property using PowerShell. When you are trying to set the value of the first level properties, it\'s quiet simple:

$prop         


        
2条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-21 05:24

    May I propose an upgrade to Reza's solution. With this solution, you can have many level of nested properties.

    function GetValue($object, [string[]]$keys)
    {
        $propertyName = $keys[0]
        if($keys.count.Equals(1)){
            return $object.$propertyName
        }
        else { 
            return GetValue -object $object.$propertyName -key ($keys | Select-Object -Skip 1)
        }
    }
    
    
    function SetValue($object, [string[]]$keys, $value)
    {
        $propertyName = $keys[0]
        if($keys.count.Equals(1)) {
            $object.$propertyName = $value
        }
        else { 
            SetValue -object $object.$propertyName -key ($keys | Select-Object -Skip 1) -value $value
        }
    }
    

    Usage

    $Obj = ConvertFrom-Json '{ "A": "x", "B": {"C": {"D" : "y"}} }'
    SetValue $Obj -key "B.C.D".Split(".") -value "z"
    GetValue $Obj -key "B.C.D".Split(".")
    

提交回复
热议问题