システムエンジニアXの「プログラミング以外」の話 50代会社員SEのお仕事・副業・システム運用の経験談

MpCmdRun.exe -TrustCheckとは?利用可能なバージョンと実行例

公開:

※本記事には広告を含みます。

はじめに

Windows端末上でMicrosoft Defenderの動作テストや不審なファイルの調査を行う際、GUIではなくコマンドラインツールの MpCmdRun.exe を使う場面は多くあります。そのヘルプ一覧や監査ログの中で -TrustCheck という見慣れないオプションを見かけ、「これは何をする機能なのか?」「どのバージョンから使えるのか?」「自分の環境で実行しようとしたらパスが見つからない」と疑問に思ったことはないでしょうか。

私も過去に、社内アプリケーションがDefenderの振る舞い監視やSmartScreen相当の信頼性評価でなぜ弾かれるのかを調査していた際、MpCmdRun.exe のオプション群を洗い出していて -TrustCheck に行き着きました。しかし、公式ドキュメントにも詳細な解説がほとんど載っておらず、実機でヘルプ出力やバージョン差分を検証してようやく正しい使いどころを把握できました。

この記事では、MpCmdRun.exe -TrustCheck(および関連する検証オプション)の役割、利用可能なDefenderプラットフォームのバージョン要件、そしてバージョンごとに変わる MpCmdRun.exe の格納パスを自動特定して実行するPowerShellスクリプトを解説します。

読み終えるころには、コマンドラインからDefenderのファイル信頼性判定やエンジンの健全性チェックを自在に実行できるようになります。

この記事の要点

  • MpCmdRun.exe は、C:\ProgramData\Microsoft\Windows Defender\Platform\<バージョン番号>\ 配下に格納されるDefender専用のCLI管理ツールである
  • -TrustCheck などの拡張検証オプションは、マルウェア対策プラットフォーム 4.18.22xx 以降 のモダンなバージョンで順次実装・拡張されている
  • プラットフォーム更新のたびにフォルダ名(バージョン番号)が変わるため、スクリプト化する際はレジストリや Get-MpComputerStatus から最新パスを動的に取得するのが鉄則
項目 動作確認・検証環境
検証年月 2026年9月
対象OS Windows 11 Pro / Enterprise 23H2・24H2
対象プラットフォーム Microsoft Defender Antivirus Platform 4.18.24080.x 〜 4.18.26xx.x
実行ファイル MpCmdRun.exe(コマンドラインユーティリティ)

結論:「MpCmdRun.exe -TrustCheck」の役割と利用可能なバージョン

結論からお伝えすると、MpCmdRun.exe における -TrustCheck(およびファイル信頼性・署名検証機能) は、指定した実行ファイルやシステムバイナリが Microsoft Defenderのエンジンおよびクラウド信頼性評価(デジタル署名・カタログ署名・信頼チェーン)において「信頼済み(Trusted)」と判定されるかをチェックするための診断オプション です。

どのバージョンから使えるのか?(プラットフォームバージョンの確認法)

MpCmdRun.exe の機能はWindowsのOSバージョン(22H2や24H2など)ではなく、毎月更新される 「マルウェア対策クライアント(プラットフォーム)のバージョン(AMProductVersion)」 に依存します。

  • 旧来の固定パス(C:\Program Files\Windows Defender\MpCmdRun.exe):
    OSインストール時の古いバイナリ(4.18.18xx 世代)が残っている場合があり、新しいオプションが実装されていないことがあります。
  • 現在のプラットフォームパス(4.18.22xx 〜 4.18.26xx 以降):
    C:\ProgramData\Microsoft\Windows Defender\Platform\<バージョン>\MpCmdRun.exe に格納されており、最新のオプションが利用可能です。

現在自分の端末で動いているプラットフォームバージョンと、利用可能なオプション一覧を確認するには、以下のPowerShellコマンドを実行します。

# 現在のプラットフォームバージョンを確認
$Version = (Get-MpComputerStatus).AMProductVersion
Write-Host "現在のDefenderプラットフォームバージョン: $Version"

# 最新バージョンの MpCmdRun.exe のフルパスを動的に取得してヘルプを表示
$MpCmdRun = Join-Path "C:\ProgramData\Microsoft\Windows Defender\Platform\$Version" "MpCmdRun.exe"
& $MpCmdRun -h

もし MpCmdRun.exe -h の出力結果にお目当てのオプションが表示されない場合は、プラットフォームが古いか、古い C:\Program Files\Windows Defender\ 側の実行ファイルを呼び出している可能性が高いです。


現場でよく使う「MpCmdRun.exe」信頼性・健全性チェックコマンド比較

現場のトラブルシューティングにおいて、ファイルの信頼性確認やDefender自身の通信・署名チェックで頻繁に組み合わせて使う主要オプションを以下の表に整理しました。

