在一行中的两个相邻行上使用 Select-Object 输出一个 "broken" 列表
Using Select-Object on two adjacent lines in a row outputs a "broken" list
考虑以下示例:
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"...):
Name Product Edition VersionString
---- ------- ------- -------------
SERVERNAME Microsoft SQL Server Developer Edition (64-bit) 12.0.4213.0
Database123456789
Database234567890
即使像这样更改脚本也无助于输出混乱。
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 成员?
您可以使用 Format-Table cmdlet 强制输出:
$server.Databases | select name,CompatibilityLevel | Format-Table
考虑以下示例:
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"...):
Name Product Edition VersionString
---- ------- ------- -------------
SERVERNAME Microsoft SQL Server Developer Edition (64-bit) 12.0.4213.0
Database123456789
Database234567890
即使像这样更改脚本也无助于输出混乱。
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 成员?
您可以使用 Format-Table cmdlet 强制输出:
$server.Databases | select name,CompatibilityLevel | Format-Table