从C#调用PowerShell时如何实现Sort-Object多字段降序排序
解决C#调用PowerShell Sort-Object实现多字段降序排序的问题
嘿,我正好碰到过类似的坑!你之前尝试的各种字符串写法之所以没用,是因为PowerShell的Sort-Object在指定排序方向时,不能直接靠字符串拼接来实现——它需要明确的结构化参数,也就是用**哈希表(Hashtable)**来定义每个字段的排序规则。
单个字段降序的正确写法
不用再纠结字符串格式了,直接给Property参数传一个包含排序规则的哈希表就行:
// 构造单个字段的降序排序规则 var singleSortRule = new Hashtable(); singleSortRule["Expression"] = "ID"; // 指定排序字段 singleSortRule["Descending"] = true; // 开启降序 // 添加Sort-Object命令和参数 powerShell.AddCommand("Sort-Object"); powerShell.AddParameter("Property", singleSortRule);
多个字段混合排序的写法
如果需要多字段排序(比如先按User降序,再按ID升序),只需要把多个哈希表放到数组里传给Property参数:
// 构造多字段排序规则集合 var multiSortRules = new ArrayList(); // 第一个规则:User字段降序 var userSort = new Hashtable(); userSort["Expression"] = "User"; userSort["Descending"] = true; multiSortRules.Add(userSort); // 第二个规则:ID字段升序(默认升序,可省略Descending或设为false) var idSort = new Hashtable(); idSort["Expression"] = "ID"; multiSortRules.Add(idSort); // 添加命令和参数 powerShell.AddCommand("Sort-Object"); powerShell.AddParameter("Property", multiSortRules.ToArray());
为什么之前的写法无效?
当你传"User Descending"这类字符串时,PowerShell会把整个字符串当作一个字段名去查找,而不是解析成“字段+排序方向”,自然不会触发降序逻辑。只有通过哈希表明确指定Expression和Descending属性,PowerShell才能正确识别你的排序需求。
内容的提问来源于stack exchange,提问作者FWiest
相关产品推荐
相关产品推荐

