Partager via


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 un instance d’un type .NET spécifié. L’opérateur -is retourne la valeur TRUE si le type correspond et la valeur FALSE dans le cas contraire. L’opérateur -isnot retourne la valeur FALSE si le type correspond et la valeur TRUE dans le cas contraire.

L’opérateur -as tente de convertir l’objet d’entrée vers le type .NET spécifié. Si elle réussit, elle retourne l’objet converti. En cas d’échec, elle retourne $null. Il 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 sous la forme d’un nom de type entre crochets ou d’une chaîne, par [DateTime] exemple ou "DateTime" pour System.DateTime. Si le type ne se trouve 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, entrez [System.Diagnostics.Process], [Diagnostics.Process]ou "Diagnostics.Process".

Les opérateurs de type opèrent toujours sur l’objet d’entrée dans son ensemble. Autrement dit, si l’objet d’entrée est une collection, c’est le type de collection qui est testé, et non les types des éléments de la collection.

Opérateurs -is/isnot

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.

Si <input> est un type qui est le même que ou qui est 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 faire correspondre des interfaces si 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

L’opérateur -as

L’opérateur -as tente de convertir l’objet d’entrée vers le type .NET spécifié. Si elle réussit, elle retourne l’objet converti. Si elle échoue, elle retourne $null. Il ne retourne pas d’erreur.

Si est <input> un type dérivé du type .NET, le passage -asà travers retourne l’objet d’entrée inchangé. Par exemple, le type DirectoryInfo est dérivé du type FileSystemInfo . Par conséquent, le type d’objet est inchangé 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 type à [DateTime] 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 de Get-Member 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 illustrent certaines utilisations des opérateurs 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 dans la collection.

Dans cet exemple, bien que les Get-Culture applets de commande et Get-UICulture renvoient des 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