Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Conditions préalables
Le module SqlServer PowerShell est requis par certains exemples présentés dans ce chapitre. Pour plus d’informations sur le module SqlServer PowerShell et les instructions d’installation, consultez Vue d’ensemble de SQL Server PowerShell. Il est également utilisé dans les chapitres suivants. Téléchargez et installez-le sur votre ordinateur d’environnement Windows Lab.
Mettre en forme à droite
Dans le chapitre 4, vous avez appris à filtrer le plus loin possible vers la gauche. La règle de mise en forme manuelle de la sortie d’une commande est similaire à cette règle, sauf qu’elle doit se produire aussi loin que possible à droite.
Les commandes de format les plus courantes sont Format-Table et Format-List. Format-Wide et Format-Custom peuvent également être utilisés, mais sont moins courants.
Comme mentionné dans le chapitre 3, une commande qui retourne plus de quatre propriétés par défaut à une liste, sauf si la mise en forme personnalisée est utilisée.
Get-Service -Name w32time |
Select-Object -Property Status, DisplayName, Can*
Status : Running
DisplayName : Windows Time
CanPauseAndContinue : False
CanShutdown : True
CanStop : True
Utilisez l’applet de commande Format-Table pour remplacer manuellement la mise en forme et afficher la sortie dans une table au lieu d’une liste.
Get-Service -Name w32time |
Select-Object -Property Status, DisplayName, Can* |
Format-Table
Status DisplayName CanPauseAndContinue CanShutdown CanStop
------ ----------- ------------------- ----------- -------
Running Windows Time False True True
La sortie par défaut de Get-Service consiste en trois propriétés dans une table.
Get-Service -Name w32time
Status Name DisplayName
------ ---- -----------
Running w32time Windows Time
Utilisez l’applet de commande Format-List pour remplacer la mise en forme par défaut et retourner les résultats dans une liste.
Get-Service -Name w32time | Format-List
Notez que la simple redirection de Get-Service vers Format-List lui a fait retourner des propriétés supplémentaires. Cela ne se produit pas avec chaque commande en raison de la façon dont le format de cette commande particulière est configuré en arrière-plan.
Name : w32time
DisplayName : Windows Time
Status : Running
DependentServices : {}
ServicesDependedOn : {}
CanPauseAndContinue : False
CanShutdown : True
CanStop : True
ServiceType : Win32OwnProcess, Win32ShareProcess
La première chose à prendre en compte avec les cmdlets de formatage est qu'elles produisent des objets de formatage qui sont différents des objets standards dans PowerShell.
Get-Service -Name w32time | Format-List | Get-Member
TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatStartData
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Obj...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
autosizeInfo Property Microsoft.PowerShell.C...
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property string ClassId2e4f51ef...
groupingEntry Property Microsoft.PowerShell.C...
pageFooterEntry Property Microsoft.PowerShell.C...
pageHeaderEntry Property Microsoft.PowerShell.C...
shapeInfo Property Microsoft.PowerShell.C...
TypeName: Microsoft.PowerShell.Commands.Internal.Format.GroupStartData
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Obj...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property string ClassId2e4f51ef...
groupingEntry Property Microsoft.PowerShell.C...
shapeInfo Property Microsoft.PowerShell.C...
TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Obj...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property string ClassId2e4f51ef...
formatEntryInfo Property Microsoft.PowerShell.C...
outOfBand Property bool outOfBand {get;set;}
writeStream Property Microsoft.PowerShell.C...
TypeName: Microsoft.PowerShell.Commands.Internal.Format.GroupEndData
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Obj...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property string ClassId2e4f51ef...
groupingEntry Property Microsoft.PowerShell.C...
TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatEndData
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Obj...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property string ClassId2e4f51ef...
groupingEntry Property Microsoft.PowerShell.C...
Cela signifie que les commandes de format ne peuvent pas être redirigées vers la plupart des autres commandes. Ils peuvent être redirigés vers certaines des commandes Out-*, mais c'est tout. C’est pourquoi vous souhaitez effectuer une mise en forme à la fin de la ligne (format droit).
Alias
Un alias dans PowerShell est un nom plus court pour une commande. PowerShell inclut un ensemble d’alias intégrés et vous pouvez également définir vos propres alias.
L’applet de commande Get-Alias est utilisée pour rechercher des alias. Si vous connaissez déjà l’alias d’une commande, le paramètre Name est utilisé pour déterminer la commande à laquelle l’alias est associé.
Get-Alias -Name gcm
CommandType Name Version
----------- ---- -------
Alias gcm -> Get-Command
Plusieurs alias peuvent être spécifiés pour la valeur du paramètre Name.
Get-Alias -Name gcm, gm
CommandType Name Version
----------- ---- -------
Alias gcm -> Get-Command
Alias gm -> Get-Member
Vous voyez souvent le paramètre Name omis, car il s’agit d’un paramètre positionnel.
Get-Alias gm
CommandType Name Version
----------- ---- -------
Alias gm -> Get-Member
Si vous souhaitez rechercher des alias pour une commande, vous devez utiliser le paramètre Définition.
Get-Alias -Definition Get-Command, Get-Member
CommandType Name Version
----------- ---- -------
Alias gcm -> Get-Command
Alias gm -> Get-Member
Le paramètre Définition ne peut pas être utilisé de manière positionné. Il doit donc être spécifié.
Les alias peuvent vous économiser quelques frappes, et ils sont utiles lorsque vous tapez des commandes dans la console. Ils ne doivent pas être utilisés dans des scripts ou dans du code que vous enregistrez ou partagez avec d’autres personnes. Comme mentionné précédemment dans ce livre, l’utilisation de noms complets d’applets de commande et de paramètres est auto-documentée et plus facile à comprendre.
Soyez prudent lors de la création de vos propres alias, car ils existent uniquement dans votre session PowerShell actuelle sur votre ordinateur.
Fournisseurs
Un fournisseur dans PowerShell est une interface qui permet un accès de type système de fichiers à un magasin de données. Il existe plusieurs fournisseurs intégrés dans PowerShell.
Get-PSProvider
Comme vous pouvez le voir dans les résultats suivants, il existe des fournisseurs intégrés pour le registre, les alias, les variables d’environnement, le système de fichiers, les fonctions, les variables, les certificats et WSMan.
Name Capabilities Drives
---- ------------ ------
Registry ShouldProcess, Transactions {HKLM, HKCU}
Alias ShouldProcess {Alias}
Environment ShouldProcess {Env}
FileSystem Filter, ShouldProcess, Cr... {C, D}
Function ShouldProcess {Function}
Variable ShouldProcess {Variable}
Les lecteurs réels utilisés par ces fournisseurs pour exposer leur magasin de données peuvent être déterminés avec l’applet de commande Get-PSDrive. L’applet de commande Get-PSDrive affiche non seulement les lecteurs exposés par les fournisseurs, mais également les lecteurs logiques Windows, y compris les lecteurs mappés aux partages réseau.
Get-PSDrive
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
Alias Alias
C 18.56 107.62 FileSystem C:\
Cert Certificate \
D FileSystem D:\
Env Environment
Function Function
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
Variable Variable
WSMan WSMan
Les modules tiers, tels que le module ActiveDirectory PowerShell et le module SqlServer PowerShell, ajoutent chacun leur propre fournisseur PowerShell et leur propre PSDrive.
Importez les modules PowerShell ActiveDirectory et SqlServer.
Import-Module -Name ActiveDirectory, SQLServer
Vérifiez si des fournisseurs PowerShell supplémentaires ont été ajoutés.
Get-PSProvider
Notez que dans l’ensemble de résultats suivant, deux nouveaux fournisseurs PowerShell existent maintenant, un pour Active Directory et un autre pour SQL Server.
Name Capabilities Drives
---- ------------ ------
Registry ShouldProcess, Transactions {HKLM, HKCU}
Alias ShouldProcess {Alias}
Environment ShouldProcess {Env}
FileSystem Filter, ShouldProcess, Credentials {C, A, D}
Function ShouldProcess {Function}
Variable ShouldProcess {Variable}
ActiveDirectory Include, Exclude, Filter, Shoul... {AD}
SqlServer Credentials {SQLSERVER}
Un PSDrive pour chacun de ces modules a également été ajouté.
Get-PSDrive
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
A FileSystem A:\
AD ActiveDire... //RootDSE/
Alias Alias
C 19.38 107.13 FileSystem C:\
Cert Certificate \
D FileSystem D:\
Env Environment
Function Function
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
SQLSERVER SqlServer SQLSERVER:\
Variable Variable
WSMan WSMan
PsDrives est accessible comme un système de fichiers traditionnel.
Get-ChildItem -Path Cert:\LocalMachine\CA
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\CA
Thumbprint Subject
---------- -------
FEE449EE0E3965A5246F000E87FDE2A065FD89D4 CN=Root Agency
D559A586669B08F46A30A133F8A9ED3D038E2EA8 OU=www.verisign.com/CPS Incorp....
109F1CAED645BB78B3EA2B94C0697C740733031C CN=Microsoft Windows Hardware C...
Opérateurs de comparaison
PowerShell contient différents opérateurs de comparaison utilisés pour comparer des valeurs ou rechercher des valeurs qui correspondent à certains modèles. Le tableau suivant contient une liste d’opérateurs de comparaison dans PowerShell.
L’intégralité des opérateurs listés dans le tableau ne respectent pas la casse. Pour les rendre sensibles à la casse, placez un c devant l’opérateur. Par exemple, -ceq est la version qui respecte la casse de l’opérateur de comparaison égal (-eq).
| Opérateur | Définition |
|---|---|
-eq |
Égal à |
-ne |
Non égal à |
-gt |
Supérieur à |
-ge |
Supérieur ou égal à |
-lt |
Inférieur à |
-le |
Inférieur ou égal à |
-like |
Correspondance à l’aide du caractère générique * |
-notlike |
Absence de correspondance à l’aide du caractère générique * |
-match |
Correspond à l’expression régulière spécifiée |
-notmatch |
Ne correspond pas à l’expression régulière spécifiée |
-contains |
Détermine si une collection contient une valeur spécifiée |
-notcontains |
Détermine si une collection ne contient pas de valeur spécifique |
-in |
Détermine si une valeur spécifiée se trouve dans une collection |
-notin |
Détermine si une valeur spécifiée n’est pas dans une collection |
-replace |
Remplace la valeur spécifiée |
La casse appropriée « PowerShell » est égale à « PowerShell » en minuscules lors de l’utilisation de l’opérateur de comparaison Égal à.
'PowerShell' -eq 'powershell'
True
Elle n’est pas égale à l’utilisation de la version qui respecte la casse de l’opérateur de comparaison Égal à.
'PowerShell' -ceq 'powershell'
False
L’opérateur de comparaison Différent de inverse la condition.
'PowerShell' -ne 'powershell'
False
Les opérateurs Supérieur à, Supérieur ou égal à, Inférieur à et Inférieur ou égal à fonctionnent tous avec des chaînes ou des valeurs numériques.
5 -gt 5
False
L’utilisation de l’opérateur Supérieur ou égal à au lieu de Supérieur à avec l’exemple précédent retourne la valeur booléenne true puisque cinq est égal à cinq.
5 -ge 5
True
En fonction des résultats des deux exemples précédents, vous pouvez probablement deviner comment les deux opérateurs Inférieur et Inférieur ou égal à fonctionnent.
5 -lt 10
True
Les opérateurs -like et -match peuvent être déroutants, même pour les utilisateurs PowerShell expérimentés. -like est utilisé avec les caractères génériques * et ? pour effectuer des correspondances « Like ».
'PowerShell' -like '*shell'
True
L’opérateur -match effectue la mise en correspondance à l’aide d’une expression régulière.
'PowerShell' -match '^.*shell$'
True
Utilisez l’opérateur de plage pour stocker les nombres 1 à 10 dans une variable.
$Numbers = 1..10
Déterminez si la variable $Numbers inclut 15.
$Numbers -contains 15
False
Déterminez s’il inclut le nombre 10.
$Numbers -contains 10
True
L’opérateur -notcontains inverse la logique pour voir si la variable $Numbers ne comporte pas de valeur.
$Numbers -notcontains 15
L’exemple précédent retourne l'booléen true, car il est vrai que la variable $Numbers ne contient pas 15.
True
Toutefois, il contient le nombre 10. Il est donc faux lorsqu’il est testé.
$Numbers -notcontains 10
False
L’opérateur de comparaison -in a été introduit pour la première fois dans PowerShell version 3.0. Il est utilisé pour déterminer si une valeur est dans un tableau. La variable $Numbers est un tableau, car elle contient plusieurs valeurs.
15 -in $Numbers
False
En d’autres termes, -in effectue le même test que l’opérateur de comparaison Contains excepté de le sens contraire.
10 -in $Numbers
True
Quinze ne se trouve pas dans le tableau $Numbers. La valeur false est donc retournée dans l’exemple suivant.
15 -in $Numbers
False
Tout comme l’opérateur -contains, not inverse la logique de l’opérateur -in.
10 -notin $Numbers
L’exemple précédent retourne *false*, car le tableau $Numbers inclut 10 et la condition teste si elle ne contient pas 10.
False
Déterminez si quinze ne se trouve pas dans le tableau $Numbers.
15 -notin $Numbers
15 n’est pas « dans » le tableau $Numbers, donc il retourne le booléen vrai.
True
L’opérateur -replace fait exactement ce que vous imaginez. Il est utilisé pour remplacer quelque chose. La spécification d’une valeur remplace cette valeur par rien. Dans l’exemple suivant, vous remplacez « Shell » par rien.
'PowerShell' -replace 'Shell'
Power
Si vous souhaitez remplacer une valeur par une valeur différente, spécifiez la nouvelle après le modèle que vous souhaitez remplacer. SQL Saturday à Baton Rouge est un événement où j'essaie de prendre la parole chaque année. Dans l’exemple suivant, le mot « Samedi » est remplacé par l’abréviation « Sat ».
'SQL Saturday - Baton Rouge' -replace 'saturday','Sat'
SQL Sat - Baton Rouge
Il existe également des méthodes telles que Replace() qui peuvent être utilisées pour remplacer des éléments similaires au fonctionnement de l’opérateur replace. Toutefois, l’opérateur -replace n’est pas sensible à la casse par défaut, alors que la méthode Replace() l’est.
'SQL Saturday - Baton Rouge'.Replace('saturday','Sat')
Notez que le mot « Samedi » n’est pas remplacé. Cela est dû au fait qu’il est spécifié dans un cas différent de celui de l’origine.
SQL Saturday - Baton Rouge
Lorsque le mot « Samedi » est spécifié dans le même cas que l’original, la méthode Replace() effectue le remplacement comme prévu.
'SQL Saturday - Baton Rouge'.Replace('Saturday','Sat')
SQL Sat - Baton Rouge
Soyez prudent lorsque vous utilisez des méthodes pour transformer des données, car vous pouvez rencontrer des problèmes imprévus, tels que l’échec du test Turquie. Pour obtenir un exemple, consultez mon article de blog Utilisation de Pester pour tester du code PowerShell avec d’autres cultures. Je recommande d’utiliser des opérateurs plutôt que des méthodes dans la mesure du possible pour éviter ces types de problèmes.
Bien que les opérateurs de comparaison puissent être utilisés, comme indiqué dans les exemples précédents, je les utilise généralement avec l’applet de commande Where-Object pour effectuer le filtrage.
Résumé
Vous avez abordé plusieurs sujets dans ce chapitre, notamment la mise en forme correcte, les alias, les fournisseurs et les opérateurs de comparaison.
Révision
- Pourquoi est-il nécessaire de réaliser la mise en forme aussi à droite que possible ?
- Comment déterminer quelle est la commande PowerShell réelle pour l’alias
%? - Pourquoi ne devriez-vous pas utiliser des alias dans des scripts que vous enregistrez ou partagez avec d'autres personnes ?
- Dressez une liste des répertoires présents sur les lecteurs associés au fournisseur de registre.
- Quels sont les principaux avantages de l’utilisation de l’opérateur replace au lieu de la méthode replace ?
Références
- format-table
- Liste des formats
- Format en large
- à propos des Alias
- about_Providers
- à_propos_des_Opérateurs_de_Comparaison
- about_Arrays
Étapes suivantes
Dans le chapitre suivant, vous allez découvrir le contrôle de flux, les scripts, les boucles et la logique conditionnelle.