none
Powershell-найти процесс на компьютерах в домене и завершить его RRS feed

  • Вопрос

  • Добрый день!
    Необходим скрипт на Powershell, который находит компьютеры в домене, на которых запущен определенный процесс,  и убивает его.
    Список компьютеров можно брать только из АД . 

    6 декабря 2010 г. 15:44

Ответы

  • С использованием  ActiveRoles Management Shell for Active Directory

     

     

    $proc = "cmd.exe"
    $Comps = Get-QADComputer -SizeLimit 0 | Foreach {$_.name}
    foreach ($comp in $Comps)
    {
    	if (Test-Connection -Count 2 -ComputerName $comp -Quiet)
    	{
    		$ps = Get-WmiObject Win32_Process -Filter "Name='$proc'" -ComputerName $comp
    		foreach ($i in $ps)
    		{
    			$result = $i.Terminate()
    			if ($result.ReturnValue -eq 0) { "Success $comp"}
    			else {"Error $comp"}
    		}
    	}
    }
    

     

    Без него,скрипт взят с https://blogs.technet.com/b/heyscriptingguy/archive/2006/11/09/how-can-i-use-windows-powershell-to-get-a-list-of-all-my-computers.aspx 

     

    $proc = "cmd.exe"
    $strCategory = "computer"
    $objDomain = New-Object System.DirectoryServices.DirectoryEntry
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher
    $objSearcher.SearchRoot = $objDomain
    $objSearcher.Filter = ("(objectCategory=$strCategory)")
    $colProplist = "name"
    foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}
    $colResults = $objSearcher.FindAll()
    foreach ($objResult in $colResults)
    {
    	$objComputer = $objResult.Properties
    	$objComputer.name
    	if (Test-Connection -Count 2 -ComputerName $objComputer.name -Quiet)
    { $ps = Get-WmiObject Win32_Process -Filter "Name='$proc'" -ComputerName $objComputer.name
    foreach ($i in $ps) { $result = $i.Terminate() if ($result.ReturnValue -eq 0) { "Success $comp"} else {"Error $comp"} } } }

     

     

     

    • Помечено в качестве ответа Helen24 6 декабря 2010 г. 18:13
    • Изменено KazunEditor 6 декабря 2010 г. 18:34
    6 декабря 2010 г. 17:37
    Отвечающий

Все ответы

  • С использованием  ActiveRoles Management Shell for Active Directory

     

     

    $proc = "cmd.exe"
    $Comps = Get-QADComputer -SizeLimit 0 | Foreach {$_.name}
    foreach ($comp in $Comps)
    {
    	if (Test-Connection -Count 2 -ComputerName $comp -Quiet)
    	{
    		$ps = Get-WmiObject Win32_Process -Filter "Name='$proc'" -ComputerName $comp
    		foreach ($i in $ps)
    		{
    			$result = $i.Terminate()
    			if ($result.ReturnValue -eq 0) { "Success $comp"}
    			else {"Error $comp"}
    		}
    	}
    }
    

     

    Без него,скрипт взят с https://blogs.technet.com/b/heyscriptingguy/archive/2006/11/09/how-can-i-use-windows-powershell-to-get-a-list-of-all-my-computers.aspx 

     

    $proc = "cmd.exe"
    $strCategory = "computer"
    $objDomain = New-Object System.DirectoryServices.DirectoryEntry
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher
    $objSearcher.SearchRoot = $objDomain
    $objSearcher.Filter = ("(objectCategory=$strCategory)")
    $colProplist = "name"
    foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}
    $colResults = $objSearcher.FindAll()
    foreach ($objResult in $colResults)
    {
    	$objComputer = $objResult.Properties
    	$objComputer.name
    	if (Test-Connection -Count 2 -ComputerName $objComputer.name -Quiet)
    { $ps = Get-WmiObject Win32_Process -Filter "Name='$proc'" -ComputerName $objComputer.name
    foreach ($i in $ps) { $result = $i.Terminate() if ($result.ReturnValue -eq 0) { "Success $comp"} else {"Error $comp"} } } }

     

     

     

    • Помечено в качестве ответа Helen24 6 декабря 2010 г. 18:13
    • Изменено KazunEditor 6 декабря 2010 г. 18:34
    6 декабря 2010 г. 17:37
    Отвечающий
  • Спасибо. Суть понятна

     После выполнения выводится список компьютеров и ошибка. Соответственно завершение процесса не происходит:

     

    0

    PDCTEST1

    Test-Connection : Cannot validate argument on parameter 'ComputerName'. The argument is null or empty. Supply an argume

    nt that is not null or empty and then try the command again.

    At C:\Scripts\Scripts_1.ps1:14 char:44

    +     if (Test-Connection -Count 2 -ComputerName <<<<  $comp -Quiet)

        + CategoryInfo          : InvalidData: (:) [Test-Connection], ParameterBindingValidationException

        + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.TestConnectionCommand

     

    6 декабря 2010 г. 18:31
  • Изменил скрипт выше,забыл поменять $comp на $objComputer.name,поэтому и Test-Connection не отработало.
    6 декабря 2010 г. 18:35
    Отвечающий
  • Спасибо!

    Работает идеально.

    6 декабря 2010 г. 18:58