usar tutorial script como commands comandos powershell

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

https://technet.microsoft.com/en-us/library/hh849895.aspx

[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