Question

J'ai quelques lignes de code PowerShell que j'aimerais utiliser comme script automatisé.La façon dont j'aimerais que cela fonctionne est de pouvoir l'appeler en utilisant l'une des options suivantes :

  1. Une ligne de commande qui ouvre PowerShell, exécute le script et ferme PowerShell (cela serait utilisé pour une routine de construction globale)
  2. Un fichier sur lequel je peux double-cliquer pour exécuter ce qui précède (j'utiliserais cette méthode pour tester manuellement les composants de mon processus de construction)

J'ai parcouru la documentation PowerShell en ligne et, même si je peux trouver de nombreux scripts, je n'ai pas trouvé d'instructions sur la façon de faire ce dont j'ai besoin.Merci pour l'aide.

Était-ce utile?

La solution

Enregistrez votre script en tant que fichier .ps1 et lancez-le à l'aide de powershell.exe, comme ceci :

powershell.exe .\foo.ps1

Assurez-vous de spécifier le chemin complet du script et assurez-vous d'avoir défini votre niveau de stratégie d'exécution sur au moins « RemoteSigned » afin que les scripts locaux non signés puissent être exécutés.

Autres conseils

Depuis http://blogs.msdn.com/b/jaybaz_ms/archive/2007/04/26/powershell-polyglot.aspx

Si vous êtes prêt à salir votre beau script PowerShell avec un peu de CMD, vous pouvez utiliser une astuce polyglotte PowerShell-CMD.Enregistrez votre script PowerShell en tant que fichier .CMD et placez cette ligne en haut :

@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %*);'+[String]::Join(';',(Get-Content '%~f0') -notmatch '^^@PowerShell.*EOF$')) & goto :EOF

Si vous avez besoin de soutenir des arguments cités, il existe une version plus longue, qui autorise également les commentaires.(notez l'astuce inhabituelle de commentaire CMD du double @).

@@:: This prolog allows a PowerShell script to be embedded in a .CMD file.
@@:: Any non-PowerShell content must be preceeded by "@@"
@@setlocal
@@set POWERSHELL_BAT_ARGS=%*
@@if defined POWERSHELL_BAT_ARGS set POWERSHELL_BAT_ARGS=%POWERSHELL_BAT_ARGS:"=\"%
@@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %POWERSHELL_BAT_ARGS%);'+[String]::Join(';',$((Get-Content '%~f0') -notmatch '^^@@'))) & goto :EOF

Source pour la réponse de Matt.

Je peux le faire exécuter en double-cliquant sur un fichier en créant un fichier batch contenant les éléments suivants :

C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe LocationOfPS1File

Exécuter le script automatiquement à partir d'un autre script (par ex.Fichier de commandes)

Comme l'a suggéré Matt Hamilton, créez simplement votre script PowerShell .ps1 et appelez-le en utilisant :

PowerShell C:\Path\To\YourPowerShellScript.ps1

ou si le répertoire de travail de votre fichier batch est le même répertoire que celui dans lequel se trouve le script PowerShell, vous pouvez utiliser un chemin relatif :

PowerShell .\YourPowerShellScript.ps1

Et avant que cela fonctionne, vous devrez définir la politique d'exécution du PC, ce que je montre comment faire ci-dessous.


Exécuter le script manuellement, méthode 1

Tu peux voir mon article de blog pour plus d'informations, mais créez essentiellement votre fichier de script PowerShell .ps1 pour faire ce que vous voulez, puis créez un fichier de commandes .cmd dans le même répertoire et utilisez ce qui suit pour le contenu du fichier :

@ECHO OFF
SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%MyPowerShellScript.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'"

Remplacement MonPowerShellScript.ps1 sur la 3ème ligne avec le nom de fichier de votre script PowerShell.

Cela vous permettra de simplement double-cliquer sur le fichier batch pour exécuter votre script PowerShell et vous évitera d'avoir à modifier votre politique d'exécution PowerShell.

Mon article de blog montre également comment exécuter le script PowerShell en tant qu'administrateur si c'est quelque chose que vous devez faire.


Exécuter le script manuellement, méthode 2

Alternativement, si vous ne souhaitez pas créer de fichier batch pour chacun de vos scripts PowerShell, vous pouvez modifier le comportement par défaut du script PowerShell de Modifier à Exécuter, ce qui vous permet de double-cliquer sur vos fichiers .ps1 pour les exécuter.

Il existe un paramètre de registre supplémentaire que vous souhaiterez modifier afin de pouvoir exécuter des scripts dont le chemin de fichier contient des espaces.Je montre comment faire ces deux choses sur ce billet de blog.

Cependant, avec cette méthode, vous devrez d'abord définir votre politique d'exécution pour autoriser l'exécution des scripts.Vous ne devez le faire qu'une seule fois par PC et cela peut être fait en exécutant cette ligne dans une invite de commande PowerShell.

Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy RemoteSigned -Force' -Verb RunAs

Set-ExecutionPolicy RemoteSigned-Force est la commande qui modifie réellement la politique d'exécution ;cela le définit sur Signé à distance, vous pouvez donc le remplacer par autre chose si vous en avez besoin.De plus, cette ligne exécutera automatiquement PowerShell en tant qu'administrateur pour vous, ce qui est nécessaire pour modifier la politique d'exécution.

vous pouvez utiliser cette commande :powershell.exe -argument c:\scriptPath\Script.ps1

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