PowerShell中Where-Object的-replace无法生效问题求助
解决PowerShell字符串替换不生效的问题
问题根源
你用 Where-Object 是用来筛选对象的,它只会判断条件返回布尔值,不会修改对象的属性。你写的代码只是计算出了替换后的字符串,但根本没把这个值赋回给对象的 Creator 属性,所以排序时还是用原来的带z的字符串,自然看不到变化。
正确实现方案
方案1:永久修改对象属性
用 ForEach-Object 遍历对象,把替换后的值重新赋值给 Creator 属性,之后再排序:
# 假设$yourData是你的对象集合 $yourData | ForEach-Object { $_.Creator = $_.Creator -replace 'zNo Creator Found','No Creator Found' } | Sort-Object Creator
方案2:排序时临时替换(不修改原对象)
如果不想改动原数据,直接在排序逻辑里使用替换后的字符串:
$yourData | Sort-Object { $_.Creator -replace 'zNo Creator Found','No Creator Found' }
注意事项
-replace是返回新字符串的操作,不会自动修改原对象的属性,必须手动赋值才会生效。Where-Object仅用于过滤对象,不要用它来做属性修改操作。
内容的提问来源于stack exchange,提问作者maskeda
相关产品推荐
相关产品推荐

