外文格式

时间:2013-08-15 08:37:52

标签: powershell format

我正在编写一个脚本,在每次迭代循环(所选服务的数组)之后,它将收集每个服务的4个值:服务器名称,服务名称,服务状态和服务起始名称

因此,对于每次迭代,我想将4个提到的值输出到外部文件(txt,svc或html),以便每个值都将排列在自己的列中。目前我使用tab`t来排列每列中的值,但它不能很好地工作,因为某些服务名称更长或更短,因此它会搞砸列对齐。您建议采用哪种其他方法,以便所有列都正确对齐

下面是我的脚本片段,介绍了我目前如何将输出格式化为txt文件

ForEach($service in services)
    $startname = $service.startname
    $state = $service.state
    $servicename = $service.name
    write-output "$server `t $servicename `t $state `t $startname is current" | out-file -append $ScriptDirectory

4 个答案:

答案 0 :(得分:2)

如果您只是想以格式良好的方式将结果转储到文本中(即您没有制作此CSV或制表符分隔的要求,或者除了“易于阅读的人”之外的任何其他内容) ,然后使用Format-Table -AutoSize

AutoSize完全符合您的要求 - 它会检查您输出的所有属性的长度,然后动态调整列宽,以便尽可能多地显示。

你没有解释$server的来源,我会假设它是在其他地方定义的......

$services `
| Format-Table -AutoSize @{N='Server';E={$server}},StartName,State,Name `
| Out-String `
| Out-File results.txt

答案 1 :(得分:1)

使用Powershell对象存储输出,而不是使用多个变量。像这样:

ForEach($service in $services) {
  New-Object PSObject -Property @{
    StartName = $service.startname
    State = $service.state
    ServiceName = $service.name
  }
} | Out-File $ScriptDirectory 

您可能需要在链中添加一个Select-Object,以确保列的输出顺序正确。

答案 2 :(得分:0)

如果要保留变量,可以尝试以下字符串格式化以均匀地分隔字符串中的变量。在下面的示例中,每个值之间的间距为20个字符:

ForEach($service in services){
    $startname = $service.startname
    $state = $service.state
    $servicename = $service.name
    "{0,-20} | {1,-20} | {2,-20} | {3,-20}" -f $server,$servicename,$state,$startname `
                                                | Out-File -append $ScriptDirectory 
}

答案 3 :(得分:0)

有些不清楚你正在寻找什么,因为对象的Get-Service返回的某些属性不存在,因为编写并且代码看起来不完整。猜测你的意图:

$servers = @("server1","server2");
$services = get-service -computername $servers;

$svcCollection = @();
ForEach($service in $services) {
  $svccollection+=New-Object PSObject -Property @{
    Servername = $service.MachineName;
    StartName = $service.servicename;
    State = $service.Status;
    ServiceName = $service.DisplayName;
  }
}

# Various output formats
$svccollection|ConvertTo-Html|Out-File -path Services.html; # Create a full HTML file
$svcCollection|Export-Csv -NoTypeInformation -Path Services.csv; # Create a "traditional" CSV file
$svcCollection|Export-Csv -Delimiter "`t" -Path Services-tab.csv; # Create a tab-delimited CSV file
$svcCollection|ConvertTo-Xml|Out-File -path Services.xml; # Create an XML file
$svcCollection|ConvertTo-Json|Out-File -path Services.js; # Create a JSON object (v3 only)