You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 21:55:15