about_Type_Operators

Description courte

Décrit les opérateurs qui fonctionnent avec les types Microsoft .NET.

Description longue

Les opérateurs de type booléen (-is et -isnot) indiquent si un objet est une instance d’un type .NET spécifié. L’opérateur -is retourne une valeur TRUEsi le type correspond et une valeur false dans le cas contraire. L’opérateur -isnot retourne une valeur FALSEsi le type correspond et une valeur true sinon.

L’opérateur -as tente de convertir l’objet d’entrée en type .NET spécifié. Si elle réussit, elle retourne l’objet converti. En cas d’échec, elle retourne $null. Elle ne retourne pas d’erreur.

PowerShell a les opérateurs de type suivants :

  • -is |Retourne TRUE lorsque l’entrée est une instance du type .NET spécifié.

    (get-date) -is [DateTime]     # Result is True
    
  • -isnot|Retourne TRUE lorsque l’entrée n’est pas une instance du type specified.NET.

    (get-date) -isnot [DateTime]  # Result is False
    
  • -as |Convertit l’entrée en type .NET spécifié.

    "5/7/07" -as [DateTime]       # Result is Monday, May 7, 2007 12:00:00 AM
    

La syntaxe des opérateurs de type est la suivante :

<input> <operator> [.NET type]

Vous pouvez également utiliser la syntaxe suivante :

<input> <operator> ".NET type"

Le type .NET peut être écrit en tant que nom de type entre crochets ou une chaîne, par [DateTime] exemple pour "DateTime"System.DateTime. Si le type n’est pas à la racine de l’espace de noms système, spécifiez le nom complet du type d’objet. Vous pouvez omettre « System ». Par exemple, pour spécifier System.Diagnostics.Process, entrer [System.Diagnostics.Process], [Diagnostics.Process]ou "Diagnostics.Process".

Les opérateurs de type fonctionnent toujours sur l’objet d’entrée dans son ensemble. Autrement dit, si l’objet d’entrée est une collection, il s’agit du type de collection testé, et non des types des éléments de la collection.

-is/isnot, opérateurs

Les opérateurs de type booléen (-is et -isnot) retournent toujours une valeur booléenne , même si l’entrée est une collection d’objets.

S’il <input> s’agit d’un type identique ou dérivé du type .NET, l’opérateur -is retourne $True.

Par exemple, le type DirectoryInfo est dérivé du type FileSystemInfo . Par conséquent, ces deux exemples retournent True.

PS> (Get-Item /) -is [System.IO.DirectoryInfo]
True
PS> (Get-Item /) -is [System.IO.FileSystemInfo]
True

L’opérateur -is peut également correspondre aux interfaces si l’implémente <input> l’interface dans la comparaison. Dans cet exemple, l’entrée est un tableau. Les tableaux implémentent l’interface System.Collections.IList .

PS> 1, 2 -is [System.Collections.IList]
True

-as opérateur

L’opérateur -as tente de convertir l’objet d’entrée en type .NET spécifié. Si elle réussit, elle retourne l’objet converti. En cas d’échec, elle retourne $null. Elle ne retourne pas d’erreur.

Si le <input> type est un type dérivé du type -as.NET passe par l’objet d’entrée inchangé. Par exemple, le type DirectoryInfo est dérivé du type FileSystemInfo . Par conséquent, le type d’objet n’est pas modifié dans l’exemple suivant :

PS> $fsroot = (Get-Item /) -as [System.IO.FileSystemInfo]
PS> $fsroot.GetType().FullName
System.IO.DirectoryInfo

La conversion du type DateTime respecte la culture

Contrairement au cast de type, la conversion en [DateTime] type à l’aide de l’opérateur -as fonctionne uniquement avec des chaînes mises en forme conformément aux règles de la culture actuelle.

PS> [cultureinfo]::CurrentCulture = 'fr-FR'
PS> '13/5/20' -as [datetime]

mercredi 13 mai 2020 00:00:00

PS> '05/13/20' -as [datetime]
PS> [datetime]'05/13/20'

mercredi 13 mai 2020 00:00:00

PS> [datetime]'13/05/20'
InvalidArgument: Cannot convert value "13/05/20" to type "System.DateTime".
Error: "String '13/05/20' was not recognized as a valid DateTime."

Pour rechercher le type .NET d’un objet, utilisez l’applet Get-Member de commande. Vous pouvez également utiliser la méthode GetType de tous les objets avec la propriété FullName de cette méthode. Par exemple, l’instruction suivante obtient le type de la valeur de retour d’une Get-Culture commande :

PS> (Get-Culture).GetType().FullName
System.Globalization.CultureInfo

Exemples

Les exemples suivants montrent quelques utilisations des opérateurs de type :

PS> 32 -is [Float]
False

PS> 32 -is "int"
True

PS> (get-date) -is [DateTime]
True

PS> "12/31/2007" -is [DateTime]
False

PS> "12/31/2007" -is [String]
True

PS> (get-process PowerShell)[0] -is [System.Diagnostics.Process]
True

PS> (get-command get-member) -is [System.Management.Automation.CmdletInfo]
True

L’exemple suivant montre que lorsque l’entrée est une collection d’objets, le type correspondant est le type .NET de la collection, et non le type des objets individuels de la collection.

Dans cet exemple, bien que les applets de commande retournent Get-UICulture des Get-Culture objets System.Globalization.CultureInfo, une collection de ces objets est un tableau System.Object.

PS> (get-culture) -is [System.Globalization.CultureInfo]
True

PS> (get-uiculture) -is [System.Globalization.CultureInfo]
True

PS> (get-culture), (get-uiculture) -is [System.Globalization.CultureInfo]
False

PS> (get-culture), (get-uiculture) -is [Array]
True

PS> (get-culture), (get-uiculture) | foreach {
  $_ -is [System.Globalization.CultureInfo])
}
True
True

PS> (get-culture), (get-uiculture) -is [Object]
True

Les exemples suivants montrent comment utiliser l’opérateur -as .

PS> "12/31/07" -is [DateTime]
False

PS> "12/31/07" -as [DateTime]
Monday, December 31, 2007 12:00:00 AM

PS> $date = "12/31/07" -as [DateTime]

C:\PS>$a -is [DateTime]
True

PS> 1031 -as [System.Globalization.CultureInfo]

LCID      Name      DisplayName
----      ----      -----------
1031      de-DE     German (Germany)

L’exemple suivant montre que lorsque l’opérateur -as ne peut pas convertir l’objet d’entrée en type .NET, il retourne $null.

PS> 1031 -as [System.Diagnostics.Process]
PS>

Voir aussi