Guide : Comment redémarrer un service avec PowerShell

En tant que professionnels de l’informatique et fournisseurs de services gérés (MSP), la gestion et l’optimisation des services système font partie intégrante de notre rôle. PowerShell, un langage de script robuste, fournit un moyen efficace d’effectuer ces tâches. Il permet l’automatisation des tâches, simplifie les opérations complexes en quelques lignes de code et facilite la gestion des services sur plusieurs machines simultanément. 

Le script

<#
.SYNOPSIS
    Restart one or more services.
.DESCRIPTION
    Restart one or more services. This also try three more times to get the service(s) to start, all the while waiting 15 seconds between each attempt.
.EXAMPLE
     -Name "ServiceName"
    Restarts a service with the name ServiceName
.EXAMPLE
     -Name "ServiceName","AnotherServiceName" -WaitTimeInSecs 15
    Restarts two services with the names ServiceName and AnotherServiceName and waits 15 Seconds for them all to start
.EXAMPLE
    PS C:> Restart-Service.ps1 -Name "ServiceName"
    Restarts a service with the name ServiceName
.EXAMPLE
    PS C:> Restart-Service.ps1 -Name "ServiceName","AnotherServiceName" -WaitTimeInSecs 15
    Restarts two services with the names ServiceName and AnotherServiceName and waits 15 Seconds for them all to start
.NOTES
    Exit Code 0: All service(s) restarted
    Exit Code 1: Some or all service(s) failed to restart
    Release Notes:
    Initial Release
By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
    Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#>
[CmdletBinding()]
param (
    # Name of service(s), either Name or DisplayName from Get-Service cmdlet
    [Parameter(Mandatory = $true)]
    [String[]]
    $Name,
    # The number of attempts to restart the service before giving up
    [Parameter()]
    [int]
    $Attempts = 3,
    # Duration in Seconds to wait for service(s) to start between each attempt
    [Parameter()]
    [int]
    $WaitTimeInSecs = 15
)

begin {
    function Test-Service {
        [CmdletBinding()]
        param (
            [Parameter()]
            [String[]]
            $Services
        )
        if ((Get-Service | Where-Object { ($_.Name -in $Services -or $_.DisplayName -in $Services) -and $_.Status -like "Running" }).Count -gt 0) {
            $true
        }
        else {
            $false
        }
    }
    $FailedToStart = 0
}
process {
    # Get service(s)
    $Services = Get-Service | Where-Object { $_.Name -in $Name -or $_.DisplayName -in $Name }
    if ($Services.Count -eq 0) {
        Write-Error "No service(s) found."
        exit 1
    }

    # Restart service(s)
    $Services | ForEach-Object {
        $AttemptCounter = $Attempts
        # Restart the service
        $Service = $_ | Restart-Service -PassThru
        # Wait till status of service reaches Running, timeout after $WaitTimeInSecs seconds
        $Service.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Running, [timespan]::FromSeconds($WaitTimeInSecs)) | Out-Null
        # Loop till either the service is in a running state or our $AttemptCounter reaches 0 or less
        while ($(Get-Service -Name $Service.ServiceName).Status -ne [System.ServiceProcess.ServiceControllerStatus]::Running -or $AttemptCounter -le 0) {
            # Start service
            Start-Service -Name $Service.ServiceName
            # Wait $WaitTimeInSecs seconds
            Start-Sleep -Seconds $WaitTimeInSecs
            $AttemptCounter = $AttemptCounter - 1
        }
        if ($((Get-Service -Name $Service.ServiceName).Status -ne [System.ServiceProcess.ServiceControllerStatus]::Running)) {
            # Add 1 to later show the count of services that failed to reach the running state
            $FailedToStart = $FailedToStart + 1
            Write-Error -Message "Failed to start service( $($Service.ServiceName) ) after $Attempts attempts."
        }
    }

    # Print out services with their status
    Get-Service | Where-Object { $_.Name -in $Name -or $_.DisplayName -in $Name }

    # Check if service(s) have started
    if ($FailedToStart -eq 0) {
        # All service(s) have been restarted
        Write-Host "All Service(s) restarted."
        exit 0
    }
    else {
        # Some or all Service(s) failed to restart
        Write-Error -Message "Failed to start $FailedToStart service(s)."
        exit 1
    }
}
end {}

 


Accédez à plus de 700 scripts dans le Dojo NinjaOne

Obtenez l’accès

Exploration de la cmdlet Restart-Service

La cmdlet `Restart-Service` de PowerShell est un outil puissant qui vous permet de redémarrer un service sur un ordinateur local ou distant. Cette commande consolide les processus d’arrêt et de démarrage d’un service, ce qui simplifie la gestion des services.

Extension de l’utilisation de notre script de service de redémarrage

Notre script PowerShell, conçu pour exploiter la cmdlet `Restart-Service`, offre une solution complète pour redémarrer un ou plusieurs services. Ce script, outre le redémarrage d’un service, fait trois tentatives de démarrage d’un service si celui-ci ne s’initialise pas immédiatement, en incorporant une pause de 15 secondes entre chaque tentative.

Applications du script

