You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:30:03