我试图删除输出前后的空白行,但它不起作用。我尝试在第一个 Write-Host 之后添加 -NoNewLine,但到目前为止仅删除一个空白行。
代码:
$tag1 = "c91638"
Write-Host "Operating System Information"
$OSInfo = get-wmiobject -class win32_operatingsystem -computername $tag1
$OSInfo `
| Format-List `
@{Name="OS Name";Expression={$_.Caption}},
@{Name="OS Boot Time";Expression={$_.ConvertToDateTime($_.LastBootUpTime)}},
@{Name="OS Install Date";Expression={$_.ConvertToDateTime($_.InstallDate)}};
Write-Host "Line test.."
输出:
Operating System Information
OS Name : Microsoft Windows 7 Enterprise
OS Boot Time : 8/27/2015 2:05:35 AM
OS Install Date : 4/4/2014 11:39:15 AM
Line test..
我想做的事:
Operating System Information
OS Name : Microsoft Windows 7 Enterprise
OS Boot Time : 8/27/2015 2:05:35 AM
OS Install Date : 4/4/2014 11:39:15 AM
Line test..
试试这个:
($OSInfo `
| Format-List `
@{Name="OS Name";Expression={$_.Caption}},
@{Name="OS Boot Time";Expression={$_.ConvertToDateTime($_.LastBootUpTime)}},
@{Name="OS Install Date";Expression={$_.ConvertToDateTime($_.InstallDate)}} `
| Out-String).Trim()
这将清除
Format-List
产生的所有无关空白行。您可能需要插入一些您自己可以控制的。
只是添加一条评论,因为我看到这种情况一直在进行,即使是现在 -
Format-List
和 Format-Table
应该 only 用于在控制台中输出文本。
如果您要将对象输出为文本文件、CSV 等,那么您只需
Select-Object
即可获取所需的对象,而不是 ft
或 fl
。然后,如果需要文本格式,您可以应用 Out-String
。
上面的例子应该是:
($OSInfo `
| Select-Object `
@{Name="OS Name";Expression={$_.Caption}},
... `
| Out-String).Trim()
使用
.Trim()
太过分了,它会删除前导和尾随空格以及空行。如果您只想删除空白行,请尝试此操作,在任何生成字符串的代码之后,执行以下操作:
$result.Trim("`r","`n")
或者对于许多字符串,例如在
Format-Table
或类似内容之后:
$results | Format-Table | Out-String | ForEach-Object { $_.Trim("`r","`n") }
你也可以这样做:
$result=yourCommandHere | Out-String
$result.Trim()
或者在一行中不使用变量:
(yourCommandHere | Out-String).Trim()
这是一个一体化函数,可以轻松写入数组项(作为输出结果),删除空行,可以通过管道传输。 2个使用示例如下所示 希望这有帮助
function Write-Array {
Param(
[Parameter(Mandatory, ValueFromPipeline)][array] $Array,
[string]$Prefixe,
[bool]$Numbering = $False
)
if ($Numbering) {
$Index = 0
$NumberOfDigit = $($Array.Count).ToString().Length
$Array | Format-List | Out-String -Stream | ForEach-Object -Process {
if (-not [string]::IsNullOrWhiteSpace($_)) {
"# {0,$NumberOfDigit}$Prefixe{1}" -f ($Index += 1), $_
}
}
} else {
$Array | Format-List | Out-String -Stream | ForEach-Object -Process {
if (-not [string]::IsNullOrWhiteSpace($_)) {
"$Prefixe{0}" -f $_
}
}
}
}
示例#1:
Write-Array @("titi", "toto", "tata", "titi", "toto", "tata", "titi", "toto", "tata", "titi", "toto", "tata") -Prefixe " : " -Numbering $True
# 1 : titi
# 2 : toto
# 3 : tata
# 4 : titi
# 5 : toto
# 6 : tata
# 7 : titi
# 8 : toto
# 9 : tata
# 10 : titi
# 11 : toto
# 12 : tata
示例#2:
Get-Service -Name "*openvpn*" | Select-Object DisplayName,Name,Status,StartType | Write-Array -Prefixe " - "
- DisplayName : OpenVPN Interactive Service
- Name : OpenVPNServiceInteractive
- Status : Running
- StartType : Automatic