Ils sont "intégrés" mais pas immuables. Note:
PS > (Get-Alias dir).Options
AllScope
PS > (Get-Alias gci).Options
ReadOnly, AllScope
PS > Get-Alias | group Options
Count Name Group
----- ---- -----
91 ReadOnly, AllScope {%, ?, ac, asnp...}
46 AllScope {cat, cd, chdir, clear...}
Comme vous pouvez le voir, il y a un certain cloisonnement des alias par l'option ReadOnly
. Les ReadOnly
sont idiomatiques dans PowerShell, tandis que les mutables sont pour les personnes familières avec d'autres coques. J'ai vu des gens modifier dir
pour ajouter plus de fonctionnalités, tout en gardant gci
comme un alias droit à Get-ChildItem
.
Pour une compatibilité étendue, j'utilise uniquement les alias ReadOnly
dans mes scripts.
Aussi, parce que dir
dans le CMD, ls
sous UNIX et gci
dans PowerShell chaque œuvre à leur manière, je me former à utiliser la commande native, et non un alias. dir
a tendance à travailler partout, mais pas dir -Recurse
!
Comme un exercice de formation, et de tester mes scripts pour la compatibilité, je supprimer parfois les ReadOnly
non alias:
Get-Alias | ? { ! ($_.Options -match "ReadOnly") } | % { Remove-Item alias:$_ }
Il y a une approche plus douce où vous remplacez chaque alias avec une nouvelle commande qui vous avertit que vous utilisez l'un des alias de compatibilité, mais vous permet de continuer à fonctionner.
En outre, vous pouvez modifier les ReadOnly
alias si vous voulez vraiment, mais pour les raisons ci-dessus je recommande contre:
PS > Set-Alias -Name sl -Value Get-ChildItem -Force -Option AllScope # BAD!
PS > sl
Directory: C:\Users\Jay
Mode LastWriteTime Length Name
---- ------------- ------ ----
Merci (et d'autres aussi) pour une excellente explication! – Xerion
En fait, la partie que vous étiez étiqueté comme «# BAD!» Est exactement ce que je cognais ma tête contre le mur en essayant de comprendre comment faire - remplacer un alias ReadOnly. J'avais essayé ** - Force ** et ** - Option AllScope ** séparément, et bien sûr aucun d'entre eux n'a fonctionné. Pour une raison ou une autre, il ne m'est pas venu à l'esprit que chacun aborde un obstacle différent, les deux s'appliquant aux alias ReadOnly, ils doivent donc être utilisés ensemble ... duh! –
Si vous devez savoir, je voulais alias ** sl ** à ** Push-Location ** afin que je puisse changer le comportement sans changer mes habitudes. Il peut également être utile d'avoir un alias intégré référençant une commande proxy de la commande à laquelle il fait normalement référence. Encore une fois, changer le comportement de la commande sans changer vos habitudes. Alors ... ce n'est pas forcément toujours "# BAD!".;) –