Add files via upload
This commit is contained in:
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"
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user