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
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.