2017-04-18 52 views
1

我試圖通過PowerShell作爲後臺進程運行防病毒掃描。如何使用PowerShell通過Start-Job運行Symantec Endpoint Protection掃描?

我的代碼:

$arg1 = "/c" 
$arg2 = "/ScanAllDrives" 
$logFile = "/LOGFILE='C:\Users\user\AppData\Local\Symantec\Symantec Endpoint Protection\Logs\test.log'" 

Start-Job -ScriptBlock {"C:\Program Files (x86)\Symantec\Symantec Endpoint Protection\12.1.7004.6500.105\Bin\DoScan.exe"} -ArgumentList "$arg1 $arg2 $logFile 

作業的第二運行後停止。 Get-Job顯示它已經完成,但它沒有給出運行時和缺少日誌文件。

當我從PowerShell控制檯運行如下它工作正常:

& "C:\Program Files (x86)\Symantec\Symantec Endpoint Protection\12.1.7004.6500.105\Bin\DoScan.exe" /c /ScanAllDrives 

知道爲什麼這不會在後臺運行?我試着直接將腳本添加到腳本塊中,但它似乎完全不喜歡。我不覺得很容易明白爲什麼它會完成,因爲後臺作業不會產生任何輸出。

+0

好吧,我想我已經接近了一點。當我使用接收作業時,我看到: 術語'x86'不被識別爲cmdlet,函數,腳本文件或可操作程序的名稱。檢查名稱的拼寫,或者如果包含路徑,請驗證路徑是否正確,然後再試一次 – user1894814

+0

謝謝,但現在參數不起作用 – user1894814

+0

您將參數傳遞給作業,但從未在腳本中引用它們塊。 –

回答

1

根據您的評論,在調查PowerShell作業的結果時,使用帶作業ID的Receive-Job cmdlet查看結果輸出。這可能會幫助您進一步排除故障。

我認爲以下修改後的代碼將工作,但我沒有SEP本地安裝所以不能進行完整的測試(但它確實是一個替換的.exe工作):

$arg1 = '/c' 
$arg2 = '/ScanAllDrives' 
$logFile = '/LOGFILE="C:\Users\user\AppData\Local\Symantec\Symantec Endpoint Protection\Logs\test.log"' 

Start-Job -ScriptBlock {& "C:\Program Files (x86)\Symantec\Symantec Endpoint Protection\12.1.7004.6500.105\Bin\DoScan.exe" $Args[0] $Args[1] $Args[2]} -ArgumentList $arg1, $arg2, $logFile 

說明:

  • 可執行文件的路徑需要用引號括起來,因爲它包含空格。
  • 傳遞給-ArgumentList的變量需要通過名爲$Args的自動數組變量在腳本塊中引用。
  • 您傳遞給-ArgumentList的變量需要用逗號分隔。