sort name aduser powershell

name - Powershell: ¿cómo inicializar una matriz de objetos personalizados?



get aduser order by name (7)

Aquí hay una forma concisa de inicializar una matriz de objetos personalizados en PowerShell.

> $body = @( @{ Prop1="1"; Prop2="2"; Prop3="3" }, @{ Prop1="1"; Prop2="2"; Prop3="3" } ) > $body Name Value ---- ----- Prop2 2 Prop1 1 Prop3 3 Prop2 2 Prop1 1 Prop3 3

Soy bastante nuevo en PowerShell, y generalmente Google o la búsqueda de foros como estos arroja las respuestas que busco, pero esta vez no. Así que aquí está mi pregunta (generalizada a partir de una tarea específica por razones de privacidad / seguridad):

En primer lugar, como esto lleva a mi pregunta, comenzaré por señalar que he trabajado bastante con XML en Powershell, y que puedo leer datos de archivos xml de forma rápida en matrices de objetos personalizados. Por ejemplo, si tuviera el siguiente archivo XML:

<stuff> <item name="Joe" age="32"> <info>something about him</info> </item> <item name="Sue" age="29"> <info>something about her</info> </item> <item name="Cat" age="12"> <info>something else</info> </item> </stuff>

Y si lo leo simplemente, así:

[xml]$myxml = Get-Content ./my.xml

... entonces puedo acceder a una variedad de mis elementos como este:

[array]$myitems = $myxml.stuff.Item $myitems name age info ---- --- ---- Joe 32 something about him Sue 29 something about her Cat 12 something else

Entonces, ahora MI PREGUNTA. ¿Cómo puedo crear una estructura similar de una matriz de objetos personalizados e inicializarlos en mi script, SIN leer un archivo? Oh, sí, puedo hacer muchos bucles y / o crear / inicializar objetos individuales ... y luego agregar a una matriz ... uno a la vez ...

Pero parece que debería haber una manera de realizar esta creación / inicialización de una manera más simple. Tenga en cuenta que la clave aquí, es que mis objetos personalizados tienen más de 2 elementos (de lo contrario, ¡habría usado un hash en un instante!).

Incluso he considerado la creación de una gran cadena de XML y el uso de Select-XML, pero simplemente no podía obtener la sintaxis correcta (si ese era el camino correcto para dirigirse hacia abajo).

Entonces, cualquier ayuda aquí sería muy apreciada.


Aquí hay una versión más concisa de la respuesta aceptada que evita repetir los identificadores NoteProperty y el [pscustomobject] -cast:

$myItems = ("Joe",32,"something about him"), ("Sue",29,"something about her") | ForEach-Object {[pscustomobject]@{name = $_[0]; age = $_[1]; info = $_[2]}}

Resultado:

> $myItems name age info ---- --- ---- Joe 32 something about him Sue 29 something about her


Haría algo en esta línea:

$myitems = @([pscustomobject]@{name="Joe";age=32;info="something about him"}, [pscustomobject]@{name="Sue";age=29;info="something about her"}, [pscustomobject]@{name="Cat";age=12;info="something else"})

Tenga en cuenta que esto solo funciona en Powershell 3 , pero como no mencionó la versión en su pregunta, asumo que esto no tiene importancia para usted.


La forma más sencilla de inicializar una matriz

crear matriz

$array = @()

crea tu encabezado

$line = "" | select name,age,phone

llena la línea

$line.name = "Leandro" $line.age = "39" $line.phone = "555-555555"

AGREGAR línea a $ array

$array += $line

Resultado

$array name age phone ---- --- ----- Leandro 39 555-555555


Tal vez te refieres así? Me gusta hacer un objeto y usar la tabla de formateo

PS C:/Users/Joel> $array = @() PS C:/Users/Joel> $object = New-Object -TypeName PSObject PS C:/Users/Joel> $object | Add-Member -Name ''Name'' -MemberType Noteproperty -Value ''Joe'' PS C:/Users/Joel> $object | Add-Member -Name ''Age'' -MemberType Noteproperty -Value 32 PS C:/Users/Joel> $object | Add-Member -Name ''Info'' -MemberType Noteproperty -Value ''something about him'' PS C:/Users/Joel> $array += $object PS C:/Users/Joel> $array | Format-Table Name Age Info ---- --- ---- Joe 32 something about him

Esto pondrá todos los objetos que tenga en la matriz en columnas de acuerdo con sus propiedades

Consejo: Usar -auto dimensiona mejor la tabla

PS C:/Users/Joel> $array | Format-Table -Auto Name Age Info ---- --- ---- Joe 32 something about him

También puede especificar qué propiedades desea en la tabla solo separar cada nombre de propiedad con una coma

PS C:/Users/Joel> $array | Format-Table Name, Age -Auto Name Age ---- --- Joe 32


Tuve que crear una matriz de tipo predefinido, lo hice con éxito de la siguiente manera:

[System.Data.DataColumn[]]$myitems = ([System.Data.DataColumn]("col1"), [System.Data.DataColumn]("col2"), [System.Data.DataColumn]("col3"))


Use un "Here-String" y envíe a XML.

[xml]$myxml = @" <stuff> <item name="Joe" age="32"> <info>something about him</info> </item> <item name="Sue" age="29"> <info>something about her</info> </item> <item name="Cat" age="12"> <info>something else</info> </item> </stuff> "@ [array]$myitems = $myxml.stuff.Item $myitems