Guide

Gestire Microsoft Defender Antivirus con PowerShell: cmdlet pratici per sysadmin

Dario Fadda Giugno 26, 2026

Microsoft Defender Antivirus è il componente di sicurezza integrato in Windows 10, Windows 11 e Windows Server 2016 e successivi. Spesso gestito tramite interfaccia grafica o Group Policy, offre però un set completo di cmdlet PowerShell che permettono una gestione programmatica potente, particolarmente utile in ambienti server headless, pipeline di automazione e script di provisioning.

In questo articolo esploriamo i cmdlet principali, con esempi pratici di utilizzo per la gestione quotidiana da parte di amministratori di sistema.

Prerequisiti e Accesso

I cmdlet di Defender sono disponibili per impostazione predefinita su Windows 10/11 e Windows Server 2016+. Per usarli è necessario aprire PowerShell come amministratore.

# Verifica che il modulo Defender sia disponibile
Get-Module -ListAvailable -Name Defender

# Per visualizzare la documentazione completa di qualsiasi cmdlet
Get-Help <cmdlet> -Online

Nota importante: le modifiche apportate via PowerShell agiscono sulle impostazioni locali del dispositivo. Politiche distribuite tramite Microsoft Intune, Group Policy o Configuration Manager possono sovrascriverle. Pianificare di conseguenza nelle architetture gestite centralmente.

Verificare lo Stato della Protezione

Il punto di partenza è sempre capire in che stato si trova il sistema.

# Stato complessivo di Defender Antivirus
Get-MpComputerStatus

# Output selettivo: solo i campi più rilevanti
Get-MpComputerStatus | Select-Object `
  AntivirusEnabled, `
  RealTimeProtectionEnabled, `
  BehaviorMonitorEnabled, `
  IoavProtectionEnabled, `
  NISEnabled, `
  QuickScanAge, `
  FullScanAge, `
  AntivirusSignatureLastUpdated, `
  AntivirusSignatureVersion

QuickScanAge e FullScanAge indicano da quanti giorni non viene eseguita una scansione rapida o completa. Un valore molto alto può indicare un problema di pianificazione. AntivirusSignatureLastUpdated è critico: firme obsolete riducono drasticamente l’efficacia della protezione.

Configurare le Preferenze con Set-MpPreference

Set-MpPreference è il cmdlet centrale per la configurazione. Permette di intervenire su centinaia di parametri.

Protezione in Tempo Reale

# Abilitare la protezione in tempo reale (default: abilitata)
Set-MpPreference -DisableRealtimeMonitoring $false

# Abilitare il monitoraggio comportamentale
Set-MpPreference -DisableBehaviorMonitoring $false

# Abilitare la protezione cloud-delivered (MAPS)
Set-MpPreference -MAPSReporting Advanced
Set-MpPreference -SubmitSamplesConsent SendAllSamples

Gestire le Esclusioni

Le esclusioni sono necessarie in ambienti dove certi processi o directory generano falsi positivi, ma vanno gestite con attenzione: sono uno dei vettori sfruttati dagli attaccanti (come visto nel caso TonRAT).

# Aggiungere un percorso alle esclusioni
Add-MpPreference -ExclusionPath "C:\AppData\MyApp\cache"

# Aggiungere un processo alle esclusioni
Add-MpPreference -ExclusionProcess "msbuild.exe"

# Aggiungere un’estensione file alle esclusioni
Add-MpPreference -ExclusionExtension ".log"

# Verificare le esclusioni configurate
Get-MpPreference | Select-Object ExclusionPath, ExclusionProcess, ExclusionExtension

# Rimuovere una singola esclusione
Remove-MpPreference -ExclusionPath "C:\AppData\MyApp\cache"

Best practice: documentare ogni esclusione con il motivo tecnico e revisionarle periodicamente. Un’esclusione dimenticata è una superficie di attacco aperta.

Pianificazione delle Scansioni

# Impostare una scansione rapida giornaliera alle 03:00
Set-MpPreference -ScanScheduleDay Everyday
Set-MpPreference -ScanScheduleTime 03:00:00

# Impostare una scansione completa settimanale alla domenica alle 02:00
Set-MpPreference -ScanParameters FullScan
Set-MpPreference -ScanScheduleDay Sunday
Set-MpPreference -ScanScheduleTime 02:00:00

# Abilitare la scansione dei file email e degli archivi compressi
Set-MpPreference -DisableEmailScanning $false
Set-MpPreference -DisableArchiveScanning $false

Aggiornare le Definizioni Antivirus

# Aggiornare le signature immediatamente
Update-MpSignature

# Aggiornare da un percorso UNC condiviso (es. WSUS o share locale)
Update-MpSignature -UpdateSource InternalDefinitionUpdateServer

# Verificare la versione corrente delle signature
(Get-MpComputerStatus).AntivirusSignatureVersion
(Get-MpComputerStatus).AntivirusSignatureLastUpdated

In ambienti con dispositivi offline o in reti segmentate, la distribuzione delle signature tramite share UNC o WSUS è essenziale. Update-MpSignature supporta diversi source: MicrosoftUpdateServer, MMPC, InternalDefinitionUpdateServer, FileShares.

Avviare Scansioni Manuali

# Scansione rapida
Start-MpScan -ScanType QuickScan

# Scansione completa
Start-MpScan -ScanType FullScan

# Scansione di un percorso specifico (custom scan)
Start-MpScan -ScanType CustomScan -ScanPath "D:\Downloads"

# Avviare in modo asincrono (non blocca la shell)
Start-MpScan -ScanType QuickScan -AsJob

Rilevare e Gestire le Minacce

# Visualizzare le minacce rilevate attualmente attive
Get-MpThreat

# Visualizzare lo storico delle rilevazioni (incluse quelle già gestite)
Get-MpThreatDetection

# Output dettagliato di una singola minaccia per ID
Get-MpThreat | Where-Object { $_.ThreatID -eq 12345 } | Format-List *

# Rimuovere tutte le minacce attive in quarantena
Remove-MpThreat

Performance Analyzer: Individuare i Colli di Bottiglia

Se Defender causa rallentamenti, il Performance Analyzer integrato aiuta a identificare quali file, processi o estensioni impattano maggiormente sui tempi di scansione:

# Avviare la raccolta dati per 60 secondi
New-MpPerformanceRecording -RecordTo "C:\Temp\DefenderPerf.etl"

# Analizzare i risultati: top 10 file più lenti da scansionare
Get-MpPerformanceReport -Path "C:\Temp\DefenderPerf.etl" `
  -TopFiles 10 `
  -TopScansPerFile 5 `
  -TopProcessesPerFile 5

