2013-02-20 3 views
-2

Я использую psexec для автоматического запуска из cmd на всех компьютерах в нашей сети, чтобы проверить, работает ли какой-либо процесс или нет. но я запустил список со всем именем pc, в котором работает служба. как я могу это сделать из powershell?Как получить список компьютеров, которые работают на каждом компьютере?

Это то, что я сейчас бегаю. 2 командных файла и 1 текстовый файл.

get.bat


Tasklist | Findstr pmill.exe >> DC-01 \ C $ \ 0001.txt


run_get.bat


PsExec @% 1 -u администратора -p пароль -c «C: \ прибудете .bat»


pclist.txt


, что я получил от этого в ре sult - всего лишь pmill.exe, я задаюсь вопросом, есть ли в любом случае, что я могу вывести имя ПК, на котором работает pmill.exe?

Подсказка plz!

+0

Просто FYI, ваш двойной проводки тактика не ценится. У всех ваших клиентов есть powershell или это просто ваша машина? Есть ли у вас WMI-удаленный доступ, резервное копирование PowerShell или оба разрешения на клиентских компьютерах? –

+0

не более двойной публиковать! – Blitzcrank

+0

все клиенты имеют powershell установлены – Blitzcrank

ответ

1

Если все компьютеры установлены с включенным удаленным доступом, вы можете попробовать сценарий ниже. Он также выводит компьютеры, которые недоступны, поэтому вы можете повторно протестировать их позже, если захотите. Если вам это не нужно, просто удалите содержимое внутри 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

+0

Я пытаюсь выполнить сценарий, который вы создали выше, в файле pc_list.txt, у меня очень длинный список содержит более 100 компьютеров, но каким-то образом сценарий пропустит некоторые из ПК, есть ли у вас какие-либо идеи, почему? – Blitzcrank

+0

как out.txt выше, похоже, что отсутствует [tespc] – Blitzcrank

1

в зависимости от того, какой Remoting доступен:

  • Если удаленное управление 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 Государство member of the returned object in the Куда-объект` выше.

  • PowerShell Remoting: использовать Invoke-Command -ComputerName dev1 -ScriptBlock { Get-Service serviceName } запустить Get-Service на удаленной машине, чтобы вернуть тот же объект (но с PSComputerName собственности на добавленную стоимость)

Смежные вопросы