about_Properties

Descrizione breve

Viene descritto come usare le proprietà degli oggetti in PowerShell.

Descrizione lunga

PowerShell usa raccolte strutturate di informazioni denominate oggetti per rappresentare gli elementi negli archivi dati o lo stato del computer. In genere, si lavora con oggetti che fanno parte di Microsoft .NET Framework, ma è anche possibile creare oggetti personalizzati in PowerShell.

L'associazione tra un elemento e il relativo oggetto è molto vicina. Quando si modifica un oggetto, in genere si modifica l'elemento rappresentato. Ad esempio, quando si ottiene un file in PowerShell, non si ottiene il file effettivo. Si ottiene invece un oggetto FileInfo che rappresenta il file. Quando si modifica l'oggetto FileInfo, anche il file cambia.

La maggior parte degli oggetti ha proprietà. Le proprietà sono i dati associati a un oggetto . Diversi tipi di oggetto hanno proprietà diverse. Ad esempio, un oggetto FileInfo , che rappresenta un file, ha una proprietà IsReadOnly che contiene se il file ha $True l'attributo di sola lettura e $False in caso contrario. Un oggetto DirectoryInfo , che rappresenta una directory del file system, dispone di una proprietà Parent che contiene il percorso della directory padre.

Proprietà dell'oggetto

Per ottenere le proprietà di un oggetto, usare il Get-Member cmdlet . Ad esempio, per ottenere le proprietà di un oggetto FileInfo , utilizzare il Get-ChildItem cmdlet per ottenere l'oggetto FileInfo che rappresenta un file. Usare quindi un operatore pipeline (|) per inviare l'oggetto FileInfo a Get-Member. Il comando seguente ottiene il pwsh.exe file e lo invia a Get-Member. La $PSHOME variabile automatica contiene il percorso della directory di installazione di PowerShell.

Get-ChildItem $PSHOME\pwsh.exe | Get-Member

L'output del comando elenca i membri dell'oggetto FileInfo . I membri includono sia proprietà che metodi. Quando si lavora in PowerShell, si ha accesso a tutti i membri degli oggetti.

Per ottenere solo le proprietà di un oggetto e non i metodi , utilizzare il parametro MemberType del Get-Member cmdlet con un valore , Propertycome illustrato nell'esempio seguente.

Get-ChildItem $PSHOME\pwsh.exe | Get-Member -MemberType Property
TypeName: System.IO.FileInfo

Name              MemberType Definition
----              ---------- ----------
Attributes        Property   System.IO.FileAttributes Attributes {get;set;}
CreationTime      Property   System.DateTime CreationTime {get;set;}
CreationTimeUtc   Property   System.DateTime CreationTimeUtc {get;set;}
Directory         Property   System.IO.DirectoryInfo Directory {get;}
DirectoryName     Property   System.String DirectoryName {get;}
Exists            Property   System.Boolean Exists {get;}
Extension         Property   System.String Extension {get;}
FullName          Property   System.String FullName {get;}
IsReadOnly        Property   System.Boolean IsReadOnly {get;set;}
LastAccessTime    Property   System.DateTime LastAccessTime {get;set;}
LastAccessTimeUtc Property   System.DateTime LastAccessTimeUtc {get;set;}
LastWriteTime     Property   System.DateTime LastWriteTime {get;set;}
LastWriteTimeUtc  Property   System.DateTime LastWriteTimeUtc {get;set;}
Length            Property   System.Int64 Length {get;}
Name              Property   System.String Name {get;}

Dopo aver trovato le proprietà, è possibile usarle nei comandi di PowerShell.

Valori delle proprietà

Anche se ogni oggetto di un tipo specifico ha le stesse proprietà, i valori di tali proprietà descrivono l'oggetto specifico. Ad esempio, ogni oggetto FileInfo ha una proprietà CreationTime , ma il valore di tale proprietà è diverso per ogni file.

Il modo più comune per ottenere i valori delle proprietà di un oggetto consiste nell'usare l'operatore di accesso ai membri (.). Digitare un riferimento all'oggetto, ad esempio una variabile che contiene l'oggetto o un comando che ottiene l'oggetto . Digitare quindi l'operatore (.) seguito dal nome della proprietà.

Ad esempio, il comando seguente visualizza il valore della proprietà CreationTime del pwsh.exe file. Il Get-ChildItem comando restituisce un oggetto FileInfo che rappresenta l'oggetto pwsh.exe file. Il comando è racchiuso tra parentesi per assicurarsi che venga eseguito prima dell'accesso a qualsiasi proprietà.

(Get-ChildItem $PSHOME\pwsh.exe).CreationTime
Tuesday, June 14, 2022 5:17:14 PM

È anche possibile salvare un oggetto in una variabile e quindi ottenere le relative proprietà usando il metodo di accesso ai membri (.), come illustrato nell'esempio seguente:

$a = Get-ChildItem $PSHOME\pwsh.exe
$a.CreationTime
Tuesday, June 14, 2022 5:17:14 PM

