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的回答中所述,确实达到了预期的结果!