Question [script] résoudre les alias d'un script

Plus d'informations
il y a 17 ans 3 semaines #4168 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

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.069 secondes
Propulsé par Kunena