J'écris actuellement un script de déploiement qui installe un certain nombre de services Windows.
Les noms des services sont versionnés, je souhaite donc supprimer la version précédente du service Windows dans le cadre des installations du nouveau service.
Comment puis-je faire cela au mieux dans PowerShell?
powershell
windows-services
Adrian Russell
la source
la source
$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
Il n'y a aucun mal à utiliser le bon outil pour le travail, je trouve en cours d'exécution (de Powershell)
la méthode la plus fiable qui n'a pas beaucoup de dépendances.
la source
.exe
jusqu'à ce que je voie votre commentaire. Maintenant ça marche pour moi.\\server
) est simplement omis si le service est local.%
et$_
Si vous souhaitez simplement vérifier l'existence du service:
la source
J'ai utilisé la solution "-ErrorAction SilentlyContinue" mais j'ai ensuite rencontré le problème de laisser un ErrorRecord derrière. Voici donc une autre solution pour simplement vérifier si le service existe en utilisant "Get-Service".
Mais ravikanth a la meilleure solution puisque le Get-WmiObject ne lèvera pas d'erreur si le service n'existait pas. J'ai donc décidé d'utiliser:
Alors pour proposer une solution plus complète:
la source
Get-WmiObject -Class Win32_Service -Filter "Name='$serviceName'"
etGet-Service $serviceName -ErrorAction Ignore
(ce qui masque complètement l'erreur si le service n'existe pas) pour être complet. Je m'attendais à ce que Get-WmiObject soit plus rapide car il ne génère pas d'erreur. J'avais vraiment tort. En exécutant chacun en boucle 100 fois, Get-Service a pris 0,16 seconde tandis que Get-WmiObject a pris 9,66 secondes. Get-Service est donc 60 fois plus rapide que Get-WmiObject.Les versions plus récentes de PS ont Remove-WmiObject. Attention aux échecs silencieux pour $ service.delete () ...
Pour ma situation, je devais exécuter `` En tant qu'administrateur ''
la source
Pour supprimer plusieurs services dans Powershell 5.0, car le service de suppression n'existe pas dans cette version
Exécutez la commande ci-dessous
la source
En combinant les réponses de Dmitri et dcx, j'ai fait ceci:
la source
On pourrait utiliser Where-Object
if ((Get-Service | Where-Object {$_.Name -eq $serviceName}).length -eq 1) { "Service Exists" }
la source
Pour vérifier si un service Windows nommé
MySuperServiceVersion1
existe, même si vous n'êtes pas sûr de son nom exact, vous pouvez utiliser un caractère générique, en utilisant une sous-chaîne comme celle-ci:la source
Pour un seul PC:
Macro pour la liste des PC:
la source
PowerShell Core ( v6 + ) dispose désormais d'une
Remove-Service
applet de commande .Je ne connais pas les plans pour le back-portage vers Windows PowerShell, où il n'est pas disponible à partir de la v5.1.
Exemple:
Notez que l'appel échoue si le service n'existe pas, donc pour le supprimer uniquement s'il existe actuellement, vous pouvez faire:
la source
Pour les versions PowerShell antérieures à la v6, vous pouvez le faire:
Pour v6 +, vous pouvez utiliser l'applet de commande Remove-Service .
Notez qu'à partir de Windows PowerShell 3.0, l'applet de commande Get-WmiObject a été remplacée par Get-CimInstance.
la source
Adapté ceci pour prendre une liste d'entrée de serveurs, spécifier un nom d'hôte et donner une sortie utile
la source
Windows Powershell 6 aura l' applet de commande Remove-Service . À partir de maintenant, la version Github montre PS v6 beta-9
Source: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/remove-service?view=powershell-6
la source