如何获得在每台PC上运行服务的电脑列表?

时间:2013-02-20 16:49:15

标签: powershell batch-file powershell-v2.0

我正在使用psexec从我们网络上所有PC上的cmd自动运行,以检查某些进程是否正在运行。但我想要一个列表,其中包含运行该服务的所有PC名称。我怎么能从powershell做到这一点?

这就是我现在正在运行的。 2个批处理文件和1个文本文件。

get.bat


任务列表| findstr pmill.exe>> dc-01 \ c $ \ 0001.txt


run_get.bat


psexec @%1 -u administrator -p password -c“C:\ get.bat”


pclist.txt


我从结果中得到的只是所有pmill.exe,我想知道是否还有我可以输出运行pmill.exe的PC名称?

提示plz!

2 个答案:

答案 0 :(得分:1)

如果所有计算机都安装了PowerShell并启用了远程处理,则可以尝试下面的脚本。它还输出无法访问的计算机,以便您可以在以后重新测试它们。如果您不需要,只需删除catch - 块(或全部try/catch)内的内容:

$out = @()
Get-Content "pclist.txt" | foreach {
    $pc = $_ 
    try {
        if((Get-Process -Name "pmill" -ComputerName $pc) -ne $null) {
            $out += $_
        }
    } catch { 
        #Unknown error
        $out += "ERROR: $pc was not checked. $_.Message"
    }
}

$out | Set-Content "out.txt"

pclist.txt:

graimer-pc
pcwithoutprocesscalledpmill
testcomputer
testpc
graimer-pc

Out.txt(日志):

graimer-pc
ERROR: testcomputer is unreachable
ERROR: testpc is unreachable
graimer-pc

答案 1 :(得分:1)

取决于可用的远程处理类型:

  • 如果Windows远程管理(例如,Services.msc可以连接),则只需使用

    Get-Service -Name theService -computer TheComputer
    

    如果服务正在运行该服务的信息(如它的话),它将返回一个对象 如果没有安装,则没有任何内容,所以假设pclist.txt是每行一个计算机名, 获取正在运行服务的计算机列表(在用正确的serviceName替换之后 name:这可能与进程名称不同):

    Get-Content pclist.txt | Where-Object {
      $s = Get-Service -name 'serviceName' -computer $_
      $s -or ($s.Status -eq Running)
    }
    
  • 如果使用上面的Get-WmiObject win32_service -filter 'name="serviceName"' and themember of the returned object in the Where-Object`可以使用WMI。

  • PowerShell远程处理:使用Invoke-Command -ComputerName dev1 -ScriptBlock { Get-Service serviceName } 运行远程计算机上的Get-Service以返回相同的对象(但使用PSComputerName 已添加的财产)