在Powershell中返回服务器的运行进程状态并导出为CSV

时间:2016-09-29 13:32:03

标签: powershell antivirus

我正试图绕过Powershell并拥有以下内容:

$servers = Get-Content -Path C:\servers.txt

Get-Process -name AVProcess -cn $servers | % where {$_.Status -eq "Running"}

#Export-Csv -path "C:\server-process-sophos.csv"

我收到一个错误,看起来我不能在参数计算机名称中使用$ servers变量,也发送到CSV文件了。理想情况下,我希望能够将每个服务器名称,进程状态通过CSV管道传输到行中。

我正在尝试返回一个服务器列表,这些服务器没有运行或没有运行该进程 - 所以我可以看看他们是否安装了基本上用于库存报告的AV(如果有些没有AV,这是不好的! )。我怎么能最好地解决这个问题?

提前致谢

1 个答案:

答案 0 :(得分:0)

Get-Process没有“状态”属性。使用Get-Service.检查每台计算机上的服务状态会更好/更容易。您只需要在此代码中修改服务名称,使其与您的服务名称相匹配。此外,输出将转到两个不同的文件,一个在服务可用于检查时使用,另一个在没有所需名称的服务时使用。它适用于PowerShell V3。

$servers = Get-Content -Path C:\servers.txt
$ErrorActionPreference='stop'

ForEach ($server in $servers) {

   try
   {                                                 
   Get-Service -name <enterServiceNameHere> -cn $server | Export-Csv -append -Path "C:\server-process-sophos.csv" -noType -Force
   }

   catch [System.Management.Automation.ActionPreferenceStopException]
   {
   $psObject = $null
   $psObject = New-Object psobject
   $OutputString = "cannot find this service on: " + $server
   Add-Member -InputObject $psObject -MemberType noteproperty -Name "List" -Value $OutputString
   Export-Csv -InputObject $psObject -Append -path "C:\ServersWithNoService.csv" -NoType -Force
   }
}