- はじめに
- 質問:Microsoft Defenderの定時スキャン時間をコマンドで変更したい
- 原因:Windowsの標準画面ではスキャンスケジュールを細かく管理しにくい
- 解決策:管理者権限のPowerShellでSet-MpPreferenceを実行する
- 先に知っておきたい注意点:クイックスキャンとフルスキャンで指定する時刻が違う
- 毎日12:30にクイックスキャンを実行する例
- 毎週水曜日12:30にフルスキャンを実行する例
- 設定後に確認するコマンド
- スキャン時間が指定どおりに始まらない場合の確認ポイント
- スクリプト化する例
- 質問:会社PCで設定しても反映されない、または勝手に戻るのはなぜか
- 原因:GPO、Intune、MDEなどでDefender設定が管理されている
- 原因:ポリシーの優先順位ではPowerShellが下位になりやすい
- 解決策:まず現在の設定を確認する
- 解決策:会社PCでは情シス側の管理設定を確認する
- 注意:除外設定を触る場合はSetよりAddを意識する
- 現場でのおすすめ確認手順
- コマンドまとめ
- まとめ
- 免責規定
はじめに
Windowsの標準機能である Microsoft Defender Antivirus には、定期的にウイルススキャンを実行する「スケジュールスキャン」があります。
ただ、Windowsの設定画面から細かいスキャン時刻や曜日を指定しようとすると、少し分かりにくいです。
特にシステム運用の現場では、
「毎日昼休みにクイックスキャンしたい」
「毎週水曜日の夜にフルスキャンしたい」
「サーバーや業務端末のスキャン時間をコマンドでそろえたい」
「設定したはずなのに、会社PCでは反映されない」
という場面があります。
このようなときは、PowerShellの Set-MpPreference と Get-MpPreference を使うと、Microsoft Defenderのスキャンスケジュールをコマンドで確認・変更できます。
Microsoft公式ドキュメントでも、スケジュールスキャンの構成には Set-MpPreference を使用すると説明されています。(Microsoft Learn)
質問:Microsoft Defenderの定時スキャン時間をコマンドで変更したい
今回やりたいことは、次の内容です。
Microsoft Defenderのスケジュールスキャンを実行する時間を、PowerShellコマンドで設定・変更したい。
たとえば、次のような設定です。
毎日 12:30 にクイックスキャンを実行したい
または、
毎週水曜日 12:30 にフルスキャンを実行したい
Windowsの画面操作ではなく、コマンドで設定できるようにしておくと、複数台のPCやサーバーに展開するときにも便利です。
原因:Windowsの標準画面ではスキャンスケジュールを細かく管理しにくい
Microsoft Defenderのスキャン自体は、Windowsの標準機能として利用できます。
しかし、スキャンの種類、曜日、時刻、ランダム化、アイドル時だけ実行するかどうかなどを細かく制御したい場合、画面操作だけでは分かりにくいことがあります。
そこで使うのが、PowerShellのDefenderモジュールです。
Microsoft Defender Antivirusでは、Set-MpPreference でスキャンや更新などの設定を変更でき、Get-MpPreference で現在の設定を確認できます。(Microsoft Learn)
解決策:管理者権限のPowerShellでSet-MpPreferenceを実行する
まず、PowerShellを管理者として実行します。
スタートメニューで「PowerShell」と検索し、右クリックして「管理者として実行」を選びます。
MicrosoftのDefenderコマンドレット一覧でも、Set-MpPreference などの設定変更系コマンドは、管理者として開いたPowerShellで実行する必要があると説明されています。(Microsoft Learn)
先に知っておきたい注意点:クイックスキャンとフルスキャンで指定する時刻が違う
ここは少しハマりやすいポイントです。
Microsoft Defenderのスケジュールスキャンには、主に次の設定があります。
| 目的 | 使用する主なパラメーター |
|---|---|
| スキャン種別を指定する | -ScanParameters |
| 実行する曜日を指定する | -ScanScheduleDay |
| クイックスキャンの時刻を指定する | -ScanScheduleQuickScanTime |
| フルスキャンの時刻を指定する | -ScanScheduleTime |
公式ドキュメントでは、ScanParameters はスキャン種類、ScanScheduleDay は曜日、ScanScheduleQuickScanTime はクイックスキャンの時刻、ScanScheduleTime はフルスキャンの時刻として説明されています。(Microsoft Learn)
つまり、単純に、
Set-MpPreference -ScanScheduleTime "12:30:00"
と書くと、主にフルスキャン側の時刻設定として考える必要があります。
毎日のクイックスキャンを設定したい場合は、次のように -ScanScheduleQuickScanTime を使う方が分かりやすいです。
毎日12:30にクイックスキャンを実行する例
毎日12:30にクイックスキャンを実行したい場合は、次のように設定します。
Set-MpPreference -ScanScheduleQuickScanTime 12:30:00 -ScanScheduleDay Everyday
数値で指定する場合は、毎日は 0 です。
Set-MpPreference -ScanScheduleQuickScanTime 12:30:00 -ScanScheduleDay 0
ScanScheduleDay の値は、0 が毎日、1 が日曜日、2 が月曜日、3 が火曜日、4 が水曜日、5 が木曜日、6 が金曜日、7 が土曜日、8 が実行しない、という意味です。(Microsoft Learn)
毎週水曜日12:30にフルスキャンを実行する例
毎週水曜日にフルスキャンを実行したい場合は、次のように指定します。
Set-MpPreference -ScanParameters FullScan -ScanScheduleDay Wednesday -ScanScheduleTime 12:30:00
数値で指定するなら、水曜日は 4 です。
Set-MpPreference -ScanParameters 2 -ScanScheduleDay 4 -ScanScheduleTime 12:30:00
ScanParameters は、1 または QuickScan がクイックスキャン、2 または FullScan がフルスキャンです。(Microsoft Learn)
設定後に確認するコマンド
設定しただけで終わらせず、必ず現在の設定を確認します。
Get-MpPreference
ただし、そのまま実行すると表示項目が多いので、必要な項目だけ確認すると見やすいです。
Get-MpPreference | Select-Object ScanParameters, ScanScheduleDay, ScanScheduleQuickScanTime, ScanScheduleTime
または、変数に入れて確認します。
$pref = Get-MpPreference
$pref.ScanScheduleDay
$pref.ScanScheduleQuickScanTime
$pref.ScanScheduleTime
$pref.ScanParameters
Get-MpPreference は、Windows Defenderの設定内容を返すコマンドレットです。
公式ドキュメントにも、ScanScheduleDay などのプロパティを確認する例が掲載されています。(Microsoft Learn)
スキャン時間が指定どおりに始まらない場合の確認ポイント
設定した時刻になっても、ピッタリその時間にスキャンが始まらないことがあります。
その理由のひとつが、スケジュール実行時刻のランダム化です。
Microsoft Defenderには、複数端末が同時にスキャンを開始しないように、スケジュールされたタスクの開始時刻をずらす設定があります。
公式ドキュメントでは、ランダム化された開始時刻により、複数の仮想マシンなどが同時にスケジュールタスクを開始するのを防げると説明されています。(Microsoft Learn)
検証目的で、なるべく指定時刻どおりに動かしたい場合は、次のような設定を使います。
Set-MpPreference -RandomizeScheduleTaskTimes $false
さらに、アイドル時だけではなく、使用中でもスキャンを実行したい場合は次の設定もあります。
Set-MpPreference -ScanOnlyIfIdleEnabled $false
ただし、業務端末ではスキャン時間を完全にそろえると、CPU負荷やディスク負荷が集中する可能性があります。
組織全体で設定する場合は、あえてランダム化を残す判断もあります。
スクリプト化する例
複数台で同じ設定を使うなら、次のようにスクリプト化しておくと便利です。
# Microsoft Defender スケジュールスキャン設定
# 毎日 12:30 にクイックスキャンを実行
Set-MpPreference `
-ScanParameters QuickScan `
-ScanScheduleDay Everyday `
-ScanScheduleQuickScanTime 12:30:00 `
-RandomizeScheduleTaskTimes $false `
-ScanOnlyIfIdleEnabled $false
# 設定確認
Get-MpPreference | Select-Object `
ScanParameters,
ScanScheduleDay,
ScanScheduleQuickScanTime,
ScanScheduleTime,
RandomizeScheduleTaskTimes,
ScanOnlyIfIdleEnabled
このスクリプトを管理者権限のPowerShellで実行すれば、設定変更と確認をまとめて行えます。
質問:会社PCで設定しても反映されない、または勝手に戻るのはなぜか
ここからが、システム運用の現場でよくある話です。
個人PCではコマンドが通るのに、会社PCでは次のようなことがあります。
Set-MpPreference を実行しても設定が変わらない
または、
一度変わったように見えたのに、しばらくすると元に戻る
この場合、原因はコマンドの書き方ではなく、組織の管理ポリシーである可能性があります。
原因:GPO、Intune、MDEなどでDefender設定が管理されている
会社PCでは、Microsoft Defender Antivirusの設定が個別端末ではなく、組織側で管理されていることがあります。
代表的なのは、次のような管理方法です。
- GPO、グループポリシー
- Microsoft Intune
- Microsoft Defender for Endpoint
- Microsoft Configuration Manager
- セキュリティ設定管理
Microsoft公式ドキュメントでは、PowerShellで行った変更はローカル端末の設定に反映される一方で、Microsoft Defender for Endpoint、Intune、Configuration Manager、グループポリシーなどで配布されたポリシーにより上書きされる可能性があると説明されています。(Microsoft Learn)
つまり、会社PCで Set-MpPreference を実行しても、上位の管理ポリシーがある場合は、そちらが優先されることがあります。
原因:ポリシーの優先順位ではPowerShellが下位になりやすい
Microsoft Defender Antivirusの設定が複数の管理方法で構成されている場合、どの設定が優先されるかを確認する必要があります。
Microsoftのトラブルシューティング情報では、一般的な優先順位として、Microsoft Defender for Endpointのセキュリティ設定管理、GPO、Configuration Manager、IntuneなどがPowerShellより上位にあり、PowerShell、MpCmdRun、WMIによる設定は下位に位置づけられています。(Microsoft Learn)
そのため、会社PCでは次のような現象が起きます。
Set-MpPreference で設定した
↓
一時的には変更されたように見える
↓
GPOやIntuneの同期で元に戻る
これは異常ではなく、組織の管理設定が正しく適用されている結果である場合があります。
解決策:まず現在の設定を確認する
最初に、現在の設定を確認します。
Get-MpPreference | Select-Object `
ScanParameters,
ScanScheduleDay,
ScanScheduleQuickScanTime,
ScanScheduleTime,
RandomizeScheduleTaskTimes,
ScanOnlyIfIdleEnabled
さらに、Defender自体の状態も確認したい場合は、次のコマンドも使えます。
Get-MpComputerStatus
Get-MpComputerStatus は、マルウェア対策ソフトウェアの状態を取得するコマンドレットとしてDefenderモジュールに含まれています。(Microsoft Learn)
解決策:会社PCでは情シス側の管理設定を確認する
会社PCで設定が反映されない場合、利用者がローカルで無理に変更しようとするより、情シスや端末管理者に確認するのが正解です。
確認するときは、次のように伝えると話が早いです。
Microsoft Defenderのスケジュールスキャン時刻を変更したいのですが、
GPO、Intune、Microsoft Defender for Endpoint側で制御されていますか?
ローカルの Set-MpPreference で変更しても、ポリシーで戻るようです。
管理者側で設定する場合は、個別PCでコマンドを実行するのではなく、IntuneやMicrosoft Defender for Endpointなどの管理画面から一括配信する形が現実的です。
Microsoft公式ドキュメントでも、Intuneを使ってMicrosoft Defender Antivirusの設定を構成できると説明されています。(Microsoft Learn)
注意:除外設定を触る場合はSetよりAddを意識する
Microsoft Defenderでは、スキャン除外フォルダや除外プロセスを設定することもあります。
ただし、組織環境では、すでに情シス側で除外設定が入っている場合があります。
その状態で設定を上書きしてしまうと、必要な除外設定を消してしまうおそれがあります。
除外設定のような複数値を持つ項目に追加する場合は、Add-MpPreference を使う考え方が重要です。MicrosoftのDefenderモジュール説明では、Add-MpPreference は除外や保護フォルダーなどの複数値プロパティに値を追加するコマンドレットとして説明されています。(Microsoft Learn)
たとえば、除外パスを追加する場合は次のようにします。
Add-MpPreference -ExclusionPath "C:\Work\Temp"
一方で、既存設定を置き換えるような操作は、組織環境では慎重に扱うべきです。
現場でのおすすめ確認手順
Microsoft Defenderのスケジュールスキャン時刻を変更したい場合は、次の順番で確認すると安全です。
1. 管理者PowerShellを起動する
通常権限では設定変更できないことがあります。
Start-Process powershell -Verb runAs
または、スタートメニューからPowerShellを右クリックして「管理者として実行」を選びます。
2. 現在の設定を確認する
Get-MpPreference | Select-Object `
ScanParameters,
ScanScheduleDay,
ScanScheduleQuickScanTime,
ScanScheduleTime
3. クイックスキャンかフルスキャンか決める
クイックスキャンなら、主に次を使います。
-ScanScheduleQuickScanTime
フルスキャンなら、主に次を使います。
-ScanParameters FullScan
-ScanScheduleTime
4. 曜日を指定する
例として、毎日なら次のどちらかです。
-ScanScheduleDay Everyday
または、
-ScanScheduleDay 0
水曜日なら次のどちらかです。
-ScanScheduleDay Wednesday
または、
-ScanScheduleDay 4
5. 設定後にもう一度確認する
Get-MpPreference | Select-Object `
ScanParameters,
ScanScheduleDay,
ScanScheduleQuickScanTime,
ScanScheduleTime,
RandomizeScheduleTaskTimes,
ScanOnlyIfIdleEnabled
6. 会社PCならポリシー管理を確認する
設定が戻る場合は、GPO、Intune、MDEなどで管理されている可能性があります。
コマンドまとめ
毎日12:30にクイックスキャン
Set-MpPreference -ScanScheduleDay Everyday -ScanScheduleQuickScanTime 12:30:00
毎週水曜日12:30にフルスキャン
Set-MpPreference -ScanParameters FullScan -ScanScheduleDay Wednesday -ScanScheduleTime 12:30:00
設定確認
Get-MpPreference | Select-Object `
ScanParameters,
ScanScheduleDay,
ScanScheduleQuickScanTime,
ScanScheduleTime
ランダム化を無効にする
Set-MpPreference -RandomizeScheduleTaskTimes $false
アイドル時だけ実行を無効にする
Set-MpPreference -ScanOnlyIfIdleEnabled $false
除外フォルダを追加する
Add-MpPreference -ExclusionPath "C:\Work\Temp"
まとめ
Microsoft Defenderの定時スキャン時間は、PowerShellの Set-MpPreference で変更できます。
ただし、クイックスキャンとフルスキャンでは、見るべきパラメーターが少し違います。
クイックスキャンの時刻は、
-ScanScheduleQuickScanTime
フルスキャンの時刻は、
-ScanScheduleTime
を使うのが基本です。
また、曜日は -ScanScheduleDay で指定できます。
会社PCで設定が反映されない、または勝手に戻る場合は、GPO、Intune、Microsoft Defender for Endpointなどの管理ポリシーが優先されている可能性があります。
その場合、端末側で無理に変更するのではなく、情シス側の管理コンソールで設定するのが正解です。
免責規定
この記事で提供される情報は、一般的なガイダンスを目的としており、すべての環境やシステムでの動作を保証するものではありません。
OSのバージョンやリリースによっては、記載されている事が実行できない、または異なる結果をもたらす可能性があります。
また、会社所有のパソコン、スマホ、タブレットなどでは、ポリシーや権限によって実行できない場合があります。
この記事の情報を使用することによって生じる問題や結果について、筆者およびサイト管理者は責任を負いません。
すべての操作は自己責任で行ってください。
もし、記事の中で間違いやご指摘があればコメントを頂けると大変ありがたいです。
最後までお読みいただきありがとうございました。
またお会いしましょう!

コメント