PowerShell脚本接收数组类型和多值输入的关键在于参数声明使用[Type[]]语法及调用时遵循命名、位置或混合传参规范;Param([string[]] $ComputerName)正确,而[string]则强制合并为字符串;支持splatting(如@params)动态传入,且可通过.Count、GetType()或-is [array]验证数组类型。PowerShell 脚本接收数组类型和多值输入,核心在于**参数声明方式**和**调用时的语法规范**。不是所有写法都能被正确识别为数组,稍有偏差就可能变成字符串拼接或单个对象。
参数声明:用方括号明确指定数组类型
必须在 param() 块中为参数加上类型标注,如 [string[]]、[int[]] 或泛型形式 [system.string[]]。不加 [] 就只是单值。
-
正确写法(接收多个值):
Param([string[]] $ComputerName) -
错误写法(只收一个字符串):
Param([string] $ComputerName)—— 即使传入多个值,也会被强制转成一个逗号分隔的字符串 - 支持常见数组类型:
[int[]]、[bool[]]、[hashtable[]],甚至自定义类数组如[ADUser[]]
调用方式:支持命名、位置、混合三种传参形式
只要参数类型是数组,PowerShell 会自动把多个值聚合进数组,无需额外包装。
-
命名参数(推荐):
.\Script.ps1 -ComputerName "DC01" "DC02" "DC03" -
位置参数(按 Param() 中顺序):
.\Script.ps1 "DC01" "DC02" "DC03"(前提是 Param() 块里第一个参数是[string[]] $ComputerName) -
混合使用:
.\Script.ps1 -Verbose -ComputerName "SRV01" "SRV02" -Limit 5
高级技巧:用 splatting 传递动态数组
当数组内容来自变量、计算或配置文件时,用 @ 变量名(splatting)比硬编码更灵活、更安全。
通过 handsfree-windows CLI控制 Windows 本机应用 (UIA) 和浏览器 (Playwright) 的引导技能,用于自动化或测试桌面应用。
- 先构建哈希表或数组变量:
$params = @{ ComputerName = @("DC01","DC02"); Limit = 10 } - 再展开调用:
.\Script.ps1 @params - 若只传数组类参数,可用数组 splatting:
$names = "LON-DC1","LON-DC2"; .\Script.ps1 @names(此时脚本 Param() 必须是位置数组参数)
验证与调试:确认是否真收到数组
脚本内部可快速检查参数是否为预期数组类型:
-
Write-Host "Count: $($ComputerName.Count)"—— 数组才有 .Count -
Write-Host "Type: $($ComputerName.GetType().FullName)"—— 应输出类似 System.String[] -
if ($ComputerName -is [array]) { ... }可用于条件分支

















