无法在PowerShell函数内更新对象属性
问题原因
你定义的参数[Object[]]$WorkItem是数组类型,当传入单个$myObject对象时,PowerShell会自动把它包装成仅含一个元素的数组。
读取$WorkItem.Name时能正常输出,是因为PowerShell的成员枚举特性:它会自动遍历数组内的每个元素,读取它们的Name属性并返回结果。但赋值时,你直接给数组本身的Name属性赋值,而数组对象根本没有这个属性,因此触发报错。
解决方法
根据需求,有两种处理方式:
方式一:仅处理单个对象(修改参数类型)
如果函数只需要接收单个对象,将参数类型从数组[Object[]]改为单个对象类型[Object]或更具体的[PSCustomObject]即可:
$myObject = [PSCustomObject]@{ Name="Fill Me In" } function Update-Name { param ( [PSCustomObject]$WorkItem ) Write-Output $WorkItem.Name $WorkItem.Name = "Robert Anderson" Write-Output $WorkItem.Name } Update-Name -WorkItem $myObject
方式二:支持批量处理多个对象(遍历数组赋值)
如果需要函数接收多个对象批量处理,保留数组类型参数,但要遍历数组内的每个元素单独赋值:
$myObject = [PSCustomObject]@{ Name="Fill Me In" } function Update-Name { param ( [Object[]]$WorkItem ) foreach ($item in $WorkItem) { Write-Output $item.Name $item.Name = "Robert Anderson" Write-Output $item.Name } } Update-Name -WorkItem $myObject
内容的提问来源于stack exchange,提问作者TripToBelize
相关产品推荐
相关产品推荐

