gpt4 book ai didi

function - 无法在函数的Where-Object 中使用变量

转载 作者:行者123 更新时间:2023-12-02 02:00:27 25 4
gpt4 key购买 nike

我正在尝试创建一个函数,可以根据我要传递参数的LatestStatus 值对作业进行计数。到目前为止我得到了什么:

Function JobCountStatus {
Write-Output (Get-VBRJob | ?{$_.Info.LatestStatus -eq $args} | Measure-Object).Count
}

问题是,正如我在某处读到的那样,将会有一个 subshel​​l(?) 执行 where,因此参数不会被传递。

如果我将 $args 替换为特定字符串(例如“Failed”),它将起作用。

有办法克服这个问题吗?我不想为所有可能的值编写单独的函数。

如果有任何意见,我将不胜感激 - 谢谢

最佳答案

那么,您可以在运行函数时命名该值,因为 $argsAutomatic Variable

JobCountStatus "Failed"

您可以使用带有参数的高级函数,无论是否命名:

function JobCountStatus {
[CmdletBinding()]
Param (
[Parameter(Mandatory = $true, Position = 0)]
[System.String]
$Status
)
Process {
(Get-VBRJob | Where-Object { $_.Info.LatestStatus -eq $Status } | Measure-Object).Count
}
}

并这样调用它:

JobCountStatus -Status "Failed"

# OR

JobCountStatus "Failed"

后者与仅使用 $args 具有相同的最终结果。在这里指定您自己的参数的唯一可能的优点是您可以定义 ValidateSet状态或状态值枚举,以便您可以通过 Tab 键浏览它们。前者的一个例子如下:

function JobCountStatus {
[CmdletBinding()]
Param (
[Parameter(Mandatory = $true, Position = 0)]
[ValidateSet("Failed", "Running", "Successful", "Unknown")]
[System.String]
$Status
)
Process {
(Get-VBRJob | Where-Object { $_.Info.LatestStatus -eq $Status } | Measure-Object).Count
}
}

关于function - 无法在函数的Where-Object 中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69036457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com