Unlock the Secrets of PowerShell Dynamic Parameter: Pro Tips Inside!

Dynamic parameters in PowerShell provide a powerful way to enhance user experience and customize command behavior based on runtime conditions. In this comprehensive guide, we delve into the world of the PowerShell dynamic parameter, exploring their creation, usage, and benefits. Learn how to dynamically adjust command behavior and provide more intuitive and flexible PowerShell commands.

What does the PowerShell Dynamic Parameter do?

In PowerShell, a dynamic parameter allows you to add or remove parameters from a cmdlet or function at runtime, based on specific conditions or user input. Dynamic parameters enhance the flexibility and adaptability of your PowerShell scripts by dynamically adjusting the available parameters based on the current context or environment.

The dynamic parameter functionality in PowerShell is achieved by implementing the System.Management.Automation.IDynamicParameters interface. By implementing this interface, you can define custom logic to generate and populate dynamic parameters dynamically.

Here’s an overview of how dynamic parameters work in PowerShell:

  • A cmdlet or function implements the IDynamicParameters interface by defining a GetDynamicParameters() method.
  • The GetDynamicParameters() method is responsible for generating and returning an instance of a custom PowerShell object that contains the dynamic parameter definitions.
  • The dynamic parameter object is created based on specific conditions or user input. You can use the current state of the system, values of other parameters, or any other logic to determine which parameters should be dynamically added or removed.
  • The dynamic parameters are added to the cmdlet or function and become available for use. Users can provide values for these parameters when invoking the cmdlet or function.

By using dynamic parameters, you can create more flexible and interactive PowerShell scripts. You can adjust the available parameters based on different scenarios, making your scripts more intuitive and user-friendly.

Using the PowerShell Dynamic Parameter

Creating dynamic PowerShell parameter validation can be achieved by implementing custom validation attributes. Here’s an example of how you can create a dynamic parameter validation in PowerShell:

  • Define the Custom Validation Attribute:
class DynamicValidationAttribute : System.Management.Automation.ValidateArgumentsAttribute {
    [string]$ScriptBlock

    DynamicValidationAttribute([string]$scriptBlock) {
        $this.ScriptBlock = $scriptBlock
    }

    [System.Management.Automation.ValidateArgumentsAttribute]
    function Validate($arguments, $engineIntrinsics) {
        $scriptBlock = [ScriptBlock]::Create($this.ScriptBlock)
        $result = $scriptBlock.InvokeWithContext($null, @{ $_ = $arguments })

        if (-not $result) {
            $errorMessage = "The argument value '$arguments' is not valid."
            $errorRecord = New-Object System.Management.Automation.ErrorRecord(
                ([System.ArgumentException]::new($errorMessage)),
                "ArgumentValidationFailed",
                [System.Management.Automation.ErrorCategory]::InvalidArgument,
                $arguments
            )
            $errorRecord.TargetObject = $arguments
            throw $errorRecord
        }
    }
}
Define the Custom Validation Attribute  PowerShell dynamic parameter
  • Implement the Custom Validation Attribute:
function Get-EvenNumber {
    [CmdletBinding()]
    param (
        [DynamicValidationAttribute("$_.%2 -eq 0")]
        [int]$Number
    )

    process {
        $Number
    }
}
Implement the Custom Validation Attribute
  • Test the Custom Validation Attribute:
try {
    Get-EvenNumber -Number 4
    Get-EvenNumber -Number 7
}
catch {
    Write-Host "Error: $_"
}
Test the Custom Validation Attribute

In this example, the DynamicValidationAttribute class is defined, which extends the System.Management.Automation.ValidateArgumentsAttribute base class. It takes a script block as a parameter, which represents the dynamic validation logic. The Validate method is overridden to execute the script block and validate the argument.

The Get-EvenNumber function demonstrates the usage of the custom validation attribute. The Number parameter is decorated with the DynamicValidationAttribute, which checks if the number is even using the provided script block.

With the knowledge and skills gained from this guide, you can harness the full potential of dynamic parameters in PowerShell. Customize your command behavior, adapt to runtime conditions, and provide a more intuitive and interactive experience for PowerShell users. Empower your scripting and automation efforts with dynamic parameters and take your PowerShell commands to the next level.

Meet the Author

Abdul Rahim has been working in Information Technology for over two decades. Learn how Abdul got his start as a Tech Blogger , and why he decided to start this Software blog. If you want to send Abdul a quick message, then visit his contact page here.