让 format-table 正确处理多个源
Getting format-table to work correctly with multiple sources
我想检查几个特定服务器的特定服务,并希望输出以相同的格式显示 table。我只能创建多个 table,或者只显示最后一个 table 的格式。我的意图是在同一个 table.
上显示所有内容
Get-Service "ServiceA", "ServiceB", "ServiceC" -ComputerName SERVER1
Get-Service "ServiceD", "ServiceE", "ServiceF" -ComputerName SERVER2 |
Format-Table -Property MachineName, Status, Name, DisplayName -Auto
如何在相同格式的 table 上包含 SERVER1 和 SERVER2?上面的例子只会显示 SERVER2 的格式化 table?
我试过的其他方法是
Get-Service "ServiceA", "ServiceB", "ServiceC" -ComputerName SERVER1 |
Format-Table -Property MachineName, Status, Name, DisplayName -Auto
Get-Service "ServiceD", "ServiceE", "ServiceF" -ComputerName SERVER2 |
Format-Table -Property MachineName, Status, Name, DisplayName -Auto
但这样会创建两个不同的 table,而不是像我希望的那样将所有信息都集中在一个中。
我需要在六台不同的服务器上检查不同的服务,但我认为只有两台就足以说明我在这个脚本上遇到的困难。
你可以这样做:
# create array
$services = @()
# add items to array
$services += Get-Service spooler
$services += Get-Service wsearch
# format array
$services | Format-Table -Property MachineName, Status, Name, DisplayName -AutoSize
或者像这样:
# create list
$services = New-Object System.Collections.ArrayList
# add items to list
$services.Add($(Get-Service spooler)) | Out-Null
$services.Add($(Get-Service wsearch)) | Out-Null
# display list
$services | Format-Table -Property MachineName, Status, Name, DisplayName -AutoSize
如果您希望它们都出现在一个 table 中,您需要同时将 所有 结果发送到 Format-Table
。如果您调用 Format-Table
两次,您将得到两个单独的 table。
幸运的是,PowerShell 使得将命令的结果存储在变量中并稍后使用它变得非常容易。
您需要做的是创建一个变量来保存结果,然后将所有 Get-Service
命令存储在其中,如下所示:
#take the output and store it in $services
$services = get-service bits,winrm -computername ServerA
#add the output of the next to $services as well
$services += get-service AdobeARMservice,ALG -computername ServerB
#finally, make one big table to display it all
$services |Format-Table -Property MachineName, Status, Name, DisplayName -auto
MachineName Status Name DisplayName
----------- ------ ---- -----------
ServerA Running bits Background Intelligent Transfer Service
ServerA Running winrm Windows Remote Management (WS-Management)
ServerB Running AdobeARMservice Adobe Acrobat Update Service
ServerB Stopped ALG Application Layer Gateway Service
在你深入这个兔子洞之前,请记住 Format-Table 仅用于在控制台中查看内容。例如,您不能使用 FT
制作的 table 然后将其导出为 .csv。如果您只在控制台中查看它就可以了,那么这应该可以工作。
无需填充数组或 ArrayList,您可以简单地使用 sub-expression 将两个输出整理成单个 Format-Table:
$(
get-service "ServiceA", "ServiceB", "ServiceC" -computername SERVER1
get-service "ServiceD", "ServiceE", "ServiceF" -computername SERVER2
) | Format-Table -Property MachineName, Status, Name, DisplayName -auto
您的示例没有产生预期的结果,因为对于第一个示例,只有第二个 Get-Service
的输出进入 Format-Table
,而对于第二个示例,创建了两个单独的表。
如果您查看 Get-Service
cmdlet 的 documentation,您会注意到 -Name
和 -ComputerName
都将字符串数组作为输入, 所以如果你想在所有计算机上检查相同的服务,你可以简单地做这样的事情:
$servers = 'SERVER1', 'SERVER2'
$services = 'ServiceA', 'ServiceB', 'ServiceC'
Get-Service $services -ComputerName $servers |
Format-Table -Property MachineName, Status, Name, DisplayName -AutoSize
如果您想检查每台服务器上的不同服务,我会使用哈希表将服务映射到服务器
$services = @{
'SERVER1' = 'ServiceA', 'ServiceB', 'ServiceC'
'SERVER2' = 'ServiceD', 'ServiceE', 'ServiceF'
}
和 运行 Get-Service
在 ForEach-Object
循环中,像这样:
$services.Keys | ForEach-Object {
Get-Service $services[$_] -ComputerName $_
} | Format-Table -Property MachineName, Status, Name, DisplayName -AutoSize
或者像这样:
$services.GetEnumerator() | ForEach-Object {
Get-Service $_.Value -ComputerName $_.Name
} | Format-Table -Property MachineName, Status, Name, DisplayName -AutoSize
我想检查几个特定服务器的特定服务,并希望输出以相同的格式显示 table。我只能创建多个 table,或者只显示最后一个 table 的格式。我的意图是在同一个 table.
上显示所有内容Get-Service "ServiceA", "ServiceB", "ServiceC" -ComputerName SERVER1
Get-Service "ServiceD", "ServiceE", "ServiceF" -ComputerName SERVER2 |
Format-Table -Property MachineName, Status, Name, DisplayName -Auto
如何在相同格式的 table 上包含 SERVER1 和 SERVER2?上面的例子只会显示 SERVER2 的格式化 table?
我试过的其他方法是
Get-Service "ServiceA", "ServiceB", "ServiceC" -ComputerName SERVER1 |
Format-Table -Property MachineName, Status, Name, DisplayName -Auto
Get-Service "ServiceD", "ServiceE", "ServiceF" -ComputerName SERVER2 |
Format-Table -Property MachineName, Status, Name, DisplayName -Auto
但这样会创建两个不同的 table,而不是像我希望的那样将所有信息都集中在一个中。
我需要在六台不同的服务器上检查不同的服务,但我认为只有两台就足以说明我在这个脚本上遇到的困难。
你可以这样做:
# create array
$services = @()
# add items to array
$services += Get-Service spooler
$services += Get-Service wsearch
# format array
$services | Format-Table -Property MachineName, Status, Name, DisplayName -AutoSize
或者像这样:
# create list
$services = New-Object System.Collections.ArrayList
# add items to list
$services.Add($(Get-Service spooler)) | Out-Null
$services.Add($(Get-Service wsearch)) | Out-Null
# display list
$services | Format-Table -Property MachineName, Status, Name, DisplayName -AutoSize
如果您希望它们都出现在一个 table 中,您需要同时将 所有 结果发送到 Format-Table
。如果您调用 Format-Table
两次,您将得到两个单独的 table。
幸运的是,PowerShell 使得将命令的结果存储在变量中并稍后使用它变得非常容易。
您需要做的是创建一个变量来保存结果,然后将所有 Get-Service
命令存储在其中,如下所示:
#take the output and store it in $services
$services = get-service bits,winrm -computername ServerA
#add the output of the next to $services as well
$services += get-service AdobeARMservice,ALG -computername ServerB
#finally, make one big table to display it all
$services |Format-Table -Property MachineName, Status, Name, DisplayName -auto
MachineName Status Name DisplayName
----------- ------ ---- -----------
ServerA Running bits Background Intelligent Transfer Service
ServerA Running winrm Windows Remote Management (WS-Management)
ServerB Running AdobeARMservice Adobe Acrobat Update Service
ServerB Stopped ALG Application Layer Gateway Service
在你深入这个兔子洞之前,请记住 Format-Table 仅用于在控制台中查看内容。例如,您不能使用 FT
制作的 table 然后将其导出为 .csv。如果您只在控制台中查看它就可以了,那么这应该可以工作。
无需填充数组或 ArrayList,您可以简单地使用 sub-expression 将两个输出整理成单个 Format-Table:
$(
get-service "ServiceA", "ServiceB", "ServiceC" -computername SERVER1
get-service "ServiceD", "ServiceE", "ServiceF" -computername SERVER2
) | Format-Table -Property MachineName, Status, Name, DisplayName -auto
您的示例没有产生预期的结果,因为对于第一个示例,只有第二个 Get-Service
的输出进入 Format-Table
,而对于第二个示例,创建了两个单独的表。
如果您查看 Get-Service
cmdlet 的 documentation,您会注意到 -Name
和 -ComputerName
都将字符串数组作为输入, 所以如果你想在所有计算机上检查相同的服务,你可以简单地做这样的事情:
$servers = 'SERVER1', 'SERVER2'
$services = 'ServiceA', 'ServiceB', 'ServiceC'
Get-Service $services -ComputerName $servers |
Format-Table -Property MachineName, Status, Name, DisplayName -AutoSize
如果您想检查每台服务器上的不同服务,我会使用哈希表将服务映射到服务器
$services = @{
'SERVER1' = 'ServiceA', 'ServiceB', 'ServiceC'
'SERVER2' = 'ServiceD', 'ServiceE', 'ServiceF'
}
和 运行 Get-Service
在 ForEach-Object
循环中,像这样:
$services.Keys | ForEach-Object {
Get-Service $services[$_] -ComputerName $_
} | Format-Table -Property MachineName, Status, Name, DisplayName -AutoSize
或者像这样:
$services.GetEnumerator() | ForEach-Object {
Get-Service $_.Value -ComputerName $_.Name
} | Format-Table -Property MachineName, Status, Name, DisplayName -AutoSize