我正在编写一个脚本,在每次迭代循环(所选服务的数组)之后,它将收集每个服务的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
答案 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)