提示输入时,DynamicParam不工作

时间:2014-12-09 19:59:34

标签: powershell powershell-v3.0

我正在尝试让我的powershell脚本提示输入,但仍然使用dynamicparam。如果我通过命令行传递参数(例如:DeployBuild "DEV02" "ClientPortal" "a" "b"),那么下面的代码工作正常,我会收到动态参数的提示。如果我选择不通过命令行传递参数(例如:DeployBuild),而是让脚本提示输入,则动态参数退出工作。有谁知道为什么这不起作用?

Function DeployBuild {

    [CmdletBinding()]
    Param
    (
            [ValidateSet("DEV01","DEV02","PEDEV01","QA01","QA02","UAT","PERF01","PROD")]
            [Parameter(Mandatory=$true, Position=1)]
            [String]$environment,
            [Parameter(Mandatory=$true, Position=2)]
            [ValidateSet("AuthenticationService","ClientPortal")]
            [String]$application,
            [Parameter(Mandatory=$true, Position=3)]
            [String]$buildName,
            [Parameter(Mandatory=$true, Position=4)]
            [String]$buildNumber
    )


    DynamicParam{
        if ($environment -eq "DEV02"){
            #create a new ParameterAttribute Object              
            $buildVersionAttribute = New-Object System.Management.Automation.ParameterAttribute               

            $buildVersionAttribute.Position = 5           
            $buildVersionAttribute.Mandatory = $true              


            #create an attributecollection object for the attribute just created.              
            $attributeCollection = new-object System.Collections.ObjectModel.Collection[System.Attribute]               

            #add our custom attribute              
            $attributeCollection.Add($buildVersionAttribute)               

            #add our paramater specifying the attribute collection              
            $buildVersionParam = New-Object System.Management.Automation.RuntimeDefinedParameter('buildVersion', [double], $attributeCollection)               

            #expose the name of our parameter              
            $paramDictionary = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary             
            $paramDictionary.Add('buildVersion', $buildVersionParam)              

            return $paramDictionary
        }
    }

    End{
        Write-Host $environment
        Write-Host $application
        Write-Host $buildName
        Write-Host $buildNumber
        Write-Host $PSBoundParameters.buildVersion
    }
}

0 个答案:

没有答案