salut,
le verbe "GET" est l'un des verbes autorisés dans le nommage des fonctions et cmdlets.
PS II> Get-Verb -verb get
on peux omettre ce verbe pour toutes les cmdlets et fonctions:
1 2
| PS II> childitem c:\inuse | acl
PS II> hotfix; psdrive |
sauf les cmdlets get-command et get-process ne supportent pas cette omission parceque le mot "process" est un mot reservé (help keywords) et "command" est vu par powershell comme etant le vieux shell "command.com"
PS II> man key | Select-String "\s{5,}about_*"
il est à noter aussi que les fonction ayant comme nom un mot reservé seront traiter comme étant des mots reservés et non pas comme étant des fonctions
1 2 3
| PS II> function get-Function {1}
PS II> function
>> |
et s'il s'agissait d'un nom d'un executable alors l'interpréteur powershell traitera cette fonction comme étant une commande externe et non pas une fonction
1 2 3 4 5 6
| PS II> function get-cmd {1}
PS II> cmd
Microsoft Windows XP [version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
D:\> |
l'omission du verbe "GET" à un grand désavantage est qu'on ne pourra plus bénéficier de la puissance de la complétion de powershell
PS II> Serv{TAB]ice -n[TAB] alg
un autre désavantage, est que parfois avec la l'utilisation de cmdlet get-help on se retrouve devant des resultats inatendus
1 2 3 4 5 6
| PS II> help verb
NOM
Write-Verbose
...
..... |
pour finir, voici une petite fonction qui s'appuie sur les mots reservé et teste si une commande est valide ou pas
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| PS II> cat c:\inuse\scripts\psh\tcv.ps1
#############################################################
#
# PS D:\> Test-CommandValidation -command get-process | fl
# VerbNounConvention : True
# ReservedKeyWords : True
# VerbConvention : True
#
#############################################################
function Test-CommandValidation {
param($Command)
$keys = man key |
Select-String "(\S+)(?=\s{5,}about_*)" |
select -expand Matches |
select -expand value
$verbNounConvention = $verbconvention = $reservedkeywords = $false
$verb,$noun = $Command.Split('-')
if($noun) {
$verbNounConvention = $true
if( (get-verb $verb) ) { $verbconvention = $true }
if($keys -contains $noun) { $reservedkeywords = $true }
}
else {
$reservedkeywords = $verbconvention = $null
}
new-object PSObject -prop @{
VerbNounConvention = $verbNounConvention
VerbConvention = $verbconvention
ReservedKeyWords = $reservedkeywords
}
} |
Partager