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

如何将PowerShell数组变量作为参数传递给工作流任务?

问题分析与解决方案

你代码里有两个核心问题导致报错:

  • 变量名不一致:定义的是$MountedDrive,但后续引用的是$MountedDrives,直接让数组为空,触发"Cannot Index into a Null Array"错误。
  • 工作流未接收外部参数:PowerShell工作流有独立作用域,没法直接访问外部变量,必须通过参数传递。

修正后的通用实现

不用分别写Verify1、Verify2,一个工作流就能处理任意数量的USB驱动器,自动并行执行脚本:

# 定义可接收驱动器数组参数的工作流
workflow Verify-Drives {
    param(
        [string[]]$Drives
    )

    # 并行遍历每个驱动器执行脚本
    foreach -parallel ($drive in $Drives) {
        powershell -file Foo.ps1 $drive
    }
}

# 获取所有USB驱动器(修正变量名)
$MountedDrives = @(Get-WmiObject Win32_LogicalDisk | Where-Object {$_.DriveType -eq 2} | Select-Object -ExpandProperty DeviceID)

# 调用工作流并传递驱动器数组
if ($MountedDrives.Count -gt 0) {
    Verify-Drives -Drives $MountedDrives
} else {
    Write-Host "未检测到挂载的USB驱动器"
}

关键改进点

  • 统一变量名$MountedDrives,彻底解决空数组问题。
  • 工作流通过param块接收外部数组,突破作用域隔离限制。
  • 用foreach -parallel自动处理并行逻辑,不管有多少个USB驱动器都能适配,不用写多个分支。
  • 添加空数组判断,避免无驱动器时执行无效操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:42:37