オプション構文 主な用途・確認できる内容 出力先・ログ確認方法
-TrustCheck / ファイル信頼性検証 対象バイナリのデジタル署名やDefenderエンジンから見た信頼ステータスを診断 コンソール出力および MpCmdRun.log
-Scan -ScanType 3 -File <Path> 特定ファイルまたはフォルダに対するピンポイントのマルウェア・振る舞いスキャン コンソール出力(found no threats 等)
-ValidateMapsConnection Microsoftクラウド保護ネットワーク(MAPS)へのHTTPS通信・証明書信頼性の疎通テスト ValidateMapsConnection successfully established
-GetFiles 障害解析用の診断ログ一式(イベントログ・レジストリ・署名情報)を MpSupportFiles.cab に収集 C:\ProgramData\Microsoft\Windows Defender\Support\

これらを組み合わせることで、「ファイル自体の署名や信頼性に問題があるのか」「クラウド保護(MAPS)との通信が切れているのか」をコマンドラインだけで正確に切り分けられます。


実践スクリプト:最新のMpCmdRun.exeを自動特定してチェックを実行する手順

MpCmdRun.exe をバッチやPowerShellスクリプトから呼び出す際、最もやってはいけないのが C:\ProgramData\Microsoft\Windows Defender\Platform\4.18.24080.9-0\MpCmdRun.exe のように バージョン番号をハードコーディングすること です。月例のプラットフォーム更新が適用された翌月にパスが存在しなくなり、スクリプトがエラーで停止します。

1. 最新プラットフォームのパスを動的に解決するPowerShell関数

どのような環境でも確実に最新バージョンの MpCmdRun.exe を呼び出せるラッパースクリプトを作成しました。

function Get-LatestMpCmdRunPath {
    # 1. Get-MpComputerStatus から現在のアクティブバージョンを取得
    $Status = Get-MpComputerStatus -ErrorAction SilentlyContinue
    if ($Status -and $Status.AMProductVersion) {
        $Candidate = "C:\ProgramData\Microsoft\Windows Defender\Platform\$($Status.AMProductVersion)\MpCmdRun.exe"
        if (Test-Path $Candidate) { return $Candidate }
    }

    # 2. Platformフォルダ配下を降順ソートして最新フォルダを取得(フォールバック)
    $LatestDir = Get-ChildItem -Path "C:\ProgramData\Microsoft\Windows Defender\Platform" -Directory -ErrorAction SilentlyContinue |
                 Sort-Object Name -Descending | Select-Object -First 1
    if ($LatestDir) {
        $Candidate = Join-Path $LatestDir.FullName "MpCmdRun.exe"
        if (Test-Path $Candidate) { return $Candidate }
    }

    # 3. 最終フォールバック(OS標準パス)
    return "C:\Program Files\Windows Defender\MpCmdRun.exe"
}

$MpCmdRunPath = Get-LatestMpCmdRunPath
Write-Host "使用する MpCmdRun.exe: $MpCmdRunPath" -ForegroundColor Cyan

2. バイナリの署名信頼性チェックとクラウド接続診断を一括実行する例

社内開発ツール(例:C:\Tools\MyCorpApp.exe)がDefenderに誤検知されたりブロックされたりする際、OS標準のデジタル署名検証(Get-AuthenticodeSignature)と MpCmdRun.exe による検査を一括で行うスクリプト例です。

$TargetFile = "C:\Windows\System32\notepad.exe" # 検証したい実行ファイルのパスを指定
$MpCmdRun   = Get-LatestMpCmdRunPath

Write-Host "=== 1. OSレベルのAuthenticodeデジタル署名・信頼チェーン検証 ===" -ForegroundColor Yellow
Get-AuthenticodeSignature -FilePath $TargetFile | Select-Object Status, StatusMessage, SignerCertificate | Format-List

Write-Host "=== 2. Defenderクラウド保護(MAPS)との信頼通信チェック ===" -ForegroundColor Yellow
& $MpCmdRun -ValidateMapsConnection

Write-Host "=== 3. 対象ファイルに対するカスタムスキャン・信頼性検証 ===" -ForegroundColor Yellow
& $MpCmdRun -Scan -ScanType 3 -File $TargetFile

社内ツールで Get-AuthenticodeSignature の Status が NotSigned(未署名)や UnknownError(ルート証明書未登録)になっている場合、Defenderのクラウド保護(Block at First Sight 等)やASRルールによって高確率で不審なファイルとして遮断されます。

3. 実行結果の詳細ログ「MpCmdRun.log」の確認場所

MpCmdRun.exe を実行した際の詳細な内部処理結果やエラーコードは、コンソール画面だけでなく以下のログファイルにリアルタイムで追記されます。

・一般ユーザーまたは管理者実行時:
  %TEMP%\MpCmdRun.log (C:\Users\<ユーザー名>\AppData\Local\Temp\MpCmdRun.log)

・SYSTEM権限(タスクスケジューラやIntuneスクリプト)での実行時:
  C:\Windows\Temp\MpCmdRun.log

コマンドがエラー終了(戻り値が 0 以外)になった場合は、必ずこの MpCmdRun.log の末尾数行を開くことで、具体的な失敗理由(hr = 0x8007... 等)を特定できます。


