es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Powershell: Encontrar el antivirus instalado y su estado, filtrando el antivirus de Windows Defender.

Encontré la base de este script en otra publicación aquí, sin embargo, me gustaría llevarlo un poco más lejos y he estado experimentando. Lo que estoy buscando lograr es obtener el nombre y estado del antivirus instalado en el dispositivo y, por supuesto, quiero filtrar Windows Defender. Aquí está lo que tengo hasta ahora…

El problema que tengo con el código actual del que no estoy seguro de cómo solucionar es que también obtengo el código de estado para Windows Defender.

Agradecería mucho su consejo y ayuda.

limpiar
function Get-AntivirusName { 
[cmdletBinding()]<br>
parámetro ( 
[string]$ComputerName = "$env:computername" , 
$Credential 
) 
$wmiQuery = "SELECT * FROM AntiVirusProduct" 
$AntivirusProduct = Get-WmiObject -Namespace "root\SecurityCenter2" -Query $wmiQuery  @psboundparameters
[array]$AntivirusNames = $AntivirusProduct.displayName | sort -unique
[array]$AntivirusState = $AntivirusProduct.productState | sort -unique
$AntivirusState
Switch($AntivirusNames) {
{$AntivirusNames.Count -eq 0}{"¡El antivirus NO está instalado!";Continue}
{$AntivirusNames.Count -eq 1 -and $_ -eq "Windows Defender"} {Write-host "¡SOLO Windows Defender está instalado!";Continue}
{$_ -ne "Windows Defender"} {"Producto(s) antivirus: $_."}
   }
}
Get-AntivirusName
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    Para filtrar Windows Defender de los productos antivirus, se puede agregar una condición adicional en el bloque Switch verificando el estado del código de producto de Windows Defender. El código de estado del producto para Windows Defender es 393472.

    Aquí está el código modificado:

    Limpiar
    function Get-AntivirusName { 
    [cmdletBinding()]     
    param ( 
    [string]$ComputerName = "$env:computername" , 
    $Credential 
    ) 
        $wmiQuery = "SELECT * FROM AntiVirusProduct" 
        $AntivirusProduct = Get-WmiObject -Namespace "root\SecurityCenter2" -Query $wmiQuery  @psboundparameters
        [array]$AntivirusNames = $AntivirusProduct.displayName | sort -unique
        [array]$AntivirusState = $AntivirusProduct.productState | sort -unique
        $AntivirusState
        Switch($AntivirusNames) {
            {$AntivirusNames.Count -eq 0}{"¡El antivirus NO está instalado!";Continue}
            {$AntivirusNames.Count -eq 1 -and $_ -eq "Windows Defender" -and $AntivirusState -eq 393472} {Write-host "¡SOLO se ha instalado Windows Defender!";Continue}
            {$_ -ne "Windows Defender" -and $AntivirusState[$AntivirusNames.IndexOf($_)] -ne 393472} {"Producto(s) antivirus: $_."}
       }
    }
    Get-AntivirusName
    

    Con este código, el bloque Switch verifica el nombre del producto antivirus y también su código de estado. Si el nombre del producto es “Windows Defender” y el código de estado es 393472, se salta. Si el nombre del producto no es “Windows Defender” y el código de estado no es 393472, se muestra.

Comments are closed.