我对《在一个月的午餐中学习 PowerShell》一书中看到的内容感到困惑。在第 21 章中,当作者讨论通过参数绑定或管道接受输入的函数时,他给出了两种模式。
第一个如下
function someworkerfunction {
# do some work
}
function Get-SomeWork {
param ([string[]]$computername)
BEGIN {
$usedParameter = $False
if($PSBoundParameters.ContainsKey('computername')) {
$usedParameter = $True
}
}
PROCESS {
if($usedParameter) {
foreach($computer in $computername) {
someworkerfunction -computername $comptuer
}
} else {
someworkerfunction -comptuername $_
}
}
END {}
}
第二个这样
function someworkerfunction {
# do stuff
}
function Get-Work {
[CmdletBinding()]
param(
[Parameter(Mandatory=$True,
ValueFromPipelineByPropertyName=$True)]
[Alias('host')]
[string[]]$computername
)
BEGIN {}
PROCESS {
foreach($computer in $computername) {
someworkerfunction -comptuername $computer
}
}
END {}
}
我知道第二个示例是标准的 Powershell 2.0 高级功能。我的问题是,随着 Powershell 2.0 对 cmdletbinding 指令的支持,您是否想使用第一个模式。这只是 Powershell 1.0 的遗产吗?基本上,在使用 Powershell 2.0 时,有时我会想搞乱第一个模式,而第二个模式却干净得多。
任何见解将不胜感激。
谢谢。
如果有人希望获得关于如何从管道输入读取的非常非常简单的解释,请参阅
如何编写从管道输入读取的 powershell 函数? https://stackoverflow.com/questions/11880114/how-do-you-write-a-powershell-function-that-reads-from-piped-input
有这个^
当我有这个问题时,我会节省很多时间,因为这个线程非常复杂,并且实际上并没有解释如何处理函数的管道输入。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)