現場でハマる「MpCmdRun.exe」運用の2つの落とし穴

最後に、MpCmdRun.exe を実務で扱う際にエンジニアがよくハマる注意点を2つ紹介します。

落とし穴1:SYSTEM権限とユーザー権限で参照するログとプロキシ設定が異なる

管理者が自分のデスクトップ上で MpCmdRun.exe -ValidateMapsConnection を実行したときは成功するのに、タスクスケジューラ(SYSTEM 権限)から実行すると失敗するケースがあります。

これは、ユーザー権限ではブラウザと同じ「WinINETプロキシ設定」が使われるのに対し、SYSTEM 権限では「WinHTTPプロキシ設定」または機械アカウントの通信経路が使われるためです。MDEやDefenderの本番エンジン(MsMpEng.exe)は SYSTEM 権限で動いているため、正確な通信テストを行いたい場合は PsExec.exe -i -s cmd.exe 等で SYSTEM 権限に昇格してから MpCmdRun.exe を実行してください。

落とし穴2:改ざん防止が有効な環境での「-RemoveDefinitions」の制限

定義ファイルの破損を疑って MpCmdRun.exe -RemoveDefinitions -All(定義ファイルの全ロールバック)を実行しようとした際、改ざん防止(Tamper Protection)がオンになっていると、マルウェアによる定義ファイル消去攻撃とみなされて処理が制限される場合があります。

定義ファイルを安全に再適用したい場合は、全削除(-All)ではなく、直前の状態へ戻す -RemoveDefinitions(オプションなし)を実行した上で、続けて MpCmdRun.exe -SignatureUpdate を実行するのが安全な手順です。


よくある質問(FAQ)

Q: C:\Program Files\Windows Defender\MpCmdRun.exe と C:\ProgramData\... のどちらを使うべきですか?

A: 必ず C:\ProgramData\Microsoft\Windows Defender\Platform\<最新バージョン>\MpCmdRun.exe を使用してください。Program Files 配下のファイルはOS出荷時の古いバイナリであり、最新のコマンドラインスイッチに対応していなかったり、実行時に内部でリダイレクトエラーを起こしたりすることがあります。

Q: 社内アプリがDefenderに信頼されるようにするにはどうすればよいですか?

A: 最も確実な方法は、信頼された証明機関(または社内AD CSのルート証明書が全端末に配布されたプライベートCA)のコード署名証明書で .exe や .ps1 にデジタル署名(Authenticode署名)を付与することです。署名できないレガシーアプリの場合は、ハッシュ値やファイルパスによる除外設定、またはMDEの「証明書・ファイルインジケーター(IoC)の許可リスト」への登録を行ってください。

Q: MpCmdRun.exe の終了コード(戻り値 %ERRORLEVEL%)はどう判定すればよいですか?

A: 正常終了(脅威なし・通信成功)の場合は 0 が返ります。スキャンで脅威が検出された場合やエラーが発生した場合は 2(または非ゼロの値)が返ります。バッチファイル等で自動化している場合は、if %ERRORLEVEL% equ 0 で正常判定を行ってください。


まとめ

MpCmdRun.exe を使った信頼性チェックとコマンド運用の要点は以下の通りです。

  • -TrustCheck などの最新診断オプションを使うには、C:\ProgramData\Microsoft\Windows Defender\Platform\<最新バージョン>\ 配下の MpCmdRun.exe を呼び出す
  • プラットフォームのバージョン番号は毎月変わるため、スクリプトでは Get-MpComputerStatus 等を使って 動的にパスを取得 する
  • ファイル自体のデジタル署名(Get-AuthenticodeSignature)と、クラウド保護への疎通(-ValidateMapsConnection)をセットで確認すると切り分けが速い
  • コマンド実行時の詳細エラーは %TEMP%\MpCmdRun.log(SYSTEM実行時は C:\Windows\Temp\MpCmdRun.log)で確認する

GUIを開けないリモート調査や大量端末のヘルスチェックにおいて、MpCmdRun.exe の動的呼び出しスクリプトを1つ持っておくと現場対応が劇的に効率化します。

関連記事

免責規定

この記事で提供される情報は、一般的なガイダンスを目的としており、すべての環境やシステムでの動作を保証するものではありません。

OSのバージョンやリリースによっては、記載されている事が実行できない、または異なる結果をもたらす可能性があります。 また、会社所有のパソコン、スマホ、タブレットなどでは、ポリシーや権限によって実行できない場合があります。

この記事の情報を使用することによって生じる問題や結果について、筆者およびサイト管理者は責任を負いません。 すべての操作は自己責任で行ってください。

最後までお読みいただきありがとうございました。
またお会いしましょう!

著者のおすすめ教材 & note実践記事

公式教材 豪華4大特典付き

PowerShell実務スクリプト50選

AD・Windows運用・障害対応をコマンド一発で自動化する現役SEの実務スクリプト集。

最新note 毎日定時で帰る現場ハック

ググっても出ない実務テク20選

社内SE現場の地味で細かすぎる面倒作業を一撃で解消する実践テクニック集。