Automazione: Script di Audit Difensivo

Uno script di audit rapido da eseguire periodicamente su ogni macchina o tramite PSRemoting su più host:

function Get-DefenderAudit {
  $status = Get-MpComputerStatus
  $prefs  = Get-MpPreference

  [PSCustomObject]@{
    ComputerName            = $env:COMPUTERNAME
    AVEnabled               = $status.AntivirusEnabled
    RealTimeProtection      = $status.RealTimeProtectionEnabled
    SignatureAge_Days       = ((Get-Date) - $status.AntivirusSignatureLastUpdated).Days
    SignatureVersion        = $status.AntivirusSignatureVersion
    LastQuickScan_Days      = $status.QuickScanAge
    LastFullScan_Days       = $status.FullScanAge
    ExclusionPathCount      = @($prefs.ExclusionPath).Count
    ExclusionProcessCount   = @($prefs.ExclusionProcess).Count
    CloudProtection         = $prefs.MAPSReporting
  }
}

# Esecuzione locale
Get-DefenderAudit | Format-List

# Esecuzione remota su più host
$servers = @("SRV01", "SRV02", "SRV03")
Invoke-Command -ComputerName $servers -ScriptBlock ${Function:Get-DefenderAudit} |
  Sort-Object SignatureAge_Days -Descending |
  Format-Table -AutoSize

Conclusione

I cmdlet PowerShell di Microsoft Defender Antivirus offrono un controllo granulare e scriptabile su ogni aspetto della protezione, rendendoli uno strumento fondamentale per i sysadmin che gestiscono flotte di macchine Windows. Integrarli in pipeline di provisioning, script di audit periodici e runbook di incident response è una pratica che migliora significativamente la postura di sicurezza senza dipendere da interfacce grafiche.

Ricorda: le modifiche via PowerShell sono locali e possono essere sovrascritte da GPO o Intune. In ambienti gestiti centralmente, usa PowerShell per audit e diagnostica, e riserva la configurazione permanente agli strumenti di management centralizzato.

Fonte: 4sysops.com | Documentazione ufficiale: Microsoft Learn

💬 Unisciti alla discussione!


Questo è un blog del Fediverso: puoi trovare quindi questo articolo ovunque con @blog@spcnet.it e ogni commento/risposta apparirà qui sotto.

Se vuoi commentare su Gestire Microsoft Defender Antivirus con PowerShell: cmdlet pratici per sysadmin, utilizza la discussione sul Forum.
Condividi la tua esperienza, confrontati con altri professionisti e approfondisci i dettagli tecnici nel nostro 👉 forum community