当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell:创建接受管道输入(ByValue)的函数

作者:精品下载站 日期:2024-12-14 07:32:33 浏览:11 分类:玩电脑

PowerShell:创建接受管道输入(ByValue)的函数


您可能已经在 PowerShell 中创建了第一个函数,现在您希望您的函数能够进行管道输入。正确的?好的,您来对地方了。在这篇博文中,我将创建一个按值接受管道输入的示例函数。

示例功能

让我们将此示例函数用于我们的实验。它有一个名为“Text”的参数。


function Test-PipelineInput {

param
(

[Parameter()]
$Text
)

Write-Host "$Text"

}

执行后,它会按预期写入在 Text 参数中输入的文本。

[玩转系统] PowerShell:创建接受管道输入(ByValue)的函数

但是,如果您尝试将管道左侧的文本通过管道传输到管道右侧,您将看到一条错误消息。

[玩转系统] PowerShell:创建接受管道输入(ByValue)的函数

错误消息显示:

Test-PipelineInput :输入对象不能绑定到命令的任何参数,因为该命令会执行以下操作
不接受管道输入,或者输入及其属性与接受管道输入的任何参数都不匹配。

ValueFromPipeline=$true

因此,我们必须配置参数以接受管道输入。代码现在看起来像这样:


function Test-PipelineInput {

param
(

[Parameter(ValueFromPipeline=$true)]
$Text
)

Write-Host "$Text"
}

这效果很好。

[玩转系统] PowerShell:创建接受管道输入(ByValue)的函数

如果我们输入两个不同的文本会发生什么?

[玩转系统] PowerShell:创建接受管道输入(ByValue)的函数

只有第二个文本通过管道进行处理。为什么?

因为没有 process 语句的函数始终是 END 函数,这意味着只有第二个对象 (Hello World2) 将通过管道发送。

如果您想知道 ByValue 的含义,请参阅此处:了解 PowerShell 管道参数绑定

必须有:开始-过程-结束

我们最终的工作函数如下例所示。请记住,我们没有开始代码,也没有结束代码,因此我决定将这两个语句留空。请记住,它们对于管道功能来说是必需的


function Test-PipelineInput {

param
(

[Parameter(ValueFromPipeline=$true)]
$Text
)

Begin {}

Process {

Write-Host "$Text"

}

End {}

}

[玩转系统] PowerShell:创建接受管道输入(ByValue)的函数

看起来不错。都很好。

下次使用 PowerShell 再见!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