Powershell 工作流程 - Get-Service 不过滤

Powershell workflow - Get-Service not filtering

我正在尝试通过 Powershell 工作流并行重启 Windows 服务。 当我在工作流程之外使用 Get-Service -DisplayName "S*" 时,我得到了预期的结果。

但是,当我在工作流程中使用相同的服务时,我得到的是所有服务。似乎 -Displayname 参数在工作流中被忽略。

如何在 PS 工作流程中只获得需要的服务?

使用脚本:

workflow Restart-Services(){
    $services = Get-Service -DisplayName "S*"

    Foreach -Parallel ($svc in $services){
        $name = $svc.Name
        Restart-Service -Name $svc -Force
    }
}

Restart-Services

我不知道为什么 -Name [wildcard] 有效而 -DisplayName [wildcard] 无效(在工作流程中),但如果您愿意,可以使用 Where-Object 完成过滤:

workflow Restart-Services{
    $services = Get-Service |Where-Object -FilterScript {$_.DisplayName -like "S*"}

    Foreach -Parallel ($svc in $services){
        $name = $svc.Name
        Restart-Service -Name $name
    }
}