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

问题描述:

我试图通过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

您将参数传递给作业,但从未在脚本中引用它们块。 –

根据您的评论,在调查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的变量需要用逗号分隔。