查找指定软件-Powershell

问题描述 投票:0回答:1

我正在尝试检查 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

我希望脚本显示正确的信息。

powershell scripting
1个回答
0
投票

您可以更改函数以接受如下所示的计算机名称,并使用它来调用指定计算机上的命令,例如:

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的评论可能是最简单的方法。

© www.soinside.com 2019 - 2024. All rights reserved.