Question [script] résoudre les alias d'un script
- Jacques Barathon
- Auteur du sujet
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 17 ans 3 semaines #4168
par Jacques Barathon
[script] résoudre les alias d'un script a été créé par Jacques Barathon
Pour apporter une autre illustration de la nouvelle API de PowerShell v2 permettant d'analyser les éléments syntaxiques d'un script, voici un petit script encore incomplet que j'ai baptisé resolve-aliases.ps1.
Ce script permet de détecter les alias utilisés dans un script et propose la commande standard à laquelle l'alias correspond. Cela permet à un administrateur un peu pressé d'écrire ses scripts avec les raccourcis dont il a l'habitude et de faire un rapide nettoyage avant de le diffuser. En effet, il est couramment admis que dans un script il vaut mieux utiliser les noms complets des commandes plutôt que leur alias, histoire de faciliter sa maintenance et sa relecture par un oeil non averti.
Voici donc le script :
[code:1]
param ($script)
$text = get-content $script
$errs = $null
$tokens = [management.automation.psparser]::tokenize($text,[ref]$errs)
if ($errs) {throw $errs}
$tokens | where {
$_.type -eq \"Command\"
} | where {
$cmd = @(get-command $_.content)[0]; $cmd.commandtype -eq \"Alias\"
} | foreach {
\"{0}:{1}`t{2} => {3}\" -f $script,$_.startline,$_.content,$cmd.definition
}
[/code:1]
Et voici un exemple d'usage :
[code:1]
PS> .\resolve-aliases resolve-aliases.ps1
resolve-aliases.ps1:8 where => Where-Object
resolve-aliases.ps1:10 where => Where-Object
resolve-aliases.ps1:12 foreach => ForEach-Object
[/code:1]
A seigneur tout honneur, j'ai appliqué le script à lui-même et comme vous pouvez le voir, il a détecté trois alias: deux fois l'usage de where pour where-object, et une fois l'usage de foreach à la place de foreach-object. Ces usages sont sans doute parmi les plus courants.
Dans sa version actuelle, le script ne corrige rien. Il ne fait qu'afficher l'alias et la commande par laquelle il devrait être remplacé, le tout précédé du nom de fichier et du numéro de ligne concerné.
Dans les prochains jours je ferai une version complète - incluant la possibilité de corriger automatiquement le script.
Janel
Ce script permet de détecter les alias utilisés dans un script et propose la commande standard à laquelle l'alias correspond. Cela permet à un administrateur un peu pressé d'écrire ses scripts avec les raccourcis dont il a l'habitude et de faire un rapide nettoyage avant de le diffuser. En effet, il est couramment admis que dans un script il vaut mieux utiliser les noms complets des commandes plutôt que leur alias, histoire de faciliter sa maintenance et sa relecture par un oeil non averti.
Voici donc le script :
[code:1]
param ($script)
$text = get-content $script
$errs = $null
$tokens = [management.automation.psparser]::tokenize($text,[ref]$errs)
if ($errs) {throw $errs}
$tokens | where {
$_.type -eq \"Command\"
} | where {
$cmd = @(get-command $_.content)[0]; $cmd.commandtype -eq \"Alias\"
} | foreach {
\"{0}:{1}`t{2} => {3}\" -f $script,$_.startline,$_.content,$cmd.definition
}
[/code:1]
Et voici un exemple d'usage :
[code:1]
PS> .\resolve-aliases resolve-aliases.ps1
resolve-aliases.ps1:8 where => Where-Object
resolve-aliases.ps1:10 where => Where-Object
resolve-aliases.ps1:12 foreach => ForEach-Object
[/code:1]
A seigneur tout honneur, j'ai appliqué le script à lui-même et comme vous pouvez le voir, il a détecté trois alias: deux fois l'usage de where pour where-object, et une fois l'usage de foreach à la place de foreach-object. Ces usages sont sans doute parmi les plus courants.
Dans sa version actuelle, le script ne corrige rien. Il ne fait qu'afficher l'alias et la commande par laquelle il devrait être remplacé, le tout précédé du nom de fichier et du numéro de ligne concerné.
Dans les prochains jours je ferai une version complète - incluant la possibilité de corriger automatiquement le script.
Janel
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.068 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- [script] résoudre les alias d'un script