90 votes

Comment passer les paramètres nécessaires à script dans Powershell ISE ?

Voir le titre.

J'ai spécifié les paramètres nécessaires dans l'en-tête d'un script :

param ($G_ARCHIVE = $(throw "Need file to upload!"),
       $G_LOGFILE = $(throw "Need logfile!"))

Lorsque je veux déboguer le script avec Powershell ISE : comment puis-je remplir ces paramètres ?

92voto

Roman Kuzmin Points 13913

Utilisez le volet de commande. Ouvrez le fichier script dans l'éditeur ISE, définissez les points d'arrêt (F9). Ensuite, dans le panneau de commande, tapez une commande invoquant ce script avec les paramètres requis. Je ne pense pas qu'il existe un autre moyen (intégré) de faire cela dans ISE.

9 votes

Cette approche n'a pas fonctionné pour moi car mon chemin de fichier contenait des espaces, la solution a été d'utiliser la fonction "esperluette" de la manière suivante : PS C:\Windows > &("c : \my dossier \<strkeep>script<strkeep>.ps1 ") -myArg 123 -anotherArg abc

5 votes

Vous pouvez en fait utiliser le chemin relatif : . \<strkeep>script<strkeep>.ps1

37voto

Ashraf Points 515
  1. Ouvrir le script (myscript.ps1) dans Windows Powershell ISE
  2. Appuyez sur F9 à la variable que vous voulez inspecter (déboguer). Par exemple, la deuxième ligne de l'exemple ci-dessous, où la variable $outputText est assignée.
  3. Dans la fenêtre du shell, fournir le chemin relatif du script ainsi que la valeur du paramètre. Par exemple : . \myscript.ps1 "ma valeur"
  4. Appuyez sur la touche Entrée (vous n'avez pas besoin d'appuyer sur la touche F5 )
  5. Vous pourrez voir les points d'arrêt de débogage mis en évidence par la couleur jaune. Placez votre curseur sur la variable souhaitée pour inspecter la valeur actuelle.

A sample showing PowerShell debugging with ISE and command parameter

2 votes

En quoi cette réponse est-elle différente de celle qui a été acceptée ?

10 votes

J'ai pensé qu'une explication plus détaillée avec une illustration serait utile pour les autres. Par exemple, il est nécessaire de fournir l'emplacement relatif (ou absolu), qui n'a pas été fourni en premier lieu.

19voto

PatrickFranchise Points 301

Il existe un autre moyen. Vous pouvez utiliser le $PSDefaultParameterValues variable automatique, qui existe (depuis la v3) pour fournir de nouveaux arguments par défaut aux cmdlets et aux avancé (ne fonctionne pas avec les fonctions normales). Cependant, cela fonctionne pour les scripts, même lors du débogage dans ISE. Vous devez déclarer [CmdletBinding()] o [Parameter()] comme vous le feriez pour une fonction avancée.

Donc, pour votre exemple,

[CmdletBinding()]
param ($G_ARCHIVE = $(throw "Need file to upload!"),
$G_LOGFILE = $(throw "Need logfile!"))

vous devez exécuter quelque chose comme ceci sur l'invite ISE :

$PSDefaultParameterValues.add("ExampleScript.ps1:G_ARCHIVE","File-to-upload.txt")
$PSDefaultParameterValues.add("ExampleScript.ps1:G_LOGFILE","Example.log")

Vous pouvez également définir la valeur du paramètre dans un bloc script qui s'exécutera automatiquement au moment de l'exécution :

$PSDefaultParameterValues["ExampleScript.ps1:G_LOGFILE"]={
  "Example-{0:yyMMddHHmm}.log" -f [datetime]::Now
}

La variable est une table de hachage et toute la syntaxe standard s'applique, sauf l'élément clé doit comporter le nom du script (ou de la fonction avancée ou du cmdlet) suivi de deux points puis du nom du paramètre. Vous pouvez définir des valeurs par défaut pour plusieurs scripts ou commandes, et plusieurs paramètres pour chacun d'eux (chaque paramètre est une nouvelle entrée de table).

En procédant de cette façon, vous pouvez juste taper F5 pour exécuter votre script comme d'habitude. Les paramètres seront pris dans la variable, donc vous n'avez pas besoin de taper quoi que ce soit.

Autres cas d'utilisation de $PSDefaultParameterValues Il peut y avoir des personnalisations, comme par exemple faire en sorte que la commande Get-History n'obtienne que les 10 dernières entrées, à moins que vous ne spécifiiez l'attribut -Count dans la commande. Étant donné que les entrées ne persistent que pendant la session en cours, il est préférable d'ajouter des personnalisations à la commande profil . Vous pouvez en savoir plus en tapant Get-Help about_Parameters_Default_Values à l'invite ou consultez les mêmes informations sur TechNet .

2voto

S. Barij Points 1

Il existe un moyen beaucoup plus simple de définir les paramètres nécessaires dans ISE :

Avant d'appuyer sur F5 dans ISE, définissez le paramètre dont vous avez besoin. Je commente généralement le paramètre dont j'ai besoin, par exemple : # $G_ARCHIVE = " C:\Temp\TestFile_001.txt "

Je sélectionne tout ce qui suit "#" et j'appuie sur F8 . La prochaine fois que je déboguerai le script avec F5 Le paramètre est défini à la valeur que je teste, il n'est pas nécessaire de passer les paramètres par la ligne de commande.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X