想想一个非常好的标题很难。如果你能想到更好的标题,请随时编辑它。参数化数组在所有情况下都不能正常工作
Powershell的3
下面是一个示例函数:
Function New-Cmdlet
{
[CmdletBinding(SupportsShouldProcess=$True)]
Param([Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
[String[]]$ComputerName)
BEGIN
{
Write-Verbose -Message "Cmdlet is starting."
}
PROCESS
{
Write-Verbose -Message "Beginning Process block on $ComputerName"
}
END
{
Write-Verbose -Message "Running End block."
}
}
现在,如果我跑Get-Content C:\hosts.txt | New-Cmdlet
,过程块在HOSTS.TXT发现每个条目运行一次。这是好的和正确的。
如果我运行"host1","host2" | New-Cmdlet
,那么PROCESS块将运行两次;一次为host1,一次为host2。再次,这是好的和正确的。
但是,如果我运行New-Cmdlet -ComputerName "host1","host2"
或几乎任何其他变体,我可以想到像New-Cmdlet -ComputerName @("host1","host2")
...... PROCESS块只运行一次。哪个不好。
任何想法我能做些什么才能在每种情况下正常工作?
谢谢。我想我只是感到困惑,因为当我使用管道时,Process程序块表现为它自己的foreach循环,所以在它内部添加一个foreach循环似乎是多余的。 –