如何检查某些进程是否正在运行

时间:2016-05-19 08:25:46

标签: powershell

我想检查Outlook,Word,Excel,......是否正在运行,并将它们列为:
Microsoft Outlook正在运行
Microsoft Word未运行

我写的是这样的:
$ProcessName = "outlook" if((get-process $ProcessName -ErrorAction SilentlyContinue) -eq $Null) { echo "Process is not running" }else{ echo "Process is running" }

并且适用于一个Processname但不知道如何制作多个并列出它们。

3 个答案:

答案 0 :(得分:2)

您可以像这样传递一系列进程:

@("outlook", "word") | 
ForEach-Object 
{
  if((Get-Process $_ -ErrorAction SilentlyContinue) -eq $null) 
  {Write-Host "$_ not running"} 
  else 
  {Write-Host "$_ is running"}
}

注意:为了便于阅读,我将其拆分为多行。

如果您想要更具描述性的内容,可以在流程上使用Description属性(如果存在):

@("outlook", "word") | 
ForEach-Object 
{ 
  if(($p=(Get-Process $_ -ErrorAction SilentlyContinue)) -eq $null)   
  {Write-Host "$_ not running"} 
  else 
  {Write-Host "$($p.Description) is running"}
}

请注意它如何将Get-Process的结果捕获到$p中,并且我们必须使用语法$($p.Description)将其打印在Write-Host中。

答案 1 :(得分:1)

有一千种方法可以实现这一目标。我会选择这样的东西:

@(
    "Word",
    "Outlook",
    "Excel"
) | Foreach-Object {
    if (Get-Process $_ -ErrorAction SilentlyContinue)
    { Write-Output "$_ is running" }
    else { Write-Output "$_ is not running" }
}

这是一个包含你想检查的任何应用程序的数组,然后循环检查它们是否正在运行并显示相应的输出。

答案 2 :(得分:0)

尝试此命令:

Get-Process $processName -ErrorAction Stop