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

循环创建PowerShell自定义PSObject遇错,请求技术协助

没问题,刚接触PowerShell踩点小坑很正常~我来帮你修正代码,同时解释下你原来写法的问题所在。

首先说你原来代码的几个问题:

  • 你一开始把$custOBJ定义成了单个PSObject,不是数组,直接用$custOBJ[$i]赋值肯定会报错,因为单个对象不支持索引访问。
  • $numbers = @('1$i')创建的是包含字符串"1$i"的数组,既不是数字类型,也没正确解析变量$i。
  • 你添加的属性名是test$i,但需求里是Name属性,不符合要求。

接下来给你两种可行的解决方案,第一种是基于你原来的思路修正,第二种是更简洁高效的PowerShell风格写法:

方案一:基于原思路的修正写法

# 先初始化存储所有对象的空数组
$array = @()

# 循环100次(按需调整次数,你示例里写的10,这里改成100)
for ($i = 1; $i -le 100; $i++) {
    # 每次循环创建一个新的空PSObject
    $currentObj = New-Object PSObject
    
    # 添加Name属性,值为自定义字符串(比如muzi1、muzi2...)
    $currentObj | Add-Member -MemberType NoteProperty -Name "Name" -Value "muzi$i"
    
    # 创建数字数组,这里给你示例不同的数字逻辑,你可以按需修改
    $numbers = @($i, $i * 11, $i * 22)
    
    # 添加Numbers属性,把数字数组赋值给它
    $currentObj | Add-Member -MemberType NoteProperty -Name "Numbers" -Value $numbers
    
    # 将当前对象存入数组
    $array += $currentObj
    
    # 如果需要单独的$custOBJ1、$custOBJ2...变量,用New-Variable创建
    New-Variable -Name "custOBJ$i" -Value $currentObj -Force
}

方案二:更简洁高效的PSCustomObject写法

PowerShell 3.0及以上支持直接用[PSCustomObject]创建自定义对象,语法更简洁,而且性能更好(避免+=频繁创建新数组):

# 直接在循环中输出对象,PowerShell会自动收集到$array数组里
$array = for ($i = 1; $i -le 100; $i++) {
    # 直接定义对象的属性和值
    [PSCustomObject]@{
        Name = "muzi$i"
        Numbers = @($i, $i * 11, $i * 22)
    }
    
    # 同时创建单独的$custOBJ1、$custOBJ2...变量
    New-Variable -Name "custOBJ$i" -Value $_ -Force
}

补充说明

  • 如果你不需要单独的$custOBJ1到$custOBJ100变量,完全可以去掉New-Variable那一行,直接通过$array[0]、$array[1]...来访问对应位置的对象。
  • 数字数组的逻辑你可以随便修改,比如用@(Get-Random -Minimum 1 -Maximum 100, Get-Random -Minimum 1 -Maximum 100)生成随机数,只要是数字类型的数组就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:32:29