Как создать эффект printf в PowerShell

Как я могу получить сценарий PowerShell для печати информации в табличном формате по мере выполнения сценария.

в bash, я бы сделал это

printf "%st%-15.15s" "Locale" "Jar"
if($verbose);then
   printf "%-15.15s %-15.15s" "HelpSet" "Exception"
fi
printf "t%sn" "Status"
...
printf "%st%-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%sn" $status

и

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

спасибо

2 ответов


попробуйте это в консоли PowerShell:

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

можно использовать строка форматирования довольно легко из PowerShell.

на -f оператор это короткий путь PowerShell к String.Format


Я принял ответ Дэвида, как это то, что я просил. Тем не менее, я решил создать объект

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

и затем использовать файл формата XML в формат таблицы

<?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>

и в коде do

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

для печати записи