能否为Compare-Object的两个对象设置不同比较属性?附具体场景
关于PowerShell Compare-Object的属性比较问题
可以实现给ReferenceObject和DifferenceObject设置不同的属性逻辑来执行比较,不过不能直接通过-Property参数分别指定两边的原始属性,需要借助计算属性哈希表来定义差异化的比较逻辑。
针对你需要将$refs[i].Name + ' new'与$difs[i].Name进行比较的需求,具体的$property参数配置方法如下:
方法示例
定义一个计算属性,通过SideIndicator标识区分来自ReferenceObject和DifferenceObject的对象,分别返回对应的值:
$property = @{ Name = { # SideIndicator为'<=', 代表当前对象来自ReferenceObject if ($_.SideIndicator -eq '<=') { $_.InputObject.Name + ' new' } # SideIndicator为'=>', 代表当前对象来自DifferenceObject else { $_.InputObject.Name } } } # 执行比较 Compare-Object -ReferenceObject $refs -DifferenceObject $difs -Property $property
简化写法
如果追求代码简洁,可以用PowerShell的三元运算符简化脚本块:
$property = @{ Name = { $_.SideIndicator -eq '<=' ? ($_.InputObject.Name + ' new') : $_.InputObject.Name } }
原理说明
Compare-Object在处理对象时,会自动为每个对象添加SideIndicator属性:
<=表示该对象来自ReferenceObject=>表示该对象来自DifferenceObject
通过这个标识,我们可以在计算属性的脚本块中为两边的对象定义不同的取值逻辑,从而实现你需要的差异化比较。
内容的提问来源于stack exchange,提问作者kakakali
相关产品推荐
相关产品推荐

