はじめに
この記事では、ESETの**コマンドラインスキャナ(ecls.exe)**をPowerShellから実行し、指定フォルダをログ付きでスキャンするスクリプトを紹介する。
動機
Windows環境でESETをGUIで使っていて、除外もしていないのに「なぜかスキャンしていない」という状況に遭遇した。画面を見ていてもよくわからんから、コマンドラインからスキャンすればいいかと思い調べた。実行したら、あっさり解決したので、それを残しておこうと思う。
✅ 概要
1. ESETのコマンドラインスキャナ ecls.exe を使用する
2. 指定したフォルダ(例:C:, D:\oreoreなど)をスキャンする
3.スキャン結果を日付付きログファイルに保存する
4.オプションは適度に強め(アドウェア、SFX対応、サブフォルダ再帰など)
⚙️ 必要条件
1.ESET Internet Security または ESET Smart Security Premium が
インストールされていること
2.ecls.exe が以下に存在していること
(デフォルト・インストールなら問題ないはず。)
C:\Program Files\ESET\ESET Security\ecls.exe
3.PowerShell を 管理者権限で実行すること
# 📜 スクリプト全文(ESET_Scan.ps1)
# .SYNOPSIS
# ESET CLIウイルススキャンをPowerShellから実行。
# 任意のフォルダを対象に、ログを日付付きで保存。
#
# .PARAMETER TargetPath
# スキャン対象フォルダ(省略時は D:\)
#
# .PARAMETER LogPath
# ログ保存フォルダ(省略時は D:\ScanLogs)
param (
[string]$TargetPath = "D:\",
[string]$LogPath = "D:\ScanLogs"
)
# === ログファイル名(日付付き)===
$logFile = "scanlog_{0}.txt" -f (Get-Date -Format "yyyyMMdd_HHmmss")
$fullLogPath = Join-Path $LogPath $logFile
# === ログ保存フォルダを作成(存在しなければ)===
if (-not (Test-Path $LogPath)) {
New-Item -Path $LogPath -ItemType Directory | Out-Null
}
# === ESET スキャン実行 ===
$ecls = "C:\Program Files\ESET\ESET Security\ecls.exe"
$args = @(
"$targetPath"
"/log-file=$fullLogPath"
"/aind" # OS起動セクター等も含め全体スキャン
"/adware" # アドウェアも検査対象に
"/suspicious" # 疑わしい振る舞いのファイルも対象
"/sfx" # 自己解凍型アーカイブもスキャン
"/subdir" # サブフォルダも含めて再帰的にスキャン
"/clean-mode=none" # 自動削除などはせず、検出のみログに記録
)
& $ecls @args
Write-Host "スキャン完了: $fullLogPath"
🚀 使い方
1.管理者権限で PowerShell を開き、スクリプトを保存したディレクトリに移動して、
.\ESET_Scan.ps1
これで、D:\ をスキャンし、ログをD:\ScanLogsに保存する
2.管理者権限で PowerShell を開き、スクリプトを保存したディレクトリに移動して、
.\ESET_Scan.ps1 -TargetPath "D:\oreore " -LogPath "D:\Logs"
これで、D:\oreore を対象にスキャンし、ログをD:\Logsに出力する。
📝 補足・注意点
うまくいかなかったらマニュアルを調べて、がんばる。
🔚 最後に
GUIがどうも思ったとおりに動作してくれない場合、あるいは、自動でウイルススキャンを実行した場青、こういう手もあることをたまにでいいから思い出してください。