PowerShell中Compare-Object的自定义SideIndicator如何正确导出显示
问题原因
你使用了-PassThru参数,导致Compare-Object直接返回了原始的XML行字符串,你给字符串附加的SideIndicator属于动态属性,直接通过>重定向写入文件时,PowerShell只会输出字符串本身的内容,不会输出附加属性,因此看不到自定义标识。
解决方法
去掉-PassThru参数,直接处理Compare-Object默认返回的对比结果对象,将差异标识和行内容拼接后再写入文件即可。
修复后代码
$NAS = Get-Content C:\temp\Gold_Copy.xml $Snapshot = Get-Content C:\temp\QJ07312433_10_19_2021_snapshot.xml Compare-Object -ReferenceObject $NAS -DifferenceObject $Snapshot | ForEach-Object { $tag = switch ($_.SideIndicator) { '=>' { '【仅存在于Snapshot】' } '<=' { '【仅存在于NAS】' } } # 可自行调整标识和内容的拼接顺序 "$tag $($_.InputObject)" } | Out-File -FilePath C:\temp\diff.txt -Encoding UTF8
补充说明
使用Out-File指定UTF8编码可以避免生成的txt文件出现乱码,比默认的>重定向兼容性更好。如果需要保留原英文标识,直接替换switch里的中文内容即可。
内容的提问来源于stack exchange,提问作者jakebake
相关产品推荐
相关产品推荐

