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

PowerShell 7并行块添加NoteProperty后调用方法报空引用错误

解决PowerShell并行块中自定义类实例方法调用的空引用错误

问题原因

ForEach-Object -Parallel的每个迭代块都运行在独立的**运行空间(Runspace)**中,每个运行空间拥有独立的类型系统:

  • 你在并行块内部定义的test2类,是当前运行空间的独有类型,和主运行空间的类型完全不兼容。
  • 虽然通过$using:test将主空间的对象传入并行块并添加了NoteProperty,但属性值是当前并行运行空间的test2实例。当这个实例回到主运行空间时,跨运行空间的类型不匹配导致方法无法被正确解析,最终触发"Object reference not set to an instance of an object"错误。
  • 非并行模式下所有代码在同一运行空间执行,类型统一,因此不会出现问题。

解决方案

将自定义类test2的定义移到主运行空间(并行块外部),让所有并行迭代共享同一个类型:

class test {}

# 在主运行空间定义test2类,所有并行块共享该类型
class test2 {
    testmethod () {
        Write-Host "test method called"
    }
}

$test = [test]::New()

1..2 | ForEach-Object -Parallel { 
    Add-Member -InputObject $using:test -MemberType NoteProperty -Name "property$_" -Value ([test2]::New())
}

$test.property1.testmethod() 

补充说明

  • 主运行空间定义的类会被所有并行运行空间继承,因此并行块中可以直接引用[test2]创建实例,无需额外处理。
  • 此时添加到$test的test2实例属于主运行空间的统一类型,回到主空间后方法可以正常调用。

内容的提问来源于stack exchange,提问作者SmoothJarManiac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:41:08