Hier mal wieder was für die Community.
Da öfters mal die Frage kam, wie man alle PCs / Server überprüfen könnte so Kaspersky installiert ist, haben wir dieses Script geschrieben.
Das Script „AV Search and Detect“ sucht nach Antiviren Programmen auf dem Clients / Servern
Es können 2 Parameter angeeben werden.
AV Suchstring wie z.B: Kaspersky, Defender, Windows, Avira, GData usw. Der Rest wird automatisch durch Wildcards ersetzt.
Der Zweite Parameter ist Warnung oder Fehler 1 = Fehler 2 = Warnung
Falls kein Antivirus installiert ist wird eine Warnng ausgegeben.
Das Script kann jederzeit angepasst werden, allerdings muss das Copyright bestehen bleiben.
<###################################################################### # # # # # # # Herausgeber: Wallmeyer & Wallmeyer GbR # # Website: https://www.coswa.de # # Telefon: 05921-3083753 # # E-Mail: info@coswa.de # # # # # # # # # #######################################################################> # # Parameter für manuelle Tests ("<" am Anfang entfernen) <# $detect ="Kaspersky" #Searchstring $detectAction = 2 # 1 = Fehler 2 = Warnung #> $script_name = "AV Search and Detect Community" $script_version = "1.0" $script_cr = "Wallmeyer & Wallmeyer GbR" $scriptstand = "23.03.2022 - 10:43 Uhr" ######################## Feste Parameter ########################### $ErrorActionPreference = "stop" $wrapzeichen = 90 # Automatischer Zeilenumbruch nach x Zeichen [int32]$fehler = 0 [string]$global:ausgabe = "" [string]$global:Fehlerausgabe = "" $computer = $env:COMPUTERNAME ######################## Variable Parameter ########################### ######################### IMPORT der benötigten Module######################## ######################### Funktionen für die Ausgabe ######################### function snormal { param ($vt, [int]$AnzAbsatz = 1) if (!$global:ausgabe) { $global:ausgabe += "######### Erfolgreiche Job Informationen ######### `n`n" } $global:ausgabe += ("$vt " + ("`n" * $AnzAbsatz)) } function sfehler { param ($vt, [int]$AnzAbsatz = 1) if (!$global:Fehlerausgabe) { $global:Fehlerausgabe += "######### Fehler und Warnung Informationen ######### `n`n" } $global:Fehlerausgabe += ("$vt " + ("`n" * $AnzAbsatz)) $global:fehler ++ } Function Concat { Param ([switch]$Newlines, $Wrap, $Begin = '', $End = '', $Join = '') Begin { if ($Newlines) { $Join = [System.Environment]::NewLine } $output = New-Object System.Text.StringBuilder $deliniate = $False if (!$Wrap) { $output.Append($Begin) | Out-Null } elseif ($Wrap -is [string]) { $output.Append(($End = $Wrap)) | Out-Null } else { $output.Append($Wrap[0]) | Out-Null $End = $Wrap[1] } } Process { if (!($_ = [string]$_).length) { } elseif ($deliniate) { $output.Append($deliniate) | Out-Null $output.Append($_) | Out-Null } else { $deliniate = $Join $output.Append($_) | Out-Null } } End { $output.Append($End).ToString() } } $_WRAP = @{'' = "`$1$([System.Environment]::NewLine)" } Function _Wrap { Param ($Length, $Step, $Force) $wrap = $Force -join '' -replace '\\|]|-', '\$0' $chars = "^\n\r$wrap" $preExtra = "[$chars\S]*" $postExtra = "[^\s$wrap]" $chars = "[$chars]" $postChars = "$preExtra$postExtra" if ($wrap) { $wrap = "[$wrap]" $wrap $wrap = "$wrap(?=\S)" $chars = "$chars|$wrap" $postChars = "$postChars|$preExtra$wrap" } for ( ($extra = 0), ($next = $NULL), ($prev = $NULL); ($next = $Length - $Step) -gt 0 -and ($prev = $extra + $Step); ($Length = $next), ($extra = $prev) ) { "(?:$chars){$next,$Length}(?=(?:$postChars){$extra,$prev})" } } Function Wrap { Param ( [int]$Length = 80, [int]$Step = 5, [char[]]$Force, [parameter(Position = 0)][string]$Text ) $key = "$Length $Step $Force" $wrap = $_WRAP[$key] if (!$wrap) { $wrap = $_WRAP[$key] = _Wrap ` -Length $Length ` -Step $Step ` -Force ($Force -join '') ` | Concat -Join '|' -Wrap '(', ')(?:[^\n\r\S])+' } return $Text -replace $wrap, $_WRAP[''] } $global:errorcode = 0 $global:exitvalue = 0 function serrorcode ($errorcode_new) { if ($global:errorcode -eq 1) { return $global:errorcode } else { if ($errorcode_new -eq $global:errorcode -and $global:errorcode -eq 0) { } elseif ($errorcode_new -eq 1) { $global:errorcode = $errorcode_new } elseif ($errorcode_new -eq 2) { $global:errorcode = $errorcode_new } elseif ($errorcode_new -eq 3 -and $global:errorcode -lt 2) { $global:errorcode = $errorcode_new } return $global:errorcode } } function sresult() { if ($global:errorcode -eq 1) { $resultstring = "Notfall9999 - Der Status ist nicht optimal!" $global:exitvalue = 1001 } elseif ($global:errorcode -eq 2) { $resultstring = "Mittel8888 - Der Status ist nicht optimal!" $global:exitvalue = 1002 } elseif ($global:errorcode -eq 3) { $resultstring = "Info7777 - Der Status ist nicht optimal!" $global:exitvalue = 1002 } elseif ($global:errorcode -eq 0) { $resultstring = "OK - Der Status ist optimal." $global:exitvalue = 0 } return $resultstring } ######################### Skript ######################### snormal "`n`n" snormal "############################# Version Informationen #############################" snormal "$script_name" snormal "Skriptstand: $scriptstand" snormal "Version: $script_version" snormal "Copyright: $script_cr" $fehler = 0 serrorcode 0 | Out-Null $SearchTerm = "*"+$detect+"*" $wmiQuery = "SELECT * FROM AntiVirusProduct" try{ $AntivirusProduct = Get-WmiObject -Namespace "root\SecurityCenter2" -Query $wmiQuery @psboundparameters -ErrorAction Stop $AV = $AntivirusProduct.displayName if($AV -like $SearchTerm) { $fehler = 1 if ($detectAction -eq 1){ sfehler "---------- Fehler AV: $detect gefunden ----------" serrorcode 1 | Out-Null }else{ sfehler "---------- Warnung AV: $detect gefunden ----------" serrorcode 3 | Out-Null } sfehler "$AV ist auf $computer installiert" } else{ snormal "---------- AV: $detect nicht gefunden Alles OK ----------" snormal "$AV ist auf $computer installiert" $fehler = 0 serrorcode 0 | Out-Null } }catch{ sfehler "---------- Warnung KEIN AV gefunden ----------" sfehler "Es ist KEIN AV auf dem $computer installiert" sfehler "Bitte überprüfen" $fehler = 1 serrorcode 3 | Out-Null } ######################### Finale Ausgabe ######################### if ($fehler -gt 0) { # Bei Fehler wrap -Length $wrapzeichen $Fehlerausgabe wrap -Length $wrapzeichen $ausgabe $resultstring = sresult $exitcode = $global:exitvalue } else { wrap -Length $wrapzeichen $ausgabe $resultstring = sresult $exitcode = $global:exitvalue } $result = $exitcode $bpalert = $exitcode write-host $exitcode write-host $resultstring exit $exitcode
Das Skript und die RSF Datei für Riverbird können wir heruntergeladen werden
Powershell Datei
Riverbird Datei
oder hier direkt hier