Uncategorized

AV Search and Detect Community“

AV Search and Detect Community“

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

Powershell Datei

Riverbird Datei

Previous article Drucker Informationen Powershell

Related posts

0 Comments

No Comments Yet!

You can be first to comment this post!

Leave a Comment