about_Type_Operators

Descrizione breve

Descrive gli operatori che funzionano con i tipi Microsoft .NET.

Descrizione lunga

Gli operatori di tipo booleano (-is e -isnot) indicano se un oggetto è un'istanza di un tipo .NET specificato. L'operatore -is restituisce un valore TRUE se il tipo corrisponde a e il valore FAL edizione Standard in caso contrario. L'operatore -isnot restituisce un valore FAL edizione Standard se il tipo corrisponde a e il valore TRUE in caso contrario.

L'operatore -as tenta di convertire l'oggetto di input nel tipo .NET specificato. Se ha esito positivo, restituisce l'oggetto convertito. Se l'operazione ha esito negativo, viene restituito $null. Non restituisce un errore.

PowerShell include gli operatori di tipo seguenti:

  • -is |Restituisce TRUE quando l'input è un'istanza del tipo .NET specificato.

    (get-date) -is [DateTime]     # Result is True
    
  • -isnot|Restituisce TRUE quando l'input non è un'istanza del tipo specified.NET.

    (get-date) -isnot [DateTime]  # Result is False
    
  • -as |Converte l'input nel tipo .NET specificato.

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

La sintassi degli operatori di tipo è la seguente:

<input> <operator> [.NET type]

È anche possibile usare la sintassi seguente:

<input> <operator> ".NET type"

Il tipo .NET può essere scritto come nome di tipo tra parentesi quadre o stringa, ad esempio [DateTime] o "DateTime" per System.DateTime. Se il tipo non si trova nella radice dello spazio dei nomi di sistema, specificare il nome completo del tipo di oggetto. È possibile omettere "System.". Ad esempio, per specificare System.Diagnostics.Process, immettere [System.Diagnostics.Process], o ."Diagnostics.Process"[Diagnostics.Process]

Gli operatori di tipo operano sempre sull'oggetto di input nel suo complesso. Ovvero, se l'oggetto di input è una raccolta, è il tipo di raccolta testato, non i tipi degli elementi della raccolta.

Operatori -is/isnot

Gli operatori di tipo booleano (-is e -isnot) restituiscono sempre un valore booleano , anche se l'input è una raccolta di oggetti.

Se <input> è un tipo uguale a o derivato dal tipo .NET, l'operatore -is restituisce $True.

Ad esempio, il tipo DirectoryInfo è derivato dal tipo FileSystemInfo . Pertanto, entrambi questi esempi restituiscono True.

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

L'operatore -is può anche corrispondere alle interfacce se <input> implementa l'interfaccia nel confronto. In questo esempio l'input è una matrice. Le matrici implementano l'interfaccia System.Collections.IList .

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

-as Operatore

L'operatore -as tenta di convertire l'oggetto di input nel tipo .NET specificato. Se ha esito positivo, restituisce l'oggetto convertito. Se ha esito negativo, restituisce $null. Non restituisce un errore.

<input> Se è un tipo derivato dal tipo -as.NET passa attraverso restituisce l'oggetto di input invariato. Ad esempio, il tipo DirectoryInfo è derivato dal tipo FileSystemInfo . Di conseguenza, il tipo di oggetto è invariato nell'esempio seguente:

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

La conversione del tipo DateTime è sensibile alle impostazioni cultura

A differenza del cast dei tipi, la conversione in [DateTime] tipo tramite l'operatore -as funziona solo con stringhe formattate in base alle regole delle impostazioni cultura correnti.

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

Per trovare il tipo .NET di un oggetto, usare il Get-Member cmdlet . In alternativa, utilizzare il metodo GetType di tutti gli oggetti insieme alla proprietà FullName di questo metodo. Ad esempio, l'istruzione seguente ottiene il tipo del valore restituito di un Get-Culture comando:

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

Esempi

Gli esempi seguenti illustrano alcuni usi degli operatori 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

Nell'esempio seguente viene illustrato che quando l'input è una raccolta di oggetti, il tipo corrispondente è il tipo .NET della raccolta, non il tipo dei singoli oggetti nell'insieme.

In questo esempio, anche se entrambi i Get-Culture cmdlet e Get-UICulture restituiscono oggetti System.Globalization.CultureInfo , una raccolta di questi oggetti è una matrice 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

Negli esempi seguenti viene illustrato come usare l'operatore -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)

Nell'esempio seguente viene illustrato che quando l'operatore -as non è in grado di convertire l'oggetto di input nel tipo .NET, restituisce $null.

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

Vedi anche