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

PowerShell脚本按Computer和ProgramName多级排序失效问题排查

问题分析与解决

你的脚本里Sort-Object Computer,ProgramName的语法本身是正确的,没实现多级排序大概率是以下几个原因:

可能的原因及对应解决方法

  • 属性名称不匹配
    首先确认Get-RemoteProgram返回的对象是否真的有Computer属性——有些类似脚本/模块会用ComputerName作为属性名。可以先运行以下命令验证:

    # 取第一个计算机的结果,查看属性列表
    Get-RemoteProgram -ComputerName (Get-Content C:\PowerShell\complist.txt)[0] | Select-Object -First 1 | Get-Member
    

    如果实际属性是ComputerName,把排序命令改成Sort-Object ComputerName, ProgramName即可。

  • 属性值存在大小写/空白差异
    比如同一台计算机的Computer值出现PC01和pc01,或者前后带空格,会被当成不同分组,导致看起来没按Computer排序后再排ProgramName。可以修改排序命令忽略大小写并清洗空白:

    Sort-Object @{Expression={$_.Computer.Trim()}}, @{Expression={$_.ProgramName.Trim()}} -IgnoreCase
    
  • CSV查看工具的误导
    有些CSV编辑器(比如Excel)默认打开后不会保留排序状态,可能自动重新排序了。可以先在PowerShell控制台查看排序结果:

    $data | Select-Object Computer, ProgramName -First 30
    

    确认排序逻辑生效后再导出CSV。

修正后的完整脚本示例

$data = Get-RemoteProgram -ComputerName (Get-Content C:\PowerShell\complist.txt) -ExcludeProgram (Get-Content C:\PowerShell\applist.txt) | 
  Where-Object {($_.ProgramName -notmatch 'KB\d+|Microsoft .NET|Microsoft Visual|Intel|Windows Driver Package')} | 
  Sort-Object @{Expression={$_.Computer.Trim()}}, @{Expression={$_.ProgramName.Trim()}} -IgnoreCase

# 先验证排序结果
$data | Select-Object Computer, ProgramName -First 30

$data | Export-Csv -Path C:\PowerShell\output.csv -NoTypeInformation
$data | Export-Csv -Path C:\PowerShell\outputappend.csv -NoTypeInformation -Append

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:11:16