Notre script “Restart-Service” n’est pas seulement pratique pour le redémarrage immédiat d’un service, mais peut également être utilisé dans différents scénarios, tels que :

Redémarrages programmés

Vous pouvez utiliser le planificateur de tâches en conjonction avec notre script pour redémarrer les services selon un calendrier. Cela peut être utile pour les services qui doivent être redémarrés périodiquement pour libérer des ressources ou pour maintenir des performances optimales.

Redémarrage après la mise à jour

Après une mise à jour du système, il peut être nécessaire de redémarrer certains services. Notre script peut être utilisé dans un script post-mise à jour pour s’assurer que tous les services nécessaires sont redémarrés et fonctionnent correctement.

Dépannage du script

Malgré la robustesse des scripts PowerShell, il peut arriver que les choses ne se passent pas comme prévu. Voici quelques pistes pour résoudre les problèmes liés à notre script Restart-Service :

Journaux d’erreurs
PowerShell fournit des journaux d’erreurs détaillés qui peuvent être utilisés pour résoudre les problèmes. Si notre script ne parvient pas à redémarrer un service, vérifiez les journaux d’erreur pour voir s’il y a des messages d’erreur ou des exceptions qui peuvent fournir des indications sur ce qui n’a pas fonctionné.

Débogage du script
PowerShell offre des fonctions de débogage qui peuvent être utilisées pour parcourir le script et identifier où le problème se produit. Utilisez la commande`Set-PSDebug -Trace 1` pour activer la traçabilité du script, puis exécutez le script pour voir un affichage ligne par ligne des commandes exécutées.

Conclusions

En conclusion, PowerShell fournit une plateforme dynamique et efficace pour la gestion des services sur les systèmes Windows. Grâce à notre script PowerShell, vous pouvez automatiser le redémarrage des services, effectuer des opérations complexes avec un minimum de code et gérer les services sur plusieurs systèmes. Restez à l’écoute pour en savoir plus sur l’utilisation de PowerShell pour des opérations informatiques efficaces. 

Avec la plateforme complète de gestion des opérations informatiques de NinjaOne, vous pouvez intégrer et étendre l’utilisation de scripts personnalisés tels que notre script de redémarrage de service PowerShell sur de nombreux terminaux. La capacité de la plateforme à déployer et à gérer des scripts de façon centralisée permet d’exécuter des tâches complexes sur plusieurs appareils de façon optimale. Cela signifie que vous pouvez utiliser notre script pour gérer les services sur l’ensemble de votre réseau, à partir d’un tableau de bord unique, afin d’améliorer l’efficacité et de garantir la cohérence de vos opérations informatiques.

Pour aller plus loin

Pour créer une équipe informatique efficace et performante, il est essentiel d'avoir une solution centralisée qui joue le rôle de nœud principal pour vos services. NinjaOne permet aux équipes informatiques de surveiller, gérer, sécuriser et prendre en charge tous les appareils, où qu'ils soient, sans avoir besoin d'une infrastructure complexe sur site. Pour en savoir plus sur NinjaOne Endpoint Management, participez à une visite guidée, ou profitez d'un essai gratuit de la plateforme NinjaOne.

Catégories :

Vous pourriez aussi aimer

×

Voir NinjaOne en action !

En soumettant ce formulaire, j'accepte la politique de confidentialité de NinjaOne.

Termes et conditions NinjaOne

En cliquant sur le bouton “J’accepte” ci-dessous, vous indiquez que vous acceptez les termes juridiques suivants ainsi que nos conditions d’utilisation:

  • Droits de propriété: NinjaOne possède et continuera de posséder tous les droits, titres et intérêts relatifs au script (y compris les droits d’auteur). NinjaOne vous accorde une licence limitée pour l’utilisation du script conformément à ces conditions légales.
  • Limitation de l’utilisation: Les scripts ne peuvent être utilisés qu’à des fins personnelles ou professionnelles internes légitimes et ne peuvent être partagés avec d’autres entités.
  • Interdiction de publication: Vous n’êtes en aucun cas autorisé à publier le script dans une bibliothèque de scripts appartenant à, ou sous le contrôle d’un autre fournisseur de logiciels.
  • Clause de non-responsabilité: Le texte est fourni “tel quel” et “tel que disponible”, sans garantie d’aucune sorte. NinjaOne ne promet ni ne garantit que le script sera exempt de défauts ou qu’il répondra à vos besoins ou attentes particulières.
  • Acceptation des risques: L’utilisation du script est sous votre propre responsabilité. Vous reconnaissez qu’il existe certains risques inhérents à l’utilisation du script, et vous comprenez et assumez chacun de ces risques.
  • Renonciation et exonération de responsabilité: Vous ne tiendrez pas NinjaOne pour responsable des conséquences négatives ou involontaires résultant de votre utilisation du script, et vous renoncez à tout droit ou recours légal ou équitable que vous pourriez avoir contre NinjaOne en rapport avec votre utilisation du script.
  • EULA: Si vous êtes un client de NinjaOne, votre utilisation du script est soumise au contrat de licence d’utilisateur final qui vous est applicable (End User License Agreement (EULA)).