2009-09-10 31 views
23

Quiero poder generar datos de PowerShell sin encabezados de columna. Sé que puedo ocultar el título de la columna usando Format-Table -HideTableHeaders, pero eso deja una línea en blanco en la parte superior.Datos de salida sin encabezados de columna usando PowerShell

Aquí está mi ejemplo:

get-qadgroupmember 'Domain Admins' | Select Name | ft -hide | out-file Admins.txt 

¿Cómo elimino el encabezado de la columna y la línea en blanco?

podría añadir otra línea y hacer esto:

Get-Content Admins.txt | Where {$_ -ne ""} | out-file Admins1.txt 

Pero puedo hacer esto en una línea?

Respuesta

35

En su caso, cuando solo tiene que seleccionar una sola propiedad, la forma más fácil es probablemente para eludir cualquier formato completo:

get-qadgroupmember 'Domain Admins' | foreach { $_.Name } 

Esto le dará un simple string[] sin títulos de las columnas o líneas en blanco. Los cmdlets Format-* son principalmente para consumo humano y, por lo tanto, su salida no está diseñada para ser fácilmente legible por máquina o no dispersable.

Para propiedades múltiples, probablemente vaya con el operador de formato -f. Algo similar a

alias | %{ "{0,-10}{1,-10}{2,-60}" -f $_.COmmandType,$_.Name,$_.Definition } 

que no es bonito, pero le da un control fácil y completo sobre el formato de salida. Y no hay líneas vacías :-)

+0

Perfecto gracias. Por cierto, ¿qué está haciendo "{0, -10} {1, -10} {2, -60}" en tu ejemplo? – fenster

+3

Esa es una cadena de formato. Por lo general, las cadenas de formato consisten en algo entre llaves. Primero un índice numérico que se refiere a qué elemento de la matriz de objetos para formatear se sustituirá allí, puede dar un ancho después de la coma. Las fuerzas negativas dejaron la alineación en lugar de la alineación correcta. El ejemplo anterior dará como resultado el tipo de comando, el nombre y la definición de un alias en columnas de 10, 10 y 60 caracteres, respectivamente. Todo tiene sentido una vez que comprenda cómo funcionan las cadenas de formato :-) (referencia: http://msdn.microsoft.com/en-us/library/txafckwd.aspx) – Joey

23

Si utiliza "formato de tabla" que pueden utilizarse -hidetableheaders

+2

Esta debería ser la respuesta aprobada –

2

Joey mencionó que Format-* se destina al consumo humano. Si está escribiendo en un archivo para el consumo de la máquina, ¿quiere usar Export-*? Algunos buenos son

  • Export-Csv - Valor separado por comas. Ideal para cuando sepa qué columnas van a ser
  • Export-Clixml - Puede exportar objetos y colecciones completos. Esto es genial para la serialización.

Si quiere volver a leer, puede usar Import-Csv y Import-Clixml. Encuentro que me gusta más que inventar mis propios formatos de datos (también es bastante fácil actualizar un Import-Ini si esa es su preferencia).

12

Una mejor respuesta es dejar el script tal como estaba. Al hacer la Select name, seguirlo por -ExpandProperty Name así:

get-qadgroupmember 'Domain Admins' | Select Name -ExpandProperty Name | out-file Admins.txt 
+0

Esta es la respuesta para la pregunta. – robert

+0

Aún termina con líneas vacías. –

+0

'Seleccionar -ExpandProperty Name' es suficiente, no tiene que repetir' Name' dos veces en el comando – doubleDown

2

Primero cogemos la salida del comando, y luego envolverlo y seleccione una de sus propiedades. Solo hay uno y su "Nombre" que es lo que queremos. Así que seleccionamos la propiedad de grupos con ".name" y luego la generamos.

a archivo de texto

(Get-ADGroupMember 'Domain Admins' |Select name).name | out-file Admins1.txt 

a CSV

(Get-ADGroupMember 'Domain Admins' |Select name).name | export-csv -notypeinformation "Admins1.csv" 
-1

agregar el parámetro después del -ExpandProperty Select-Object, que solo se obtendrán datos sin cabecera.

Cuestiones relacionadas