我正在尝试检查 AD 是否通过 PS 安装了 AV。如果我单独运行下面的脚本,它会正确显示已安装的位置和未安装的位置。
if ( [bool](Get-Process 'Sophos UI' -EA SilentlyContinue) ) {
$resultado="Instalado"
} else {
$resultado="Nao nstalado"
}
return $resultado
但是,当将其带到 AD 时,下面的脚本将所有内容显示为已安装,即使在未安装的计算机上也是如此。如何修复这个错误?
function verificaSophos {
if ( [bool](Get-Process 'Sophos UI' -EA SilentlyContinue) ) {
$resultado="Instalado"
} else {
$resultado="Nao nstalado"
}
return $resultado
}
$Comps= Get-ADComputer -Filter {(Enabled -eq $True)} -properties *
$CompList = foreach ($Comp in $Comps) {
[PSCustomObject] @{
Name = $Comp.Name
VerificaInstalacaoSophos = verificaSophos $Comp
DataColeta = Get-Date -Format "dd/MM/yyyy HH:mm:ss"
}
}
$CompList | Export-CSV c:\temp\sophos.csv -NoTypeInformation -Encoding UTF8
我希望脚本显示正确的信息。
您可以更改函数以接受如下所示的计算机名称,并使用它来调用指定计算机上的命令,例如:
function verificaSophos {
param (
[string]$ComputerName = $env:COMPUTERNAME
)
$resultado = Invoke-Command -ComputerName $ComputerName -ScriptBlock {
[bool](Get-Process 'Sophos UI' -ErrorAction SilentlyContinue)
}
if ($resultado) { 'Instalado' } else { 'Nao instalado' }
}
$Comps = Get-ADComputer -Filter 'Enabled -eq $true'
$CompList = foreach ($Comp in $Comps) {
[PSCustomObject] @{
Name = $Comp.Name
VerificaInstalacaoSophos = verificaSophos $Comp.Name
DataColeta = Get-Date -Format "dd/MM/yyyy HH:mm:ss"
}
}
然而,js2010的评论可能是最简单的方法。