如何实现PowerShell中简化自定义属性添加的prop函数?
实现PowerShell简化自定义属性的
prop函数 PowerShell中通过哈希表定义计算属性的语法较为繁琐,官方帮助文档about_Calculated_Properties给出的示例如下:
Get-Date | Select-Object Year, @{name='foo'; expression={123}} # 输出结果: Year foo ---- --- 2024 123
如果想要简化成更直观的写法,比如:
Get-Date | Select-Object Year, (prop 'foo' 123)
可以通过定义如下prop函数实现:
function prop { param( [Parameter(Mandatory)] [string]$Name, [Parameter(Mandatory)] [object]$Expression ) # 若传入的不是脚本块,自动包装为返回指定值的脚本块 if (-not $Expression -is [scriptblock]) { $Expression = [scriptblock]::Create("`$null = `$args; $Expression") } # 返回符合计算属性要求的哈希表 @{ Name = $Name; Expression = $Expression } }
函数说明
- 接收两个必填参数:
$Name(自定义属性名)和$Expression(属性值的计算逻辑) - 如果传入的是静态值(比如
123),会自动将其包装为脚本块,确保Select-Object能正确识别为计算属性 - 支持直接传入脚本块实现动态计算,比如基于当前对象的属性进行处理:
# 示例:获取文件并显示大小(MB) Get-ChildItem -File | Select-Object Name, (prop 'SizeMB' { [math]::Round($_.Length / 1MB, 2) })
内容的提问来源于stack exchange,提问作者Ted Shaneyfelt
相关产品推荐
相关产品推荐

