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