0

我创建了一个 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脚本。我从未处理过必须将信息传递给另一个命令或必须接受管道信息的函数。是否有任何最佳实践来实现这一目标?类型是否应该从字符串数组更改为其他类型?

4

1 回答 1

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 命令保持一致。最后一个最佳实践,通常noun在 PowerShell 中是单数的。考虑调用函数Deploy-Procedure

于 2013-10-30T20:01:30.830 回答