【问题标题】:How do I run a Symantec Endpoint Protection scan via Start-Job with PowerShell?如何使用 PowerShell 通过 Start-Job 运行 Symantec Endpoint Protection 扫描?
【发布时间】:2017-04-18 05:09:42
【问题描述】:

我正在尝试通过 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 直接添加到脚本块中,但它似乎根本不喜欢这样。由于后台作业不产生任何输出,我很难理解为什么它会完成。

【问题讨论】:

  • 好吧,我想我已经接近了一点。当我使用 Receive-job 时,我看到:术语“x86”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试
  • 谢谢,但现在参数不起作用
  • 您将参数传递给作业,但从不在脚本块中引用它们。
  • 您需要 ScriptBlock 中的 &。以下为我工作Start-Job -ScriptBlock { & "notepad.exe" -Arguments "test.txt"}
  • 我使用Start-Process 处理这类任务,这允许直接使用文件路径而不是脚本块包装。这可能更适合您的任务。

标签: powershell symantec


【解决方案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 的变量需要用逗号分隔。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    相关资源
    最近更新 更多