|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Найти процесс на пк в домене и убить его |
|
|
PowerShell - Найти процесс на пк в домене и убить его
|
Новый участник Сообщения: 5 |
Нужно найти определенный процесс на компьютерах в домене, и убить его.
|
|
Отправлено: 18:45, 06-12-2010 |
Старожил Сообщения: 173
|
Профиль | Отправить 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
|
Профиль | Сайт | Отправить PM | Цитировать Цитата:
|
|
Отправлено: 00:18, 08-12-2010 | #3 |
Ветеран Сообщения: 508
|
Профиль | Отправить PM | Цитировать Если вместо "завершить процесс" нужно выбрать "завершить дерево процессов" - то каким образом нужно изменить скрипт?
|
Отправлено: 14:37, 11-05-2011 | #4 |
Ветеран Сообщения: 1482
|
Профиль | Отправить PM | Цитировать А как сделать поиск по всем компьютерам в определенной орг еденице?!
(Что бы убить процесс на всех машинах домене кроме серверов?! ) или из тектового файла (я могу сделать текс фаил с именами компьютеров) например comps.txt |
|
------- Отправлено: 15:49, 01-06-2011 | #5 |
Ветеран Сообщения: 1259
|
Профиль | Отправить 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()} } } gwmi "Win32_Process" -filter "Name='$proc'" -ComputerName (gc computers.txt) | %{$_.Terminate()} |
Отправлено: 17:42, 01-06-2011 | #6 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Не надо такие темы закрывать и тем более удалять. Чтобы другие люди потом находили решение вопросов здесь.
|
Отправлено: 13:16, 02-06-2011 | #7 |
Новый участник Сообщения: 5
|
Профиль | Отправить 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 |
Ветеран Сообщения: 1482
|
Профиль | Отправить 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: ( ![]() + FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand И процесс в цикле ... а мне бы хотелось что бы цикла не было ... запустил один раз и один раз скрипт закрыл процесс. Если есть возможно после открытие его с указанного пути ... путь \\TT\search\cmd.exe Weterok, а можно тоже самое только что бы имена компьютеров брал из файла comps.txt |
------- Отправлено: 18:30, 06-06-2011 | #9 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Достаточно только этой строки в скрипте.Вы уж определитесь откуда имена компьютеров будут браться и для файла comps.txt(для тестов укажите полный путь).
gwmi "Win32_Process" -filter "Name='$proc'" -ComputerName (gc comps.txt) | %{$_.Terminate()} |
Отправлено: 19:01, 06-06-2011 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|