PowerShell 技能连载 - 处理数据(第 3 部分)
在第 1 和 第 2 部分,您学到了如何 PowerShell 函数如何处理通过参数和通过管道传入的信息。在这部分中,我们打算介绍一个函数如何接收多行文本并将它加工成一个字符串。
这个函数同时接受参数和管道传入的多行文本。该函数使用 StringBuilder
对象来收集所有的文本行,然后将收到的所有文本行合并成单个字符串:
#requires -Version 2
function Collect-Text
{
param
(
[Parameter(Mandatory=$true, ValueFromPipeline=$true)]
[String[]]
[AllowEmptyString()]
$Text
)
begin
{
$sb = New-Object System.Text.StringBuilder
}
process
{
foreach ($line in $Text)
{
$null = $sb.AppendLine($line)
}
}
end
{
$result = $sb.ToString()
$result
}
}
请注意如何既支持通过参数,也支持通过管道传递文本行:
PS C:\> Collect-Text -Text 'Line 1', '', 'Line 2'
Line 1
Line 2
PS C:\> 'Line 1', '', 'Line 2' | Collect-Text
Line 1
Line 2
请注意参数:它使用了 [AllowEmptyString()]
属性。它确保可以接受空字符串参数。在 mandatory (必须)参数中,如果没有这个属性,是不允许空字符串的。
PowerShell 技能连载 - 处理数据(第 3 部分)