如何使用PowerShell通过Start-Job运行Symantec Endpoint Protection扫描?

时间:2017-04-18 05:09:43

标签: powershell symantec

我正在尝试通过PowerShell运行防病毒扫描作为后台进程。

我的代码:

$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

知道为什么这不会在后台运行?我已经尝试将args直接添加到scriptblock中,但它似乎根本不喜欢它。由于后台作业不产生任何输出,我不觉得它很容易理解为什么它完成。

1 个答案:

答案 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的自动数组变量在scriptblock中引用。
  • 传递给-ArgumentList的变量需要用逗号分隔。