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

PowerShell单值数组使用Get-Unique时字符串被拆分问题求解

PowerShell 单元素数组管道处理异常问题解答

问题原因

  • PowerShell 管道默认存在单元素集合自动展开机制:仅包含1个元素的数组通过管道传递时,会被自动解包为单个字符串对象,不再保留数组结构
  • 字符串实现了IEnumerable接口,Get-Unique、Sort-Object等支持集合处理的命令,接收到单个可枚举对象时,会默认枚举其内部元素(即字符串的每一个字符)进行运算,最终返回结果为字符数组,因此按下标取值时会得到单个字符
  • 多元素数组通过管道时会被展开为多个独立的字符串对象,命令直接处理字符串集合,因此运行符合预期

规避解决方法

方法1:强制接收结果为数组

使用数组包裹运算符@()包裹整个赋值逻辑,无论管道返回单个值还是多个值,最终结果都会被封装为数组:

# 单元素场景正常运行
$t = @(@("asd") | Get-Unique)
# 多元素场景兼容
$t = @(@("asd","bcd") | Get-Unique)

执行后$t[0]将返回完整的asd字符串。

方法2:禁止管道枚举输入数组

使用Write-Output的-NoEnumerate参数,强制数组作为整体传递给下游命令,不会被展开:

$t = Write-Output @("asd") -NoEnumerate | Get-Unique

方法3:直接通过参数传值

不使用管道传递输入,直接将数组赋值给命令的InputObject参数,不会触发自动枚举逻辑:

# Get-Unique 用法
$t = Get-Unique -InputObject @("asd")
# Sort-Object 带去重参数用法
$t = Sort-Object -InputObject @("asd") -Unique

内容的提问来源于stack exchange,提问作者András Müller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:15:03