我希望能夠撰寫一個Out-String不填充或截斷結果輸出的 PowerShell 版本。我可以使用以下代碼實作類似的功能:
Write-Host (Get-ChildItem env: | Out-String -Stream -Width 9999 | ForEach-Object { "$($_.Trim())`n" })
產生所需的輸出:
Name Value
---- -----
ALLUSERSPROFILE C:\ProgramData
APPDATA C:\Users\Me\AppData\Roaming
... etc ...
我想將此功能捕獲到 的新版本中Out-String,但不知道如何實作。這與我所得到的一樣接近:
filter Out-String2 {
$_ | Out-String -Stream -Width 9999 | ForEach-Object { "$($_.Trim())`n" }
}
Write-Host (Get-ChildItem env: | Out-String2)
但這會導致在Get-ChildItem過濾器中獨立呈現每個元素的不良效果,從而產生如下輸出:
Name Value
---- -----
ALLUSERSPROFILE C:\ProgramData
Name Value
---- -----
APPDATA C:\Users\Me\AppData\Roaming
...etc...
這種管道元素的組合在 PowerShell 中是否可行,如果可以,如何實作?
uj5u.com熱心網友回復:
這對 a 不起作用filter,但是如果您從中創建函式,則可以使用Automatic 變數 $input:
function Out-String2 {
Param(
[Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)]
$Data
)
# if the data is sent through the pipeline, use $input to collect is as array
if ($PSCmdlet.MyInvocation.ExpectingInput) { $Data = @($input) }
$Data | Out-String -Stream -Width 9999 | ForEach-Object { "$($_.Trim())`r`n" }
}
呼叫它使用
Write-Host (Out-String2 (Get-ChildItem env:))
或者
Write-Host (Get-ChildItem env: | Out-String2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/335391.html
