2016-05-19 152 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" } 
} 

這是考慮要檢查的任何應用程序的數組,然後通過他們循環檢查,如果他們正在運行並顯示相應的輸出。

相關問題