Powershell工作流-获取未筛选的服务

Powershell工作流-获取未筛选的服务,powershell,workflow,Powershell,Workflow,我正在尝试通过Powershell工作流并行重新启动Windows服务。 当我在工作流之外使用Get Service-DisplayName“S*”时,我会得到预期的结果 然而,当我在工作流中使用相同的服务时,我会得到所有的服务。似乎工作流中忽略了-Displayname参数 如何在PS工作流中获得唯一需要的服务 使用脚本: workflow Restart-Services(){ $services = Get-Service -DisplayName "S*" Foreac

我正在尝试通过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
    }
}

阅读这里:为什么如果你没有在这里包含任何字母,工作流就不会启动?如果缺少
-FilterScript
,工作流会在
Where对象上抛出不明确的参数设置错误。只是浪费了15分钟。@Vesper是的,我也注意到了,我还没弄明白这是怎么回事。可能是由于工作流公共参数造成的歧义?它与工作流在后端的工作方式有关。工作流不被PuthS壳解释,它们被扁平化为XML,并被馈入.NETWINDOWS工作流基础。这就是为什么你经常会看到奇怪的行为。为了解决这个问题,我经常使用
inlinescript{}
块(实际上是由powershell引擎处理的)。