Windows PowerShell : Nouvelle syntaxe dans le nouveau Shell
Pour certaines commandes, une nouvelle syntaxe dans Windows PowerShell version 3 vous permet d'écrire des commandes plus faciles à lire, mais quelque peu limitées.
Don Jones
Une des nouvelles fonctionnalités de Windows PowerShell version 3 est une nouvelle forme de syntaxe pour les applets de commande Where-Object et ForEach-Object. Deux de ces applets de commande acceptent normalement un scriptblock (dans le cas de Where-Object, il a appelé un filterscript, parce qu'elle doit retourner soit $True ou $False).
Au sein de cette scriptblock, vous utilisez symbole $_ espace réservé pour représenter « quelle que soit a été redirigée dans à la cmdlet. » Voici un exemple utilisant les deux applets de commande (ce n'est pas une commande sensible de monde réel, mais il illustre l'utilisation des applets de commande) :
Get-WmiObject –class Win32_LogicalDisk | Where-Object –filterscript{ $_.DriveType –eq 3 } | ForEach-Object –process { $_.ChkDsk() }
Vous voyez jamais ces commandes écrits de cette façon. Gens ont tendance à utiliser des alias, des noms de paramètre tronqué et des paramètres positionnels pour éviter de taper. Ce qui suit n'est inhabituel :
gwmi Win32_LogicalDisk | ? { $_.DriveType –eq 3 } | % { $_.ChkDsk() }
Il n'y rien à voir avec un peu de syntaxe arcane afin d'assurer la sécurité de l'emploi, à droite ? Nouvelle syntaxe de l'objet-où vous permet de faire cela :
gwmi Win32_LogicalDisk | where DriveType –eq 3 | % { $_.ChkDsk() }
Avis que je suis passé à un alias différent pour l'applet de commande. Vous pouvez toujours utiliser ? Si vous voulez, mais que drives me crazy. Je viens d'une formation longue base, où ? est un raccourci pour l'instruction Print. Lecture ? dans un Windows PowerShell commande blesse mon cerveau. J'ai également dispensé avec les accolades et le symbole _ $.
Essentiellement, où-objet a maintenant un paramètre positionnel d'accepter la propriété que vous souhaitez filtrer sur (DriveType, dans mon exemple). Il définit tous les opérateurs principaux de Windows PowerShell (- eq, - ne, - comme, - gt, etc.) comme paramètres. La valeur de ce paramètre est la valeur que vous souhaitez filtrer pour (ici, la valeur est 3). Cette forme raccourcie est plus facile à lire, mais vous pouvez l'utiliser uniquement pour une seule comparaison. Par exemple, ce qui suit n'est une déclaration légale :
Gwmi Win32_Service | Where StartMode –eq 'Auto' –and State –ne 'Running'
Pour cela, vous devrez revenir à la syntaxe de la vieille école :
Gwmi Win32_Service | Where { $_.StartMode –eq 'Auto' –and $_.State –ne 'Running' }
ForEach-Object obtient une forme de syntaxe similaire, ponctuation réduite :
gwmi Win32_LogicalDisk | where DriveType –eq 3 | foreachChkDsk()
Encore une fois, j'ai passé à l'alias ForEach au lieu de % pour rendre cela plus facile à lire. Vous pouvait continuer à utiliser % si vous le souhaitez. Un de mes collègues MVP a écrit une article blog grand sur ces raccourci des formes, et il vaut une lecture. Il présente également des $PSItem, qui semble être un remplaçant pour le symbole de _ $ souvent mal compris.
Personnellement, j'ai des mitigés sentiments au sujet de ces nouvelles formes de syntaxe. D'une part, ils sont certainement plus faciles pour un nouvel arrivant à saisir. Éliminer les accolades et la $_ toujours source de confusion est grand. D'autre part, ces nouvelles formes ne sont pas entièrement fonctionnels. Ils peuvent seulement faire une simple comparaison. Vous devrez encore apprendre l'ancienne syntaxe.
Aussi, il y a plus de six ans de l'ancienne syntaxe flottante de blogs, articles de magazines et des livres du peuple. Vous allez encore avoir besoin de connaître la syntaxe de l'ancienne afin de rendre le sens de ces exemples.
Si cette nouvelle syntaxe n'est pas éliminer la nécessité de connaître la syntaxe de l'ancienne. Cela signifie que vous avez deux formes à retenir au lieu d'un. Néanmoins, c'est ce que nous devons travailler avec, c'est la façon dont nous travaillerons.
Don Jones est un Microsoft MVP lauréat et auteur de « Apprendre Windows PowerShell dans un mois de repas » (Manning Publications, 2011), un livre conçu pour aider à tout administrateur de devenir efficace avec Windows PowerShell. Jones offre également le publique et sur les lieux de formation Windows PowerShell. Communiquer avec lui par ConcentratedTech.com ou bit.ly/AskDon.