在函数之间传递参数的最佳实践?

时间:2013-10-30 19:53:34

标签: powershell

我创建了一个PowerShell函数来部署我们的存储过程:

Function Deploy-Procedures {
    param(
        [Parameter(Position = 0, Mandatory=$true)] 
        [string[]] $files,
        [Parameter(Position = 1, Mandatory=$true)] 
        [string] $databaseServer,
        [Parameter(Position = 2, Mandatory=$true)] 
        [string] $databaseName,
        [string] $databaseUserName,
        [string] $databasePassword,
        [byte] $numRetries = 2
    )  

现在,此过程可以独立运行。您会注意到$files变量只是一个字符串数组。执行脚本的个人只传递要部署的文件数组。我想创建另一个powershell脚本来处理需要部署的文件列表,并将这些文件传递给 Deploy-Procedures 脚本。我从来没有处理过将信息传递给另一个命令或必须接受管道信息的函数。有没有最佳实践来实现这一目标?应该将类型从字符串数组更改为其他类型吗?

1 个答案:

答案 0 :(得分:5)

它取决于生成文件列表的函数的输出类型。如果那将是字符串(路径),那么你可以这样做:

[Parameter(Position = 0, Mandatory=$true, ValueFromPipeline=$true)] 
[ValidateNotNullOrEmtpy()]
[string[]] $Files,

如果您希望Deploy-Procedures函数使用Get-ChildItem(或Get-Item)生成的文件列表,请执行以下操作:

[Parameter(Position = 0, Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] 
[Alias("PSPath")]
[ValidateNotNullOrEmtpy()]
[string[]] $Files,

我还建议将参数从$ files重命名为$ Path。而对于其他最佳实践,我将PascalCase的高级函数参数与其他PowerShell命令保持一致。最后一个最佳实践,通常是PowerShell中的noun是单数。考虑调用函数Deploy-Procedure