En este articulo vamos a ver unos cmdlets que nos van a servir para formatear la salida de otros cmdlets.
Normalmente, siempre vamos a utilizar estos cmdlets para manejar el resultado de otro cmdlet. La verdad es que estos commandlets por si solos no tienes mucha utilidad.
7.1- Format-List (fl)
Este commandlet aplica a la salida el formato de una lista de propiedades en la que cada propiedad aparece en una linea diferente. Ya que cada elemento dispone de mas espacio en una lista que en una tabla, Powershell muestra mas propiedades del objeto en un lista y hay menos posibilidades de que se trunquen los valores de las propiedades.
Para conocer todas las propiedades del objeto, podemos utilizar el cmdlet:
> cmdlet | Format-List *
Parametros
-property <object[]>
Especifica las propiedades del objeto que se va a mostrar y el orden en el que van a aparecer. Se pueden utilizar caracteres comodin.
Este parametro es opcional pero si se omite, las propiedades que aparezcan dependeran del objeto que se esta mostrando.
Los parametros «-property» y «view» no se pueden utilizar en el mismo comando.
-view <String>
Especifica el nombre de una vista o un formato de lista alternativo.
Hay mas parametros disponibles para este cmdlet. Para obtener mas informacion sobre ellos:
>get-help -detailed format-list
Ejemplo1:
>get-childitem | format-list
Podemos ver como es el formato que genera «format-list«.
Para compararlo, ahora podemos ejecutar:
>get-childitem
Se nota la diferencia, ¿no?
Ejemplo2:
>get-childitem | format-list -property name, length
El resultado es un listado formateado en el que se muestran las propiedades name y length (el que las tenga) de los elementos pasados por el cmdlet get-chilitem.
Ejemplo 3:
>get-childitem | format-list -property name > c:\power\listadoformat-list.txt
En este caso utilizamos el simbolo «>» que ya vimos para redireccionar la salida a un fichero de texto.
En estos ejemplos utilizamos get-childitem. Este cmdlet tiene unas propiedades pero recordad que cada cmdlet tiene sus propiedades osea que si el commandlet que pasa la informacion es otro, tenemos que utilizar las propiedades de este cmdlet.
No os preocupeis por que vamos poco a poco. Mejor asi…
7.2- Format-wide (fw)
Aplica a los objetos el formato de una tabla ancha en la que se muestra unicamente una propiedad de cada objeto. Podemos utilizar el parametro «property» para determinar que propiedad se va a mostrar.
Parametros
-property <objetct[]>
Especifica las propiedades del objeto que se van a mostrar. Permite el uso de caracteres comodin. Es opcional. Los parametros «property» y «view» no pueden utilizarse en el mismo comando.
-autosize <SwitchParameter>
Ajusta el tamaño de columna y el numero de columnas en funcion del ancho de los datos. De forma predeterminada, el tamaño y el numero de columnas viene determinado por la vista. Los parametros «autosize» y «column» no pueden usarse en el mismo comando.
-column <int>
Especifica el numero de columnas de la presentacion.
-groupby <object>
Da formato a la salida de los grupos en funcion de un valor o de una propiedad compartida. Indicar una expresion o una propiedad de la salida.
-inputobject <psobject>
Especifica los objetos a los que se les va a dar formato. Tenemos que indicar la variable que contiene los objetos o escribir un comando u objeto que obtenga los objetos.
Para obtener mas informacion sobre estos y otros parametros del cmdlet «format-wide«, escribid el comando:
>get-help -detailed format-wide
Ejemplo 1:
>get-childitem
>get-childitem | format-wide
Vemos la diferencia a poco que nos fijemos…
Ejemplo 2:
>get-childitem | format-wide -column 3
En este caso le indicamos que la salida la formatee en 3 columnas. Se ve, ¿no?
Ejemplo 3:
>get-childitem -path c:\ -include «*.txt» -recurse | fw -property name -column 3
Este comando nos muestra en pantalla todos los ficheros del disco C con extension «txt«. La salida sera solo de los nombres de los ficheros y en 3 columnas.
Recordemos que fw es el alias de Format-Wide.
7.3- Format-Table (ft)
Aplica a la salida de un comando el formato de una tabla con las propiedades seleccionadas del objeto en cada columna.
Tambien se puede usar format-wide para agregar las propiedades calculadas a un objeto antes de mostrarlo. Para ello deberemos usar el parametro property para especificar una tabla hash. La tabla hash puede contener 2 claves: label y expression.
Parametros
-property <object[]>
Especifica las propiedades del objeto que se va a mostrar y el orden en el que van a aparecer. Se permite el uso de caracteres comodin.
-autosize <SwitchParameter>
Ajusta el tamaño de columna y el numero de columnas en funcion del ancho de los datos.
Otros parametros: hidetableheaders, groupby, wrap, view, force, inputobject, expand, displayerror, showerror.
Par obtener mas informacion sobre format-wide, escribiremos en la linea de comandos de Powershell: get-help -detailed format-table.
Ejemplo 1:
>get-childitem | format-table
En este caso podemos ver que la salida es la misma que si no hubiesemos utilizado format-wide.
Ejemplo 2:
>get-childitem -path c:\power -include «*.txt» -recurse | format-table -property name, length
Ahora si que vemos la diferencia ya que solo vemos las propiedades name y length.
Bueno, hasta aqui llega el articulo sobre el formateo de la salida en Windows Powershell. Disponemos de otro cmdlet relacionado con este tema: format-custom, pero de momento no lo vamos a comentar. Creo que con lo que hemos visto tenemos suficiente para practicar un poco con este asunto.
Venga, a pasarlo bien!!!
Otros articulos sobre Powershell:
- 1-. Introduccion.
- 2-. Empezando con Powershell 1.0.
- 3-. Obtener ayuda.
- 4-. Get-Command.
- 5-. Tuberias y redireccion.
- 6-. Get-childitem.
Oscar Abad
http://www.xulak.com – Consultoría informática
Programador WordPress freelance
Crear un script en PowerShell que tome desde un archivo de texto un listado de ips o nombres de computadores luego deberá tomar cada uno de los nombres o ip de este archivo de texto y escanearlos por la red y poder listar todos sus softwares instalados en un exel.
bueno nno te aburro mas aki ta el codigo ke e echo mi uniko problema es ke no se como darle el formato a la fecha ya que cuando me abre el exel me aparece en este formato:20090826 y quiero ke kede asi 26-08-2009
Codigo:::
$Excel = New-Object -ComObject Excel.Application
$Excel.visible = $True
$Excel.SheetsInNewWorkbook = @(get-content «C:\Servers.txt»).count
$i = 1
#leyendo el contenido del Server.txt en el cual se encuentran las ip’s
foreach ($server in get-content «C:\Servers.txt»)
{
$Excel = $Excel.Workbooks.Add()
$Sheet = $Excel.Worksheets.Item($i++)
$Sheet.Name = $server
$intRow = 1
# enviendo un ping a cada ip para saver si esta online o no
$ping = Get-WmiObject `
-query «SELECT * FROM Win32_PingStatus WHERE Address = ‘$server'»
if ($Ping.StatusCode -eq 0) {
#Creando la cabezera del exel
$Sheet.Cells.Item($intRow,1) = «EQUIPO»
$Sheet.Cells.Item($intRow,2) = «SOFTWARE»
$Sheet.Cells.Item($intRow,3) = «VERSION»
$Sheet.Cells.Item($intRow,4) = «FECHA INSTALACION»
$Sheet.Cells.Item($intRow,5) = «FABRICANTE»
$Sheet.Cells.Item($intRow,1).Font.Bold = $True
$Sheet.Cells.Item($intRow,2).Font.Bold = $True
$Sheet.Cells.Item($intRow,3).Font.Bold = $True
$Sheet.Cells.Item($intRow,4).Font.Bold = $True
$Sheet.Cells.Item($intRow,5).Font.Bold = $True
$intRow++
# Aqui se esta pasando el comando Get-WmiObject a la variable $software
$software = Get-WmiObject `
-ComputerName $server -Class Win32_Product
#Formando el exel
foreach ($objItem in $software){
$Sheet.Cells.Item($intRow, 1) = $server
$Sheet.Cells.Item($intRow, 2) = $objItem.Name
$Sheet.Cells.Item($intRow, 3) = $objItem.Version
$Sheet.Cells.Item($intRow, 4) = $objItem.InstallDate
$Sheet.Cells.Item($intRow, 5) = $objItem.vendor
$intRow ++
}
$Sheet.UsedRange.EntireColumn.AutoFit()
}
}