J'ai utilisé la solution "-ErrorAction SilentlyContinue" mais j'ai ensuite rencontré le problème qu'elle laisse un ErrorRecord derrière. Voici donc une autre solution pour vérifier simplement si le Service existe en utilisant "Get-Service".
# Détermine si un Service existe avec un nom tel que défini dans $ServiceName.
# Renvoie un booléen $True ou $False.
Function ServiceExists([string] $ServiceName) {
[bool] $Return = $False
# Si vous utilisez simplement "Get-Service $ServiceName", cela renverra une erreur si
# le service n'existait pas. Trompez Get-Service pour renvoyer un tableau de
# Services, mais seulement si le nom correspond exactement à $ServiceName.
# De cette façon, vous pouvez tester si le tableau est vide.
if ( Get-Service "$ServiceName*" -Include $ServiceName ) {
$Return = $True
}
Return $Return
}
[bool] $ceServiceExiste = ServiceExists "Un nom de service"
ceServiceExiste
Mais ravikanth a la meilleure solution car Get-WmiObject ne jettera pas d'erreur si le Service n'existait pas. Donc j'ai opté pour utiliser:
Function ServiceExists([string] $ServiceName) {
[bool] $Return = $False
if ( Get-WmiObject -Class Win32_Service -Filter "Name='$ServiceName'" ) {
$Return = $True
}
Return $Return
}
Donc pour offrir une solution plus complète:
# Supprime un service avec un nom tel que défini dans $ServiceName.
# Renvoie un booléen $True ou $False. $True si le Service n'existait pas ou a été
# supprimé avec succès après l'exécution.
Function DeleteService([string] $ServiceName) {
[bool] $Return = $False
$Service = Get-WmiObject -Class Win32_Service -Filter "Name='$ServiceName'"
if ( $Service ) {
$Service.Delete()
if ( -Not ( ServiceExists $ServiceName ) ) {
$Return = $True
}
} else {
$Return = $True
}
Return $Return
}