PowerShell函数中Where-Object无法读取传入参数如何解决
问题原因
你遇到的是PowerShell自动变量$args的作用域覆盖问题:$args是每个作用域独有的自动变量,Where-Object的筛选脚本块{}属于独立子作用域,脚本块内部的$args指代的是脚本块自身的传入参数,而非外层函数的入参,因此匹配失效。
最优解决方案
推荐直接显式声明函数参数,配合简化版Where-Object语法,完全规避作用域问题,代码可读性也更高:
Function JobCountStatus { # 显式定义入参,支持强制校验必填 param( [Parameter(Mandatory=$true)] [string]$TargetStatus ) # 无需脚本块的属性匹配语法,直接使用外层变量 return (Get-VBRJob | Where-Object Info.LatestStatus -eq $TargetStatus | Measure-Object).Count }
调用示例
统计失败状态任务:JobCountStatus -TargetStatus Failed
统计成功状态任务:JobCountStatus -TargetStatus Success
兼容脚本块写法
如果你需要保留脚本块写法做更复杂的筛选逻辑,只需要避免使用$args,用自定义参数名即可,自定义局部变量可以跨脚本块作用域访问:
Function JobCountStatus { param( [Parameter(Mandatory=$true)] [string]$TargetStatus ) return (Get-VBRJob | Where-Object {$_.Info.LatestStatus -eq $TargetStatus} | Measure-Object).Count }
内容的提问来源于stack exchange,提问作者MorRich
相关产品推荐
相关产品推荐

