windows - start - powershell script don t show window



Comment exécuter un script PowerShell sans afficher de fenêtre? (5)

J'avais ce même problème. J'ai découvert si vous allez à la tâche dans le planificateur de tâches qui exécute le script powershell.exe , vous pouvez cliquer sur " Exécuter si l'utilisation est connectée ou non " et qui ne montrera jamais la fenêtre powershell lorsque la tâche s'exécute.

https://ffff65535.com

Comment est-il possible d'exécuter un script PowerShell sans afficher de fenêtre ni d'autre signe pour l'utilisateur?

En d'autres termes, le script devrait fonctionner silencieusement en arrière-plan sans aucun signe pour l'utilisateur.

Crédit supplémentaire pour une réponse qui n'utilise pas de composants de tiers :)


J'avais ce problème lors de l'exécution de c #, sur Windows 7, le service "Interactive Services Detection" apparaissait lors de l'exécution d'une fenêtre PowerShell caché en tant que compte système.

L'utilisation du paramètre "CreateNoWindow" a empêché le service ISD d'afficher son avertissement.

process.StartInfo = new ProcessStartInfo("powershell.exe",
    String.Format(@" -NoProfile -ExecutionPolicy unrestricted -encodedCommand ""{0}""",encodedCommand))
{
   WorkingDirectory = executablePath,
   UseShellExecute = false,
   CreateNoWindow = true
};

Voici un one-liner:

mshta vbscript:Execute("CreateObject(""Wscript.Shell"").Run ""powershell -NoLogo -Command """"& 'C:\Example Path That Has Spaces\My Script.ps1'"""""", 0 : window.close")

Bien qu'il soit possible de faire clignoter une fenêtre très brièvement, cela devrait être rare.


Voici une approche qui ne nécessite pas d'arguments de ligne de commande ou un lanceur distinct. Ce n'est pas complètement invisible car une fenêtre s'affiche momentanément au démarrage. Mais il disparaît rapidement. Là où c'est OK, c'est, je pense, l'approche la plus simple si vous voulez lancer votre script en double-cliquant dans l'explorateur, ou via un raccourci du menu Démarrer (y compris, bien sûr, le sous-menu Démarrage). Et j'aime bien que ça fasse partie du code du script lui-même, pas quelque chose d'extérieur.

Mettez ceci à l'avant de votre script:

$t = '[DllImport("user32.dll")] public static extern bool ShowWindow(int handle, int state);'
add-type -name win -member $t -namespace native
[native.win]::ShowWindow(([System.Diagnostics.Process]::GetCurrentProcess() | Get-Process).MainWindowHandle, 0)





silent