È anche possibile utilizzare i Select-Object cmdlet e Format-List per visualizzare i valori delle proprietà di un oggetto . Select-Object e Format-List ognuno ha un parametro Property . È possibile utilizzare il parametro Property per specificare una o più proprietà e i relativi valori. In alternativa, è possibile usare il carattere jolly (*) per rappresentare tutte le proprietà.

Ad esempio, il comando seguente visualizza i valori di tutte le proprietà del file pwsh.exe.

Get-ChildItem $PSHOME\pwsh.exe | Format-List -Property *
PSPath              : Microsoft.PowerShell.Core\FileSystem::C:\Program Files\PowerShell\7-preview\pwsh.exe
PSParentPath        : Microsoft.PowerShell.Core\FileSystem::C:\Program Files\PowerShell\7-preview
PSChildName         : pwsh.exe
PSDrive             : C
PSProvider          : Microsoft.PowerShell.Core\FileSystem
PSIsContainer       : False
Mode                : -a---
ModeWithoutHardLink : -a---
VersionInfo         : File:             C:\Program Files\PowerShell\7-preview\pwsh.exe
                      InternalName:     pwsh.dll
                      OriginalFilename: pwsh.dll
                      FileVersion:      7.3.0.5
                      FileDescription:  pwsh
                      Product:          PowerShell
                      ProductVersion:   7.3.0-preview.5 SHA: cfc237ac85cf24fa760923ace568201c8f3256aa
                      Debug:            False
                      Patched:          False
                      PreRelease:       False
                      PrivateBuild:     False
                      SpecialBuild:     False
                      Language:         Language Neutral

BaseName            : pwsh
ResolvedTarget      : C:\Program Files\PowerShell\7-preview\pwsh.exe
Target              :
LinkType            :
Length              : 285088
DirectoryName       : C:\Program Files\PowerShell\7-preview
Directory           : C:\Program Files\PowerShell\7-preview
IsReadOnly          : False
FullName            : C:\Program Files\PowerShell\7-preview\pwsh.exe
Extension           : .exe
Name                : pwsh.exe
Exists              : True
CreationTime        : 6/14/2022 5:17:14 PM
CreationTimeUtc     : 6/14/2022 10:17:14 PM
LastAccessTime      : 7/18/2022 11:32:06 AM
LastAccessTimeUtc   : 7/18/2022 4:32:06 PM
LastWriteTime       : 6/14/2022 5:17:14 PM
LastWriteTimeUtc    : 6/14/2022 10:17:14 PM
LinkTarget          :
Attributes          : Archive

Proprietà statiche

È possibile usare le proprietà statiche delle classi .NET in PowerShell. Le proprietà statiche sono proprietà della classe, a differenza delle proprietà standard, che sono proprietà di un oggetto.

Per ottenere le proprietà statiche di una classe, usare il parametro Static del Get-Member cmdlet . Ad esempio, il comando seguente ottiene le proprietà statiche della System.DateTime classe .

Get-Date | Get-Member -MemberType Property -Static
TypeName: System.DateTime

Name     MemberType Definition
----     ---------- ----------
MaxValue Property   static datetime MaxValue {get;}
MinValue Property   static datetime MinValue {get;}
Now      Property   datetime Now {get;}
Today    Property   datetime Today {get;}
UtcNow   Property   datetime UtcNow {get;}

Per ottenere il valore di una proprietà statica, utilizzare la sintassi seguente.

[<ClassName>]::<Property>

Ad esempio, il comando seguente ottiene il valore della proprietà statica UtcNow della System.DateTime classe .

[System.DateTime]::UtcNow

Enumerazione member-access

A partire da PowerShell 3.0, quando si usa l'operatore di accesso ai membri (.) per accedere a una proprietà che non esiste in una raccolta di elenchi, PowerShell enumera automaticamente gli elementi nella raccolta e restituisce il valore della proprietà in ogni elemento. Per altre informazioni, vedere about_Member-Access_Enumeration.

Esempi

Questo comando restituisce il valore della proprietà DisplayName di ogni servizio restituito Get-Service .

(Get-Service).DisplayName
Application Experience
Application Layer Gateway Service
Windows All-User Install Agent
Application Identity
Application Information
...

Tutte le raccolte hanno una proprietà Count che restituisce il numero di oggetti nell'insieme.

(Get-Service).Count
176

A partire da PowerShell 3.0, è possibile ottenere la proprietà Count o Length di oggetti singleton che non sono raccolte.

(Get-Service Audiosrv).Count
1

Tuttavia, alcuni oggetti hanno una proprietà Length . Ad esempio, la lunghezza di una stringa è il numero di caratteri nella stringa. La proprietà Count è il numero di istanze dell'oggetto .

PS> $str = 'string'
PS> $str.Length
6
PS> $str.Count
1

Se esiste una proprietà nei singoli oggetti e nell'insieme, viene restituita solo la proprietà della raccolta.

$collection = @(
    [pscustomobject]@{length = "foo"}
    [pscustomobject]@{length = "bar"}
)
# PowerShell returns the collection's Length.
$collection.length
2

Vedi anche