![]() |
Удаление служб по маске
Здравствуйте.
Просьба помочь в написании скрипта по удалению служб по маске. Например, есть список служб типа: service_1, service_2 и т.д. Необходимо удалить все службы с именем service_* |
Powershell, должно работать:
Код:
(get-service service_*).name.foreach({sc.exe delete $_}) |
опять нет виндовой машины под рукой, но на пошике это делается +- ванлайном
Код:
Get-Service "service_*" | Remove-Service Однако должен отметить что удаление служб вижу весьма сомнительным действием. |
Elven, Remove-Service появился только в Powershell v.6.
А был бы в общеупотребительных версиях, наверное, можно было бы так: Код:
Remove-Service "service_*" |
Цитата:
Код:
Нельзя вызвать метод для выражения со значением NULL. Цитата:
Код:
Нельзя вызвать метод для выражения со значением NULL. |
kirillius,
Цитата:
Команда Код:
$psversiontable Код:
(get-service service_*).name |foreach {sc.exe delete $_} Цитата:
Код:
get-service service_* |
Цитата:
Код:
CLRVersion 2.0.50727.8806 |
Да, это очень старая версия.
Так работает? Код:
(get-service service_*).name |foreach {sc.exe delete $_} |
DJ Mogarych, а Wbem — Win32_Service → .Delete() (мне пробовать не на чем — нет «лишних» служб), не?!
Цитата:
|
Цитата:
Код:
Описание: Цитата:
При проверке скрипта я разумеется меняю всё на то как нужно. |
VBS
Код:
Maska = "^winsolit_.*$" Тестировал на старой игре winsolit Скопировал несколько раз exe с разными именами и запустил их. |
Цитата:
Служба остановлена? Нет ли там дескрипторов от других процессов? Код:
(get-service service_*).name |foreach { |
Цитата:
Код:
Не удается привязать аргумента к параметру "Name", так как он имеет значение NULL. Скрипт выше тоже удалил службу, когда я вместо маски прописал полное её имя. |
Какой-то из этих вариантов работает?
Код:
get-service service_* |
Цитата:
|
Хорошо. А такие варианты?
Код:
(get-service service_*).name |
Цитата:
|
Интересное кино.
А так работает? Код:
$services = get-service service_* |
Цитата:
|
Цитата:
kirillius, попробуйте добавить в цикл вывод найденных сервисов у Stop-Process укажите явно, что вы передаёте, а не надейтесь на приведение типов внешние файлы вызывайте либо командлетом Start-Process либо оператором контекста & примерно так Код:
$services = get-service service_* и этого бы не случилось, если бы не городили на пустом месте кучу переменных, а писали бы конвейером p.s. и в общем случае оно не будет работать - сломается на службах с пробелом в имени |
Цитата:
|
Цитата:
И неплохо бы иметь любознательность хотя бы чтобы попробовать понять, что делает элементарный скрипт в две строки, я уж не говорю о том, чтобы попробовать самому попробовать их написать. |
Цитата:
А теперь это можно в некое подбие BAT-файла преобразовать, чтобы запуском в один клик вся эта процедура проделывалась? К сожалению с PowerShell не знаком совершенно... |
kirillius,
Попробуйте так: Код:
powershell.exe -Command { Stop-service service_* -PassThru | % { & sc.exe delete $_.name } } |
Цитата:
Код:
"%" не является внутренней или внешней |
Busla, теперь ваша очередь демонстрации написания однозначных скриптов.
|
Пока решил задачу так:
Код:
$services = get-service service_* Код:
powershell "D:\Desktop\DelServices.ps1" |
kirillius, для bat удобнее будет использовать wmi:
Код:
wmic.exe service where "name like 'service_%' and started = true" call stopservice |
Цитата:
|
|
Цитата:
|
Время: 13:30. |
Время: 13:30.
© OSzone.net 2001-