Powershell 在一行中的两个相邻行上使用“选择对象”可输出一个;“破碎的”;列表

Powershell 在一行中的两个相邻行上使用“选择对象”可输出一个;“破碎的”;列表,powershell,powershell-4.0,Powershell,Powershell 4.0,考虑以下示例: if ([Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") -eq $null) {return} $server = New-Object Microsoft.SqlServer.Management.Smo.Server servername $server | Select Name, Product, Edition, VersionString $server.Databases

考虑以下示例:

if ([Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") -eq $null) {return}
$server = New-Object Microsoft.SqlServer.Management.Smo.Server servername
$server | Select Name, Product, Edition, VersionString 
$server.Databases | select name,CompatibilityLevel
如果在命令行上每行执行一次,输出将有点类似于以下内容:

Name                                     Product                                  Edition                                 VersionString                          
----                                     -------                                  -------                                 -------------                          
SERVERNAME                               Microsoft SQL Server                     Developer Edition (64-bit)              12.0.4213.0                            

Name                                                                     CompatibilityLevel
----                                                                     ------------------
Database123456789                                                                Version100
Database234567890                                                                Version100
如果作为脚本执行,输出如下所示(请注意缺少的“Version100”…):

即使像这样更改脚本也无助于输出混乱

if ([Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") -eq $null) {return}
$server = New-Object Microsoft.SqlServer.Management.Smo.Server servername
$server | Select Name, Product, Edition, VersionString 
Write-Host "Databases on $($server.Name):"
$server.Databases | select name,CompatibilityLevel
相反,输出将如下所示:

Name                                     Product                                  Edition                                 VersionString                          
----                                     -------                                  -------                                 -------------                          
SERVERNAME                               Microsoft SQL Server                     Developer Edition (64-bit)              12.0.4213.0                            
Databases on SERVERNAME:
Database123456789                                                                                                                                                
Database234567890
如何强制PowerShell输出CompatibilityLevel成员?

您可以使用cmdlet强制输出:

$server.Databases | select name,CompatibilityLevel | Format-Table
您可以使用cmdlet强制输出:

$server.Databases | select name,CompatibilityLevel | Format-Table

您正在输出多种类型的对象,而默认的输出格式化程序不会合并不同的对象。我想知道您希望输出是什么样子的?我希望每行执行脚本时输出是什么样子。然而,通过格式列表管道传输第二个选择对象,如下面jisaak的回答中所述,确实达到了预期的结果!您正在输出多种类型的对象,而默认的输出格式化程序不会合并不同的对象。我想知道您希望输出是什么样子的?我希望每行执行脚本时输出是什么样子。然而,通过格式列表管道传输第二个选择对象,如下面jisaak的回答中所述,确实达到了预期的结果!