2016-05-19 113 views
0

我要检查如果Outlook,Word,Excel和......正在运行与否,并列出他们喜欢:
微软Outlook运行
Microsoft Word中没有运行如何检查是否一些进程正在运行

我已经写了某事像这样:
$ProcessName = "outlook" if((get-process $ProcessName -ErrorAction SilentlyContinue) -eq $Null) { echo "Process is not running" }else{ echo "Process is running" }

而且适用于一个Processname但不知道如何使一个以上,并列出它们。

回答

1

可以传递的进程列表中是这样的:

@("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

打败你吧lol –

+0

Thanka很多。你能否改变它的方式,输出将是产品名称:Microsofit字是跑步,...... – frhling1

+0

@ frhling1 - 完成! – Sean

0

试试这个命令:

Get-Process $processName -ErrorAction Stop 
+0

虽然你可以使$ processname成为一个数组来检查你没有解释过,也没有提供所需的输出。另外,通过告诉它在出错时停止,您确保如果找不到进程,则返回除错误外的其他内容。 –

1

有一千种方式,你可以做到这一点。我会去这样的事情:

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

这是考虑要检查的任何应用程序的数组,然后通过他们循环检查,如果他们正在运行并显示相应的输出。

相关问题