Question

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

En d'autres termes, le script doit être exécuté silencieusement en arrière-plan, sans aucun signe pour l'utilisateur.

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

Était-ce utile?

La solution

Vous pouvez soit l'exécuter comme ceci (mais cela montre une fenêtre pendant un moment):

PowerShell.exe -windowstyle hidden { your script.. }

Ou utilisez un fichier d'aide que j'ai créé pour éviter la fenêtre appelée PsRun.exe qui fait exactement cela. Vous pouvez télécharger le fichier source et le fichier exe Exécutez des tâches planifiées avec l'interface graphique WinForm dans PowerShell . Je l'utilise pour des tâches planifiées.

Modifié: comme l'a noté Marco, ce paramètre -windowstyle n'est disponible que pour la V2.

Autres conseils

Vous pouvez utiliser les extensions de communauté PowerShell et le faire:

start-process PowerShell.exe -arg $pwd\foo.ps1 -WindowStyle Hidden

Vous pouvez également le faire avec VBScript: http://blog.sapien.com/index.php/2006/12/26/more-fun-with-scheduled-powershell/

(Via cette discussion sur le forum .

Voici une approche qui n'exige pas d'arguments de ligne de commande ou un programme de lancement distinct. Ce n'est pas complètement invisible car une fenêtre apparaît momentanément au démarrage. Mais il disparaît ensuite rapidement. À mon avis, c’est l’approche la plus simple si vous souhaitez lancer votre script en double-cliquant sur 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 cela fasse partie du code du script lui-même, pas quelque chose d'extérieur.

Placez ceci au début 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)

J'avais le même problème. J'ai découvert que si vous accédez à la tâche de Planificateur de tâches qui exécute le script powershell.exe , vous pouvez cliquer sur & Quot; Indiquer si l'utilisateur est connecté ou non " et cela ne montrera jamais la fenêtre PowerShell lorsque la tâche sera exécutée.

J'avais ce problème lors de l'exécution à partir de c #, sous Windows 7, la & détection de services interactifs & "; Le service apparaissait lors de l'exécution d'une fenêtre Powershell masquée en tant que compte SYSTEM.

Utilisation de " CreateNoWindow " paramètre 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")

Même s'il est possible que cela clignote très brièvement, cela devrait être rare.

J'ai créé un petit outil qui transmet l'appel à tout outil de la console que vous souhaitez démarrer sans fenêtre jusqu'au fichier d'origine:

https://github.com/Vittel/RunHiddenConsole

Après la compilation, renommez l'exécutable en & "; < targetExecutableName > w.exe &"; (ajoutez un " w ") et placez-le à côté de l'exécutable d'origine. Vous pouvez alors appeler e.G. powershellw.exe avec les paramètres habituels et une fenêtre ne s’ouvrira pas.

Si quelqu'un a une idée de la façon de vérifier si le processus créé attend une entrée, je serais heureux d'inclure votre solution:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top