HOWTO · PowerShell
Comment exécuter un script PowerShell sans afficher de fenêtre
Exécutez des scripts PowerShell avec une fenêtre masquée ou le Planificateur de tâches, et comprenez les limites du contexte de lancement, les fichiers batch et les alternatives de service.
Sur cette page
Sous Windows, lancez un script avec powershell.exe -NoProfile -WindowStyle Hidden -File "C:\Scripts\Task.ps1", en remplaçant le chemin entre guillemets par le chemin absolu de votre script. Le paramètre -WindowStyle Hidden contrôle l’apparence de la fenêtre PowerShell ; il ne garantit pas que chaque lanceur ou application enfant reste invisible.
Exécuter PowerShell avec -WindowStyle Hidden
Utilisez la commande ci-dessus depuis un lanceur Windows tel que la boîte de dialogue Exécuter. -File identifie le script ; les guillemets protègent les chemins contenant des espaces. -NoProfile ignore les scripts de démarrage du profil, votre tâche doit donc charger ses propres dépendances.
La visibilité de la fenêtre dépend de l’hôte et du contexte de lancement : une console peut apparaître brièvement au démarrage. Ne comptez pas sur cette commande pour masquer un terminal déjà ouvert. Les applications lancées par le script peuvent afficher leurs propres fenêtres. Une fenêtre masquée ne masque pas non plus le processus dans le Gestionnaire des tâches.
Les instructions de lancement Windows de cet article sont des illustrations non exécutées ; aucun comportement de fenêtre observé ni aucune sortie de commande n’est fourni.
Lancer le script à partir d’un fichier batch
Enregistrez deux lignes dans run_script.bat : d’abord @echo off, puis powershell.exe -NoProfile -WindowStyle Hidden -File "C:\Scripts\Task.ps1". Remplacez le chemin avant de l’exécuter.
@echo off supprime l’écho des commandes dans la console batch. Il ne masque pas cette console, ne supprime pas la sortie du script et n’empêche pas un flash au démarrage. Un fichier batch est pratique pour des lancements répétés, mais le Planificateur de tâches convient mieux au travail sans surveillance et sans console interactive.
Exécuter le script avec le Planificateur de tâches
- Ouvrez le Planificateur de tâches, choisissez Créer une tâche et donnez à la tâche un nom descriptif.
- Dans Général, sélectionnez un compte ayant accès au script et à ses ressources. Pour le travail sans surveillance, choisissez Exécuter même si l’utilisateur n’est pas connecté et fournissez des identifiants si vous y êtes invité. Cela utilise un contexte non interactif ; les scripts nécessitant une interaction avec le bureau peuvent échouer. Activez Exécuter avec les privilèges les plus élevés uniquement lorsque la tâche nécessite une élévation et que le compte y est autorisé. L’élévation ne contrôle pas la visibilité.
- Dans Déclencheurs, ajoutez la planification ou l’événement dont vous avez besoin.
- Dans Actions, choisissez Nouveau et Démarrer un programme. Sélectionnez l’exécutable
powershell.exeinstallé. Dans Ajouter des arguments, saisissez-NoProfile -NonInteractive -WindowStyle Hidden -File "C:\Scripts\Task.ps1". Définissez Démarrer dans surC:\Scriptssans guillemets, en adaptant les deux chemins.-NonInteractiveempêche les invites de saisie d’attendre un utilisateur ; il ne masque pas les fenêtres. - Enregistrez la tâche, cliquez dessus avec le bouton droit et choisissez Exécuter pour un test manuel. Cela la démarre immédiatement sans attendre son déclencheur. Inspectez son historique, le Résultat de la dernière exécution et les journaux du script.
Utiliser PSExec ou NSSM uniquement pour les tâches adaptées
PSExec, de Microsoft Sysinternals, convient à l’administration à distance ou à l’exécution sous un autre compte. Son option -d signifie ne pas attendre, et -s sélectionne le compte SYSTEM ; aucune des deux n’est un commutateur de masquage de fenêtre. SYSTEM a un accès aux ressources différent de celui de votre compte utilisateur. Ces options sont inutiles pour les lancements masqués ordinaires.
NSSM (Non-Sucking Service Manager) encapsule les applications en tant que services Windows. Obtenez-le depuis son site de téléchargement officiel, https://nssm.cc/download. L’installation d’un service nécessite des droits d’administration. Configurez délibérément l’exécutable PowerShell, les arguments du script, le répertoire de travail, le compte du service, la journalisation et le comportement de redémarrage. Utilisez-le pour des charges de travail de type service qui n’ont pas besoin d’un bureau interactif ; un court script planifié n’a généralement besoin que du Planificateur de tâches. Le contournement de la politique d’exécution modifie la gestion de la politique de script, pas la visibilité des fenêtres, et n’est pas requis pour masquer une fenêtre.
Tester le script et choisir la bonne méthode
Exécutez d’abord votre script de manière visible sous le compte prévu. Vérifiez les autorisations des fichiers, les dépendances, les chemins absolus et les messages de politique d’exécution. Les comptes planifiés peuvent ne pas disposer de vos lecteurs mappés ou des paramètres de votre profil. Enregistrez la sortie et les erreurs à un emplacement où ce compte peut écrire ; une fenêtre qui disparaît n’est pas une preuve de succès.
Cet exemple de journalisation PowerShell autonome n’est pas exécuté. Il écrit un message d’achèvement dans un fichier temporaire, le lit, puis supprime le fichier ensuite :
$logPath = [System.IO.Path]::GetTempFileName()
try {
'Task completed' | Set-Content -LiteralPath $logPath
Get-Content -LiteralPath $logPath
}
finally {
Remove-Item -LiteralPath $logPath
}
Pour votre script réel, conservez un fichier journal stable et enregistrez les échecs en plus de l’achèvement. Choisissez le lancement direct pour un usage occasionnel, un fichier batch pour la commodité, le Planificateur de tâches pour les déclencheurs sans surveillance, ou NSSM pour une charge de travail de service. Vérifiez le comportement dépendant du bureau sur la machine Windows cible avant de vous fier à un lancement masqué.