Antivirus Status auslesen mit PowerShell
In einem früheren Post haben wir darüber berichtet, wie man eine Liste der installierten Antivirus-Produkte mit PowerShell auslesen kann. In diesem Beitrag wurde erwähnt, dass der productState hier besonders wichtig ist. Der productState gibt Auskunft, ob die Antivirus Software aktiv und up-to-date ist. Mit PowerShell lässt sich der Antivirus Status auslesen und leserlich darstellen.
Antivirus Status auslesen mit PowerShell
Um den Status der installierten Antivirus Software zu ermitteln, verwendet man am Besten PowerShell. Bei dem Status wird unterschieden zwischen dem ProductState und dem SignatureStatus. Für manche ist auch der Owner interessant.
Ausgelesen wird die installierte Antivirus-Software mit folgendem PowerShell Befehl:
Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct
Als Ausgabe erhält man den productState als Dezimalzahl. Dieser ProductState gibt Auskunft über den Status zum Produkt, aber auch über den aktuellen Status der Virendefinitionen. Die Dezimalzahl muss aber erst in eine Hexadezimale Zahl konvertiert werden, um den Status mit PowerShell zu ermitteln.
ProductState
Der ProductState gibt Auskunft über den Status der Antivirus Software. Hier gibt es folgende Status:
- Off = 0x0000
- On = 0x1000
- Snoozed = 0x2000
- Expired = 0x3000
SignatureStatus
Auch der Status der Virendefinitionen ist sehr wichtig. Hier gibt es nur zwei verschiedene Status:
- UpToDate = 0x00
- OutOfDate = 0x10
ProductOwner
Jede Antivirus Software hat einen ProductOwner. Hier wird aber nur zwischen Windows und Nicht-Microsoft unterschieden:
- NonMs = 0x000
- Windows = 0x100
AV Status ermitteln mit PowerShell
Setzt man die einzelnen Code-Schnippsel zusammen, so kann man den Product Status, Definition-Status und den Product Owner der installierten Antivirus Software ermitteln. Durch die Definition von Flags, kann der Status im Script leserlich dargestellt werden.
# Produkt Status Flags [Flags()] enum ProductState { Off = 0x0000 On = 0x1000 Snoozed = 0x2000 Expired = 0x3000 } # Signature Status Flags [Flags()] enum SignatureStatus { UpToDate = 0x00 OutOfDate = 0x10 } # Product Owner Flags [Flags()] enum ProductOwner { NotMS = 0x000 Windows = 0x100 } [Flags()] enum ProductFlags { SignatureStatus = 0x00F0 ProductOwner = 0x0F00 ProductState = 0xF000 } # Get installed AV software $info = Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct # if more AV installed... foreach ($av in $info){ # get status in decimal $state = $av.productState # convert decimal to hex $state = '0x{0:x}' -f $state # decode flags [PSCustomObject]@{ Name = $av.displayName ProductStatus = [ProductState]($state -band [ProductFlags]::ProductState) SignatureStatus = [SignatureStatus]($state -band [ProductFlags]::SignatureStatus) Owner = [ProductOwner]($state -band [ProductFlags]::ProductOwner) } }
Als Ausgabe des PowerShell Befehls erhält man den Status der Antivirus Software. Wenn mehrere installiert sind, wird in der Tabelle (wie im Bild zu sehen) zwei AV-Produkte angezeigt. Relevant sind meiner Meinung nach nur der Status der Software und der Status der Virendefinitionen.