È possibile ottenere una proprietà per nome utilizzando il Select-Object
cmdlet e specificando i nomi delle proprietà a cui si è interessati. Si noti che ciò non restituisce semplicemente il valore non elaborato per quella proprietà; invece ottieni qualcosa che si comporta ancora come un oggetto.
[PS]> $property = (Get-Process)[0] | Select-Object -Property Name
[PS]> $property
Name
----
armsvc
[PS]> $property.GetType().FullName
System.Management.Automation.PSCustomObject
Per utilizzare il valore per quella proprietà, dovrai comunque identificare quale proprietà stai cercando, anche se esiste una sola proprietà:
[PS]> $property.Name
armsvc
[PS]> $property -eq "armsvc"
False
[PS]> $property.Name -eq "armsvc"
True
[PS]> $property.Name.GetType().FullName
System.String
Come per altre risposte qui, se si desidera utilizzare una singola proprietà all'interno di una stringa, è necessario valutare l'espressione (racchiuderla tra parentesi) e il prefisso con un simbolo di dollaro ($) per dichiarare l'espressione in modo dinamico come variabile da inserire nella stringa:
[PS]> "The first process in the list is: $($property.Name)"
The first process in the list is: armsvc
Abbastanza correttamente, altri hanno risposto a questa domanda raccomandando il -ExpandProperty
parametro per il Select-Object
cmdlet. Questo evita alcuni mal di testa restituendo il valore della proprietà specificata, ma ti consigliamo di utilizzare approcci diversi in diversi scenari.
-ExpandProperty <String>
Specifica una proprietà da selezionare e indica che è necessario tentare di espandere quella proprietà
https://technet.microsoft.com/en-us/library/hh849895.aspx
[PS]> (Get-Process)[0] | Select-Object -ExpandProperty Name
armsvc
powershell variabili
select -expand "SomeProp"
se vuoi il valore.select "SomeProp"
restituisce un oggetto personalizzato con una proprietà "SomeProp", quindi è praticamente tornato al passaggio 1.