Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Найти процесс на пк в домене и убить его

Ответить
Настройки темы
PowerShell - Найти процесс на пк в домене и убить его

Новый участник


Сообщения: 5
Благодарности: 1


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: Weterok
Дата: 03-06-2011
Нужно найти определенный процесс на компьютерах в домене, и убить его.

Отправлено: 18:45, 06-12-2010

 

Старожил


Сообщения: 173
Благодарности: 4

Профиль | Отправить PM | Цитировать


Добрый день,

Вот моё решение:
Код: Выделить весь код
$PCName = "TestPC"
$ProcessName = "skype.exe"
IF (Test-connection -Quiet -Delay 1 -Count 2'
-ErrorAction SilentlyContinue  -ComputerName $PCName)
{$a = Get-WmiObject -Class Win32_Process'
-ComputerName $PCName
| Where-Object -FilterScript{$_.Name -like "$ProcessName"}
 ($a).Terminate()
 "Процесс убит!!!"  }
Else {"Компьютер $1 выключен"}
Вопрос. можно убить процесс "в одну строку". Т.е. я сначала процесс помещаю в переменную, а затем её убиваю.
Можно ли сделать это без помещения процесса в переменную?

Не думаю, что стоит удалять пост. На мой взгляд данный форум силен в помощи. Он существует для того, чтобы помогать людям решать практические задачи.

Отправлено: 12:05, 07-12-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 12
Благодарности: 5

Профиль | Сайт | Отправить PM | Цитировать


Цитата:
Вопрос. можно убить процесс "в одну строку". Т.е. я сначала процесс помещаю в переменную, а затем её убиваю. Можно ли сделать это без помещения процесса в переменную?
Да, конечно же можно. И круглые скобки Вам в этом должны помочь за вполне умеренную цену. Итак
Код: Выделить весь код
...
(Get-WmiObject -Class Win32_Process -ComputerName $PCName | Where-Object -FilterScript{$_.Name -like "$ProcessName"}).Terminate()
...
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:18, 08-12-2010 | #3


Ветеран


Сообщения: 508
Благодарности: 140

Профиль | Отправить PM | Цитировать


Если вместо "завершить процесс" нужно выбрать "завершить дерево процессов" - то каким образом нужно изменить скрипт?

Отправлено: 14:37, 11-05-2011 | #4


Аватара для Butunin Klim

Ветеран


Сообщения: 1482
Благодарности: 117

Профиль | Отправить PM | Цитировать


А как сделать поиск по всем компьютерам в определенной орг еденице?!
(Что бы убить процесс на всех машинах домене кроме серверов?! )

или из тектового файла (я могу сделать текс фаил с именами компьютеров) например comps.txt

-------
Сообщение помогло? В знак благодарности НАЖМИТЕ ПОЛЕЗНОЕ СООБЩЕНИЕ

Мы зрим не то, что есть вокруг,
А то, что можем видеть зримо.
А то, что зреть не достижимо
Нам не узреть во век веков.

Мой веб-магазин товары Amway http://butunina.ru


Отправлено: 15:49, 01-06-2011 | #5


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


1) Для поиска в AD.
Код: Выделить весь код
$ou = [ADSI]"LDAP://CN=Computers,DC=contoso,DC=com"
$proc = "calc.exe"

foreach ($child in $ou.children | ? {$_.objectCategory -match "Computer" -and $_.operatingSystem -notmatch "Server"})
{
	$child | ? {Test-Connection $_.dNSHostName -Count 1 -Quiet } | % {
		gwmi "Win32_Process" -filter "Name='$proc'" -ComputerName $_.dNSHostName | %{$_.Terminate()} 
	}
}
2) Если из файла .
gwmi "Win32_Process" -filter "Name='$proc'" -ComputerName (gc computers.txt) | %{$_.Terminate()}

Отправлено: 17:42, 01-06-2011 | #6


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Не надо такие темы закрывать и тем более удалять. Чтобы другие люди потом находили решение вопросов здесь.

Отправлено: 13:16, 02-06-2011 | #7


Новый участник


Сообщения: 5
Благодарности: 1

Профиль | Отправить PM | Цитировать


Всем привет.
Если кому нужно - вот рабочий скрипт, который и был решением вопроса, по поиску процесса "cmd.exe" на всех компьютерах в домене и убиванию его.
Код: Выделить весь код
$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"}
		}
	}
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:09, 03-06-2011 | #8


Аватара для Butunin Klim

Ветеран


Сообщения: 1482
Благодарности: 117

Профиль | Отправить PM | Цитировать


Не понятно разьесните...

$cred = get-credential
$ou = [ADSI]"LDAP://CN=Computers,DC=store,DC=eom,DC=broom"
$proc = "cmd.exe"

foreach ($child in $ou.children | ? {$_.objectCategory -match "Computer" -and $_.operatingSystem -notmatch "Server"})
{
$child | ? {Test-Connection $_.dNSHostName -Count 1 -Quiet } | % {
gwmi "Win32_Process" -filter "Name='$proc'" -ComputerName (gc comps.txt) | %{$_.Terminate()}
}
}

с скриптом лежит фаил comps.txt
при запуске
Get-WmiObject : Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)
строка:9 знак:7
+ gwmi <<<< "Win32_Process" -filter "Name='$proc'" -ComputerName (gc comps.txt) | %{$_.Terminate()}
+ CategoryInfo : InvalidOperation: ( [Get-WmiObject], COMException
+ FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

И процесс в цикле ... а мне бы хотелось что бы цикла не было ... запустил один раз и один раз скрипт закрыл процесс.

Если есть возможно после открытие его с указанного пути ... путь \\TT\search\cmd.exe

Weterok, а можно тоже самое только что бы имена компьютеров брал из файла comps.txt

-------
Сообщение помогло? В знак благодарности НАЖМИТЕ ПОЛЕЗНОЕ СООБЩЕНИЕ

Мы зрим не то, что есть вокруг,
А то, что можем видеть зримо.
А то, что зреть не достижимо
Нам не узреть во век веков.

Мой веб-магазин товары Amway http://butunina.ru


Отправлено: 18:30, 06-06-2011 | #9


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Достаточно только этой строки в скрипте.Вы уж определитесь откуда имена компьютеров будут браться и для файла comps.txt(для тестов укажите полный путь).
gwmi "Win32_Process" -filter "Name='$proc'" -ComputerName (gc comps.txt) | %{$_.Terminate()}
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:01, 06-06-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Найти процесс на пк в домене и убить его

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Убить процесс Serg2010 Скриптовые языки администрирования Windows 3 27-07-2010 21:13
VBS/WSH/JS - Убить процесс, если окно активно rsod Скриптовые языки администрирования Windows 5 28-05-2010 15:59
Delphi - Убить процесс на Delphi btx Программирование и базы данных 1 18-03-2005 12:43
Как убить процесс ? ukms Программирование и базы данных 19 07-07-2004 09:01
Убить зависший процесс vippy Microsoft Windows NT/2000/2003 8 02-04-2004 07:32




 
Переход