Bonjour à tous,
Après avoir écumé toutes les pages de technet, msdn, le scripting-guy et les mots clés de l'intitulé, je n'ai pas réussi à résoudre mon dilemme.
http://blogs.msdn.com/b/powershell/a...directory.aspx
Je fais appel à votre bon coeur !
Le contexte :
Je créé un script avec [cmdletbinding].
J'utilise l'attribut de validation [ValidateScript] pour tester l'existence du fichier tomcat-6.0.zip dans C:\Update_Pajee_2.1.3\setup\BIN\PAJEE.
Le but est d'exécuter le script toujours à partir de l'emplacement du script et non à partir du répertoire courant, exemple : pour un déploiement via SCCM
Message d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 [cmdletbinding()] param( [ValidateScript({ Test-Path -path (Join-Path -path (Split-Path -parent -path $MyInvocation.MyCommand.Path) -childpath setup\bin\pajee\$_ )})] [string]$Tomcat ) $tomcat
J'en déduis - peut être à tort - que $myinvocation.mycommand.path est vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 C:\Update_Pajee_2.1.3\path.ps1 : Impossible de valider l'argument sur le paramètre «*Tomcat*». Impossible de lier l'argument au paramètre «*Path*», car il a la valeur Null. Au niveau de ligne*: 1 Caractère*: 11 + .\path.ps1 <<<< tomcat-6.0.zip + CategoryInfo : InvalidData: (:) [path.ps1], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,path.ps1
Ceci étant j'ai fais beaucoup de test, dont 2 intéressant :
- Porté du script
j'exécute le script suivant
PS C:\Update_Pajee_2.1.3> .\path.ps1 tomcat-6.0.zip
qui contient le code suivant
Et le résultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 [cmdletbinding()] param( [string]$Tomcat ) Test-Path -path (Join-Path -path (Split-Path -parent -path $MyInvocation.MyCommand.Path) -childpath setup\bin\pajee\$tomcat)
Je change de répertoire courant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 PS C:\Update_Pajee_2.1.3> .\path.ps1 tomcat-6.0.zip True
Ca marche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 PS C:\Update_Pajee_2.1.3> cd \ PS C:\> C:\Update_Pajee_2.1.3\path.ps1 tomcat-6.0.zip True
Mais ma contrainte est de le fournir dans [ValidateScript] pour valider l'existence du fichier (en cas d'erreur de syntaxe ou inexistence du fichier).
- Portée du module
Je travaille essentiellement avec des modules (fichiers *.psm1).
Donc j'ai réutilisé la fonction du site de stackoverflow
Puis dans un script je fais un join-path avec la fonction et le chemin setup\bin\pajee\$tomcat dans le [ValidateScript], j'avais un message d'erreur, mais un "bon" message d'erreur... celui qui vous dit justement que la variable n'est pas validée à $true, veuillez trouver le problème....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function Get-ScriptDirectory { Split-Path $script:MyInvocation.MyCommand.Path }
Donc ça veut dire 2 choses, ça marche dans les param, sauf qu'il me renvoie pas le chemin du script mais celui du module, et la seconde, c'est en essayant de tester autre que $script, soit $local, $global... puis au niveau de la fonction, au moins 20 tests croisés(dont la création d'une fonction dans le [validatescript], avec toutes les variantes de portées), et bien ça marche toujours pas, mais je sens que je ne suis pas loin, j'ai la tête tellement dans le guidon, que je dois faire une boulette de newbie et que je n'arrive plus à réfléchir normalement.
Je continue à chercher, le premier de nous tous qui saurait orienter vers une idée nouvelle, logique, exotique... je prends !
Cordialement,
Vincent
Partager