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.

Antivirus Status auslesen PowerShell
Johannes
 

Click Here to Leave a Comment Below 0 comments