2015-09-04 122 views
0

比方說有一個與應在Server1上運行的名字exampleService的應用程序運行。如果代碼正在運行,則此代碼有效。但是,當它沒有運行時,它會崩潰。我怎樣才能知道具體的ProcessName是沒有崩潰

$application = Get-Process -ComputerName Server1 -Name "exampleService" 

我得到這個崩潰,如果應用程序沒有運行。有沒有發現如果它沒有運行(不崩潰)

Get-Process : Cannot find a process with the name "exampleService". Verify the process name and call the cmdlet again. 
At line:1 char:16 
+ $application = Get-Process -ComputerName Server1 -Name "exampleService" 
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : ObjectNotFound: (Sampler:String) [Get-Process], ProcessCommandException 
    + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand 

也是它能夠在服務器上啓動應用程序,如果它沒有運行的更優雅的方式?

服務器運行Windows Server 2012的PowerShell命令正在從一個Windows 7 64位PC上運行。

+1

僅供參考:接收錯誤!=與碰撞相同。即使遇到錯誤(即使下一個命令依賴於前一個命令的輸出時出現不可預知的結果),PS腳本仍會在大多數情況下繼續運行。 – bluuf

回答

2

看看使用-ErrorAction SilentlyContinue保持這一錯誤無法顯示。你可以在If語句中使用它來啓動應用程序,如果它沒有運行。

--Updated包括啓動遠程過程

If (-NOT (Get-Process -Computername Server1 -name "cmd" -ErrorAction SilentlyContinue)) { 
    Write-Host "Launch application" 
    $application = "c:\windows\system32\cmd.exe" 
    $start = ([wmiclass]"\\Server1\Root\CIMV2:win32_process").Create($application) 
} 
+0

是這個僞代碼嗎?或真實代碼 –

+0

這是真實的代碼。我只是創建了一個不存在的進程名,以確保它會強制它顯示''Launch Application''文本。您可以用實際的命令(以及要查找的實際進程名稱)替換該文本以啓動您的應用程序。 – boeprox

+0

我只是CMD測試,它似乎並沒有做任何事情。如果(-NOT(獲取進程-name「CMD」 -ErrorAction SilentlyContinue)){ 「啓動應用程序」 $應用=「C:\ WINDOWS \ SYSTEM32 \ cmd.exe的」 $啓動= {([wmiclass] 「的Win32_Process」)創建($應用程序)}} –

0

您可以設置ErrorActionSilentlyContinue(別名是-ea 0):

$application = Get-Process -ComputerName Server1 -Name "exampleService" -ea 0

現在可以檢查$application和如果應用程序爲null,則啓動它。參考文獻:

+0

你如何啓動應用程序? –

相關問題