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

PowerShell中Sort-Object返回字符串而非数组,如何使其返回数组?

解决Sort-Object返回字符串而非数组的问题

问题出在PowerShell的自动拆包行为:当Sort-Object -Unique的结果仅包含单个元素时,PowerShell会自动将集合拆包为标量值(也就是单个字符串),而非保留数组结构。

有三种简单的解决方式:

1. 强制转为数组(兼容所有PowerShell版本)

用@()包裹排序结果,强制将输出转为数组,无论结果有多少元素:

$myprogs = Get-ChildItem D:\MyPath\MyPrograms
$myprognames = foreach ($i in $myprogs) { $i.FullName -replace "D:\\MyPath\\MyPrograms\\", "" }
$myprognames = @($myprognames | Sort-Object -Unique)
# 此时$myprognames始终是数组,即使只有一个元素
$myprognames

2. 使用-AsArray参数(PowerShell 7及以上版本可用)

PowerShell 7+为Sort-Object新增了-AsArray参数,直接强制返回数组:

$myprogs = Get-ChildItem D:\MyPath\MyPrograms
$myprognames = foreach ($i in $myprogs) { $i.FullName -replace "D:\\MyPath\\MyPrograms\\", "" }
$myprognames = $myprognames | Sort-Object -Unique -AsArray
$myprognames

3. 提前初始化数组变量

在赋值前先将$myprognames初始化为空数组,确保后续赋值不会丢失数组结构:

$myprogs = Get-ChildItem D:\MyPath\MyPrograms
$myprognames = @()
foreach ($i in $myprogs) {
    $myprognames += $i.FullName -replace "D:\\MyPath\\MyPrograms\\", ""
}
$myprognames = $myprognames | Sort-Object -Unique
$myprognames

验证方式:执行$myprognames.GetType().Name,如果输出是Object[]则说明是数组,String则是单个字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:06:02