Powershell:查找已安装的防病毒软件和状态,过滤掉Windows Defender



我在这里的另一篇文章中发现了这个脚本的基础,不过,我想更进一步,并一直在尝试。我想要实现的是获得设备上安装的防病毒软件的名称和状态,当然我想过滤掉Windows Defender。这是我迄今为止所拥有的。。。

我不确定如何绕过当前代码的问题是,我也得到了Windows Defender的状态代码。

我将非常感谢你的建议和帮助。

clear
function Get-AntivirusName { 
[cmdletBinding()]     
param ( 
[string]$ComputerName = "$env:computername" , 
$Credential 
) 
$wmiQuery = "SELECT * FROM AntiVirusProduct" 
$AntivirusProduct = Get-WmiObject -Namespace "rootSecurityCenter2" -Query $wmiQuery  @psboundparameters
[array]$AntivirusNames = $AntivirusProduct.displayName | sort -unique
[array]$AntivirusState = $AntivirusProduct.productState | sort -unique
$AntivirusState
Switch($AntivirusNames) {
{$AntivirusNames.Count -eq 0}{"Anti-Virus is NOT installed!";Continue}
{$AntivirusNames.Count -eq 1 -and $_ -eq "Windows Defender"} {Write-host "ONLY Windows Defender is installed!";Continue}
{$_ -ne "Windows Defender"} {"Antivirus Product(s): $_."}
}
}
Get-AntivirusName

如果你想排除Windows Defender,但确实想获得控制台消息,我会更改如下函数:

function Get-AntivirusName { 
[cmdletBinding()]     
param ( 
[string]$ComputerName = $env:COMPUTERNAME, 
$Credential 
) 
$wmiQuery = "SELECT * FROM AntiVirusProduct" 
$AntivirusProduct = @(Get-CimInstance -Namespace "rootSecurityCenter2" -Query $wmiQuery  @psboundparameters)
if ($AntivirusProduct.Count -eq 0) {
Write-Host 'Anti-Virus is NOT installed!' -ForegroundColor Red
}
elseif ($AntivirusProduct.Count -eq 1 -and $AntivirusProduct.displayName -like '*Windows Defender*') {
Write-Host 'ONLY Windows Defender is installed!' -ForegroundColor Cyan
}
else {
# filter out Windows Defender from the list
$AntivirusProduct = $AntivirusProduct | Where-Object {$_.displayName -notlike '*Windows Defender*'} | Sort-Object -Unique
# output objects with both the product name and the status
foreach ($avProduct in $AntivirusProduct) {
[PsCustomObject]@{
AV_Product = $avProduct.displayName
AV_Status  = $avProduct.productState
}
}
}
}
Get-AntivirusName

最新更新