2013-02-20 89 views
-2

我使用psexec從我們網絡上所有PC上的cmd自動運行,以檢查某個進程是否正在運行。但我想要一個列表中包含運行服務的所有pc名稱。我如何從PowerShell中做到這一點?如何獲得在每臺電腦上運行服務的電腦列表?

這就是我現在運行的東西。 2個批處理文件和1個文本文件。

get.bat


任務列表| FINDSTR pmill.exe >> DC-01 \ C $ \ 0001.txt


run_get.bat


PSEXEC @%1 -u管理員-p密碼-c「C:\ GET .BAT」


pclist.txt


我從這個在重新得到sult只是所有pmill.exe,我想知道是否有反正我可以輸出pmill.exe上運行的PC名稱?

提示plz!

+0

僅供參考,您的雙發佈策略不讚賞。你所有的客戶都擁有PowerShell還是僅僅是你的機器?你在客戶端機器上是否啓用了WMI遠程處理,PowerShell或兩者都啓用? – 2013-02-20 16:56:29

+0

沒有更多的雙重張貼! – Blitzcrank 2013-02-20 17:00:26

+0

所有客戶端都安裝了powershell – Blitzcrank 2013-02-20 17:00:54

回答

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 
+0

非常有用,非常感謝你! – Blitzcrank 2013-02-21 16:52:39

+0

我嘗試了上面製作的腳本,在pc_list.txt文件中,我有一個非常長的列表包含超過100臺PC,但不知何故,腳本會跳過一些PC,你知道爲什麼嗎? – Blitzcrank 2013-02-21 18:45:15

+0

像上面的out.txt,它看起來像缺少[tespc] – Blitzcrank 2013-02-21 18:47:50

1

根據什麼樣的遠程處理可用:

  • 如果Windows遠程管理(例如, SERVICES.MSC可以連接),那麼只需使用

    Get-Service -Name theService -computer TheComputer 
    

    將返回如果服務與信息上運行該服務(就像它 狀態),或者什麼,如果不安裝它的對象,所以假設pclist.txt是每行一個計算機名, 讓這裏的服務正在運行的計算機列表(用正確的 名稱替換serviceName後:這很可能是不同的進程名):

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

  • PowerShell遠程:使用Invoke-Command -ComputerName dev1 -ScriptBlock { Get-Service serviceName } 在遠程機器上運行Get-Service返回相同的對象(但PSComputerName 屬性加)