2012-03-28 15 views
8

¿Cómo puedo obtener mi secuencia de comandos de PowerShell para imprimir la información en formato de tabla a medida que avanza la secuencia de comandos?Cómo crear el efecto de impresión en PowerShell

En bash Me gustaría hacer esto por

printf "%s\t%-15.15s" "Locale" "Jar" 
if($verbose);then 
    printf "%-15.15s %-15.15s" "HelpSet" "Exception" 
fi 
printf "\t%s\n" "Status" 
... 
printf "%s\t%-15.15s" $locale $helpFileName 
if($verbose); then 
    printf "%-15.15s %-15.15s" "$helpSetName" ${exclusion[$helpFileName]} 
fi 
status="OK" 
... 
if ($fixed); then 
    status="CORRECTED" 
fi 
printf "\t%s\n" $status 

para obtener

Locale Jar   HelpSet   Exception  Status 
de  help_D150  help_D150      CORRECTED 

es  help_D150  help_D150      OK 

fr  help_D150  help_D150      OK 

it  Locale folder not found 

nl  help_D150  help_D150      CORRECTED 

Gracias

Respuesta

16

Trate de hacer esto en la consola de PowerShell:

"{0}`t{1,-15}{2,-15}{3,-15}" -f "Locale", "Jar", "HelpSet", "Exception" 

Usted puede utilizar string formatting con bastante facilidad de PowerShell.

-f operator es un atajo de PowerShell para la función String.Format, que incluye todos los standard and custom que admiten el formato .NET.

+0

Con este enfoque, dos de las columnas condicionales se imprimen en una nueva línea en lugar de en la misma línea – rojanu

+0

Use una cadena de formato único, combinando todas las columnas, y use $ null o una cadena vacía para los argumentos que no desea imprimir. –

2

He aceptado la respuesta de David, ya que eso es lo que solicité. Sin embargo, he decidido crear un objeto mediante

try{ 
    add-type @' 
namespace FFPS { 
    public class Data { 
     public string Locale; 
     public string JarFile; 
     public string HelpSet; 
     public string CorrectName; 
     public string Status; 
    } 
} 
'@ 
} 
catch{} 

y luego usar archivo de formato XML para formatearlo como una tabla

<?xml version="1.0" encoding="utf-16"?> 
<Configuration> 
    <ViewDefinitions> 
     <View> 
      <Name>ffps.data</Name> 
      <ViewSelectedBy> 
       <TypeName>ffps.data</TypeName> 
      </ViewSelectedBy> 
      <TableControl> 
       <TableHeaders> 
        <TableColumnHeader> 
         <Label>Locale</Label> 
         <Width>6</Width> 
        </TableColumnHeader> 
        <TableColumnHeader> 
         <Label>Jar File</Label> 
         <Width>16</Width> 
        </TableColumnHeader> 
        <TableColumnHeader> 
         <Label>Help Set</Label> 
         <Width>16</Width> 
        </TableColumnHeader> 
        <TableColumnHeader> 
         <Label>Correct Name</Label> 
         <Width>16</Width> 
        </TableColumnHeader> 
        <TableColumnHeader> 
         <Label>Status</Label> 
         <Width>100</Width> 
        </TableColumnHeader> 
       </TableHeaders> 
       <TableRowEntries> 
        <TableRowEntry> 
         <TableColumnItems> 
          <TableColumnItem> 
           <ScriptBlock>$_.Locale</ScriptBlock> 
          </TableColumnItem> 
          <TableColumnItem> 
           <ScriptBlock>$_.JarFile</ScriptBlock> 
          </TableColumnItem> 
          <TableColumnItem> 
           <ScriptBlock>$_.HelpSet</ScriptBlock> 
          </TableColumnItem> 
          <TableColumnItem> 
           <ScriptBlock>$_.CorrectName</ScriptBlock> 
          </TableColumnItem> 
          <TableColumnItem> 
           <ScriptBlock>$_.Status</ScriptBlock> 
          </TableColumnItem> 
         </TableColumnItems> 
        </TableRowEntry> 
       </TableRowEntries> 
      </TableControl> 
     </View> 
    </ViewDefinitions> 
</Configuration> 

y en el Código de hacer

$currentFile = New-Object ffps.data 
$currentFile.Locale = "DE" 
$currentFile.JarFile = "JarFile.Name" 
... 
$currentFile 

para imprimir las entradas

Cuestiones relacionadas