В настоящее время я пишу сценарий развертывания, который устанавливает ряд служб Windows.
Имена сервисов версионированы, поэтому я хочу удалить предыдущую версию сервиса Windows как часть установки новой службы.
Как я могу лучше всего сделать это в PowerShell?
powershell
windows-services
Адриан Рассел
источник
источник
$service = Get-WmiObject -Class Win32_Service -Filter "Name='servicename'"
$service | Remove-WmiObject
$service.delete()
Stop-Service 'servicename'; Get-CimInstance -ClassName Win32_Service -Filter "Name='servicename'" | Remove-CimInstance
Там нет вреда в использовании правильного инструмента для работы, я считаю, работает (от Powershell)
самый надежный метод, который не имеет много зависимостей.
источник
.exe
пока не увидел ваш комментарий. Теперь это работает для меня.\\server
) просто не указывается, если служба локальная.%
и$_
Если вы просто хотите проверить существование сервиса:
источник
Я использовал решение «-ErrorAction SilentlyContinue», но затем столкнулся с проблемой, которая оставляет ErrorRecord позади. Итак, вот еще одно решение - просто проверить, существует ли Сервис с помощью «Get-Service».
Но у ravikanth есть лучшее решение, так как Get-WmiObject не выдаст ошибку, если Сервис не существует. Итак, я остановился на использовании:
Итак, чтобы предложить более полное решение:
источник
Get-WmiObject -Class Win32_Service -Filter "Name='$serviceName'"
иGet-Service $serviceName -ErrorAction Ignore
(что полностью скрывает ошибку, если сервис не существует) для полноты. Я ожидал, что Get-WmiObject может быть быстрее, потому что он не выдает ошибку. Я был очень неправ. Выполнение каждого цикла 100 раз, Get-Service заняло 0,16 секунды, а Get-WmiObject - 9,66 секунды. Таким образом, Get-Service в 60 раз быстрее, чем Get-WmiObject.Более поздние версии PS имеют Remove-WmiObject. Остерегайтесь молчаливых сбоев для $ service.delete () ...
Для моей ситуации мне нужно было запустить «Как администратор»
источник
Чтобы удалить несколько сервисов в Powershell 5.0, так как удалить сервис не существует в этой версии
Запустите приведенную ниже команду
источник
Объединив ответы Дмитрия и dcx, я сделал это:
источник
Можно использовать Where-Object
if ((Get-Service | Where-Object {$_.Name -eq $serviceName}).length -eq 1) { "Service Exists" }
источник
Чтобы проверить, существует ли названная служба Windows
MySuperServiceVersion1
, даже если вы не уверены в ее точном названии, вы можете использовать подстановочный знак, используя подстроку так:источник
Для одного ПК:
Макрос для списка компьютеров:
источник
PowerShell Core ( v6 + ) теперь имеет
Remove-Service
командлет .Я не знаю о планах обратного портирования на Windows , PowerShell, где он не доступен как в v5.1.
Пример:
Обратите внимание, что вызов не выполняется, если служба не существует, поэтому, чтобы удалить ее, только если она существует в данный момент, вы можете сделать следующее:
источник
Для версий PowerShell до v6 вы можете сделать это:
Для версии 6+ вы можете использовать командлет Remove-Service .
Обратите внимание, что начиная с Windows PowerShell 3.0, командлет Get-WmiObject был заменен Get-CimInstance.
источник
Адаптировал это, чтобы взять входной список серверов, указать имя хоста и дать полезный вывод
источник
Windows Powershell 6 будет иметь командлет Remove-Service . На данный момент релиз Github показывает PS v6 beta-9
Источник: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/remove-service?view=powershell-6.
источник