如何在Select-Object中结合动态传入的属性使用计算属性?
问题解决:PowerShell Select-Object 未添加自定义属性
问题原因
你当前的写法中,@ObjArgs展开后相当于给Select-Object传递了-Property $Property参数,后面的自定义属性哈希表并未被合并到-Property的参数数组中,因此Select-Object只会返回你指定的Mode和Name属性,忽略了后面的自定义属性定义。
解决方案
以下几种方法都可以解决这个问题:
方法1:合并属性数组后直接传递
将用户指定的属性和自定义属性合并为一个数组,再传给Select-Object:
Function Test{ [CmdletBinding()] Param( [Array]$Property ) $selectedProperties = $Property + @{Name="AllCapsName";Expression={($_.basename).ToUpper()}} Get-ChildItem | Select-Object $selectedProperties }
方法2:修改哈希表中的Property值
在构建$ObjArgs哈希表时,直接将自定义属性合并到Property数组中:
Function Test{ [CmdletBinding()] Param( [Array]$Property ) $ObjArgs = @{ Property = $Property + @{Name="AllCapsName";Expression={($_.basename).ToUpper()}} } Get-ChildItem | Select-Object @ObjArgs }
方法3:直接指定-Property参数
省略哈希表展开,直接将$Property和自定义属性作为数组传递给-Property参数:
Function Test{ [CmdletBinding()] Param( [Array]$Property ) Get-ChildItem | Select-Object -Property $Property, @{Name="AllCapsName";Expression={($_.basename).ToUpper()}} }
执行Test -Property Mode, Name后,就能得到你期望的包含AllCapsName属性的结果。
内容的提问来源于stack exchange,提问作者Ralf_Reddings
相关产品推荐
相关产品推荐

