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