在另一个函数中组合 PowerShell 的 Out-String
Composing PowerShell's Out-String within another function
我希望能够编写一个不填充或截断结果输出的 PowerShell Out-String
版本。我可以使用以下代码实现类似的目的:
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 中是否可行?如果可行,如何实现?
这在 filter
上不起作用,但您可以使用 Automatic variable $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)
我希望能够编写一个不填充或截断结果输出的 PowerShell Out-String
版本。我可以使用以下代码实现类似的目的:
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 中是否可行?如果可行,如何实现?
这在 filter
上不起作用,但您可以使用 Automatic variable $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)