Delen via


about_Type_Operators

Korte beschrijving

Hierin worden de operators beschreven die werken met Microsoft .NET-typen.

Lange beschrijving

De Booleaanse typeoperatoren (-is en -isnot) geven aan of een object een exemplaar is van een opgegeven .NET-type. De -is operator retourneert een waarde van TRUE als het type overeenkomt en een waarde van FALSE anders. De -isnot operator retourneert een waarde van FALSE als het type overeenkomt en een waarde van TRUE anders.

De -as operator probeert het invoerobject te converteren naar het opgegeven .NET-type. Als dit lukt, wordt het geconverteerde object geretourneerd. Als dit mislukt, wordt geretourneerd $null. Er wordt geen fout geretourneerd.

PowerShell heeft het volgende type operators:

  • -is |Retourneert TRUE wanneer de invoer een exemplaar is van het opgegeven .NET-type.

    (get-date) -is [DateTime]     # Result is True
    
  • -isnot|Retourneert TRUE wanneer de invoer geen exemplaar is van het type specified.NET.

    (get-date) -isnot [DateTime]  # Result is False
    
  • -as |Converteert de invoer naar het opgegeven .NET-type.

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

De syntaxis van de typeoperatoren is als volgt:

<input> <operator> [.NET type]

U kunt ook de volgende syntaxis gebruiken:

<input> <operator> ".NET type"

Het .NET-type kan worden geschreven als een typenaam tussen vierkante haken of een tekenreeks, zoals [DateTime] of "DateTime" voor System.DateTime. Als het type zich niet in de hoofdmap van de systeemnaamruimte bevindt, geeft u de volledige naam van het objecttype op. U kunt 'Systeem' weglaten. Als u bijvoorbeeld System.Diagnostics.Process wilt opgeven, voert [System.Diagnostics.Process]u , [Diagnostics.Process]of "Diagnostics.Process"in.

De typeoperators werken altijd op het invoerobject als geheel. Als het invoerobject een verzameling is, wordt het verzamelingstype getest, niet de typen elementen van de verzameling.

-is/isnot-operators

De booleaanse typeoperatoren (-is en -isnot) retourneren altijd een Booleaanse waarde, zelfs als de invoer een verzameling objecten is.

Als <input> een type is dat hetzelfde is als of is afgeleid van het .NET-type, retourneert $Truede -is operator .

Het type DirectoryInfo is bijvoorbeeld afgeleid van het type FileSystemInfo . Daarom retourneren beide voorbeelden Waar.

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

De -is operator kan ook overeenkomen met interfaces als de <input> de interface in de vergelijking implementeert. In dit voorbeeld is de invoer een matrix. Matrices implementeren de interface System.Collections.IList .

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

-as Operator

De -as operator probeert het invoerobject te converteren naar het opgegeven .NET-type. Als dit lukt, wordt het geconverteerde object geretourneerd. Als dit mislukt, wordt geretourneerd $null. Er wordt geen fout geretourneerd.

Als het <input> een type is dat is afgeleid van het .NET Type -aspass through retourneert het invoerobject ongewijzigd. Het type DirectoryInfo is bijvoorbeeld afgeleid van het type FileSystemInfo . Daarom is het objecttype ongewijzigd in het volgende voorbeeld:

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

Het converteren van het type Datum/tijd is cultuurgevoelig

In tegenstelling tot typecasting werkt converteren naar [DateTime] type met behulp van de -as operator alleen met tekenreeksen die zijn opgemaakt volgens de regels van de huidige cultuur.

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."

Gebruik Get-Member de cmdlet om het .NET-type van een object te vinden. Of gebruik de methode GetType van alle objecten samen met de eigenschap FullName van deze methode. Met de volgende instructie wordt bijvoorbeeld het type geretourneerde waarde van een Get-Culture opdracht opgehaald:

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

Voorbeelden

In de volgende voorbeelden ziet u enkele toepassingen van de type-operators:

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

In het volgende voorbeeld ziet u dat wanneer de invoer een verzameling objecten is, het overeenkomende type het .NET-type van de verzameling is, niet het type van de afzonderlijke objecten in de verzameling.

Hoewel in dit voorbeeld de cmdlets en Get-UICulturesystem.Globalization.CultureInfo-objectenGet-Culture retourneren, is een verzameling van deze objecten een System.Object-matrix.

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

In de volgende voorbeelden ziet u hoe u de -as operator gebruikt.

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)

In het volgende voorbeeld ziet u dat wanneer de -as operator het invoerobject niet kan converteren naar het .NET-type, deze retourneert $null.

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

Zie ook