2010-03-17 27 views
6

Estoy haciendo un poco de scripts de Powershell (por primera vez) para ver algunas cosas en un sitio Sharepoint y lo que me gustaría poder hacer es ir a través de una lista de propiedades de un objeto y solo salir sus valores en un tipo de formato de "propiedad-nombre = valor".¿Tiene Powershell un equivalente "eval"? ¿Hay una mejor manera de ver una lista de propiedades y valores?

Ahora puedo encontrar la lista de elementos que utiliza este:

$myObject | get-member -membertype property 

que devolverá una lista de todas las propiedades de una manera muy clara y legible. Pero lo que necesito es encontrar un valor para esas propiedades.

En algunos lenguajes de script podría tener una clase de llamada eval ("$ myObject. $ PropertyName") - donde he extraído $ propertyName de la salida get-member - y hacer que evalúe la cadena como código, que para el tipo de solución rápida y sucia que necesito estaría bien.

¿Existe esto en Powershell o existe una forma más conveniente de hacerlo? ¿Debo usar reflejo?

Respuesta

8

Para obtener el valor de las propiedades de un objeto, puede usar varios métodos.

En primer lugar, podría usar Select-Object y usar el parámetro -Property para especificar qué valores de propiedades desea devolver. La forma en que se muestre dependerá de la cantidad de propiedades que especifique y del tipo de objeto que sea. Si desea todas las propiedades, puede usar el comodín (*) para obtenerlas todas.

Ejemplo -

$myobject | Select-Object -Property name, length 
$myobject | Select-Object -Property * 

También puede controlar el formato de las salidas de una manera similar, utilizando Format-List o Format-Table.

Ejemplo -

$myobject | Format-List -Property * 
$myobject | Format-Table -Property name, length 

Por último, para hacer una "eval" salida de estilo que simplemente puede escribir

$myobject."$propertyname" 

y el valor de la propiedad será devuelta.

+3

Creo que se puede incluso perder las citas en ese último fragmento de código:. $ myObject $ propertyname Parece extraño, pero funciona. –

+0

Esto hizo el truco perfectamente, gracias! – glenatron

1

Para usted la mejor opción es Format-Custom.

get-date | Format-Custom -Depth 1 -Property * 
get-childitem . | select-object -first 1 | Format-Custom -Depth 1 -Property * 

Es quizás demasiado prolijo, pero útil;)


O realmente se puede utilizar Get-Member

$obj = get-date 
$obj | 
    gm -MemberType *property | 
    % { write-host ('{0,-12} = {1}' -f $_.Name, $obj.($_.Name)) } 
1

Para esto yo recomendaría el uso de Format-List force por ejemplo:

Get-Process | Format-List * -Force 

-Force es opcional, pero a veces PowerShell oculta las propiedades que realmente quiero ver.

Cuestiones relacionadas