tutorial - ¿Cómo obtener el valor de la propiedad de un objeto por nombre de propiedad en PowerShell?
powershell tutorial (5)
En PowerShell, ¿cómo se obtiene el valor de propiedad de un objeto especificando su nombre (una cadena)? Quiero algo como lo siguiente:
$obj = get-something
# View the object''s members:
$obj | gm
# I could retrieve a property by doing so:
write-host $obj.SomeProp
# But for many purposes, I would really want to:
write-host $obj | Get-PropertyByName "SomeProp"
¿Hay algo similar a "Get-PropertyByName" en PowerShell?
Expandiendo sobre @aquinas:
Get-something | select -ExpandProperty PropertyName
o
Get-something | select -expand PropertyName
o
Get-something | select -exp PropertyName
Hice estas sugerencias para aquellos que podrían simplemente estar buscando un comando de una sola línea para obtener algún tipo de información y deseaban incluir un ejemplo del mundo real.
En la administración de Office 365 a través de PowerShell, he aquí un ejemplo que utilicé para obtener todos los usuarios / grupos que se agregaron a la lista "BookInPolicy":
Get-CalendarProcessing [email protected] | Select -expand BookInPolicy
El solo hecho de usar "Select BookInPolicy" estaba cortando varios miembros, ¡así que gracias por esta información!
Por supuesto
write-host ($obj | Select -ExpandProperty "SomeProp")
O para el caso:
$obj."SomeProp"
Prueba esto :
$obj = @{
SomeProp = "Hello"
}
Write-Host "Property Value is $($obj."SomeProp")"
Puede obtener una propiedad por nombre utilizando el cmdlet Select-Object
y especificando los nombres de propiedad que le interesan. Tenga en cuenta que esto no devuelve simplemente el valor bruto de esa propiedad; en cambio, obtienes algo que todavía se comporta como un objeto.
[PS]> $property = (Get-Process)[0] | Select-Object -Property Name
[PS]> $property
Name
----
armsvc
[PS]> $property.GetType().FullName
System.Management.Automation.PSCustomObject
Para usar el valor de esa propiedad, aún necesitará identificar qué propiedad está buscando, incluso si solo hay una propiedad:
[PS]> $property.Name
armsvc
[PS]> $property -eq "armsvc"
False
[PS]> $property.Name -eq "armsvc"
True
[PS]> $property.Name.GetType().FullName
System.String
Según otras respuestas aquí, si quiere usar una sola propiedad dentro de una cadena, necesita evaluar la expresión (poner corchetes alrededor de ella) y prefijar con un signo de dólar ($) para declarar la expresión dinámicamente como una variable para insertar en la cadena:
[PS]> "The first process in the list is: $($property.Name)"
The first process in the list is: armsvc
Muy correctamente, otros han respondido a esta pregunta recomendando el parámetro -ExpandProperty
para el cmdlet Select-Object
. Esto pasa por alto algunos de los dolores de cabeza devolviendo el valor de la propiedad especificada, pero querrá usar diferentes enfoques en diferentes escenarios.
-ExpandProperty <String>
Especifica una propiedad para seleccionar e indica que se debe intentar expandir esa propiedad
[PS]> (Get-Process)[0] | Select-Object -ExpandProperty Name
armsvc
variables powershell
$com1 = new-object PSobject #Task1
$com2 = new-object PSobject #Task1
$com3 = new-object PSobject #Task1
$com1 | add-member noteproperty -name user -value jindpal #Task2
$com1 | add-member noteproperty -name code -value IT01 #Task2
$com1 | add-member scriptmethod ver {[system.Environment]::oSVersion.Version} #Task3
$com2 | add-member noteproperty -name user -value singh #Task2
$com2 | add-member noteproperty -name code -value IT02 #Task2
$com2 | add-member scriptmethod ver {[system.Environment]::oSVersion.Version} #Task3
$com3 | add-member noteproperty -name user -value dhanoa #Task2
$com3 | add-member noteproperty -name code -value IT03 #Task2
$com3 | add-member scriptmethod ver {[system.Environment]::oSVersion.Version} #Task3
$arr += $com1, $com2, $com3 #Task4
write-host "windows version of computer1 is: "$com1.ver() #Task3
write-host "user name of computer1 is: "$com1.user #Task6
write-host "code of computer1 is: "$com1,code #Task5
write-host "windows version of computer2 is: "$com2.ver() #Task3
write-host "user name of computer2 is: "$com2.user #Task6
write-host "windows version of computer3 is: "$com3.ver() #Task3
write-host "user name of computer3 is: "$com1.user #Task6
write-host "code of computer3 is: "$com3,code #Task5
read-host