格式化PowerShell脚本的结果

时间:2014-12-09 22:17:12

标签: powershell service output

如何在此脚本的每行结果左侧添加服务器名称?谢谢!

$servers = Get-Content -path .\Machines.txt
[pscustomobject]$result = @()  
$subresult =
ForEach ($server in $servers) 
{
Set-Service -computername $servers -Name sacsvr -StartupType Disabled -PassThru
}
$result = $subresult 
$result | Out-File local_group_members.csv

这是一个示例结果:

Status   Name               DisplayName                           
------   ----               -----------                           
Stopped  sacsvr             Special Administration Console Helper 
Stopped  sacsvr             Special Administration Console Helper 
Stopped  sacsvr             Special Administration Console Helper 

2 个答案:

答案 0 :(得分:2)

或者,您可以直接向正在输出的对象添加属性。将Set-Service传递给Add-Member,如下所示:

Set-Service -computername $servers -Name sacsvr -StartupType Disabled -PassThru | Add-Member -MemberType NoteProperty -Name 'Server' -Value $Server -PassThru

现在,传递给$subresult的每个对象都有一个新属性Server,它是运行它的服务器的名称。您可能希望在输出时通过选择来管理您想要的订单。

$SubResult | Select Server, Status, Name, DisplayName | Export-CSV 'local_group_members.csv' -NoType

答案 1 :(得分:1)

您可以使用Select-Object随意重新排序或添加到您的输出中。您可以使用hash tables来包含计算的属性,例如您所需的ServerName。

因此,对于每个服务器,您可以设置服务并使用该服务器名称标记输出:

ForEach ($server in $servers) 
{
    Set-Service -computername $server -Name sacsvr -StartupType Disabled -PassThru |
    Select @{Name = 'ServerName'; Expression = {$server}}, Name, DisplayName, Status
}

以上是简写:

Select-Object -Property (properties)

-Property参数允许您选择任何被管道对象类型的任意属性分组。另一个参数-InputObject允许我们按值管道对象。