Add files via upload

This commit is contained in:
Belim authored and GitHub committed 2025-09-08 21:06:43 +02:00
1 parent 21fec64a2a
commit 24a8820904
1 file changed
+102
@@ -0,0 +1,102 @@
# Microsoft Defender maintenance (update signatures, repair, show status)
# Host: console
# Options: Update signatures; Repair definitions and update; Show Defender status
param([string]$choice)
function Get-MpCmdPath {
$candidates = @(
"$env:ProgramFiles\Windows Defender\MpCmdRun.exe",
"$env:ProgramFiles\Microsoft Defender\MpCmdRun.exe"
)
foreach ($p in $candidates) { if (Test-Path $p) { return $p } }
return $null
}
function Is-Admin {
$id = [Security.Principal.WindowsIdentity]::GetCurrent()
$pr = New-Object Security.Principal.WindowsPrincipal($id)
return $pr.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
function Show-Status {
try {
$s = Get-MpComputerStatus
Write-Output "=== Microsoft Defender Status ==="
Write-Output ("Engine version: {0}" -f $s.AMEngineVersion)
Write-Output ("Platform version: {0}" -f $s.AMProductVersion)
Write-Output ("AV signature version: {0}" -f $s.AntivirusSignatureVersion)
Write-Output ("AV signature last update: {0}" -f $s.AntivirusSignatureLastUpdated)
Write-Output ("AS signature version: {0}" -f $s.AntispywareSignatureVersion)
Write-Output ("Real-time protection: {0}" -f $s.RealTimeProtectionEnabled)
Write-Output ("NIS enabled: {0}" -f $s.NISEnabled)
Write-Output ("Service enabled: {0}" -f $s.AMServiceEnabled)
} catch {
Write-Output "✘ Failed to read Defender status: $($_.Exception.Message)"
}
}
switch ($choice) {
"Update signatures" {
if (-not (Is-Admin)) {
Write-Output "ℹ Tip: Run as Administrator for the most reliable results."
}
try {
# Primary: PowerShell cmdlet
Update-MpSignature -ErrorAction Stop
Write-Output "✔ Signatures updated via Update-MpSignature."
} catch {
# Fallback: MpCmdRun
$mp = Get-MpCmdPath
if ($mp) {
Write-Output "↻ Falling back to MpCmdRun.exe ..."
& $mp -SignatureUpdate | Out-String | Write-Output
} else {
Write-Output "✘ MpCmdRun.exe not found and Update-MpSignature failed."
}
}
Show-Status
}
"Repair definitions and update" {
if (-not (Is-Admin)) {
Write-Output "✘ Please run this action as Administrator (required to reset definitions)."
break
}
$mp = Get-MpCmdPath
if (-not $mp) {
Write-Output "✘ MpCmdRun.exe not found."
break
}
try {
Write-Output "↻ Removing all definitions (repair) ..."
& $mp -RemoveDefinitions -All | Out-String | Write-Output
} catch {
Write-Output "✘ Failed to remove definitions: $($_.Exception.Message)"
}
try {
Write-Output "↻ Updating signatures ..."
Update-MpSignature -ErrorAction Stop
Write-Output "✔ Signatures updated."
} catch {
Write-Output "↻ Fallback: MpCmdRun signature update ..."
& $mp -SignatureUpdate | Out-String | Write-Output
}
Show-Status
}
"Show Defender status" {
Show-Status
}
default {
Write-Output "✘ Unknown option: $choice"
}
}