$PSBoundParameters

The automatic variable $PSBoundParameters is a hashtable containing the parameters passed to a script or a function.
It only includes the values of parameters that were explicitly supplied by the caller, so it does not include any which have been left at the default value.

$PSBoundParameters can be used to call a subordinate function or cmdlet passing the same parameters - PowerShell will automatically splat the hash table's values instead of having to type each of the parameters:
get-otherthing @PSBoundParameters

Within the script/function the parameters would be defined using a param() statement.

Function DemoFunc1 {
   param(
      [string]$demoText,
      [int]$demoNumber
   )

   # Display all the passed parameters:
   $PSBoundParameters

   # or with a switch statement:
   switch ($PSBoundParameters.Keys) {
            'demoText' { write-output ' A value for demoText was supplied' }
            'demoNumber' { write-output ' A value for demoNumber was supplied'  }
       }

   # or looping through all the key/value pairs
   foreach($boundparam in $PSBoundParameters.GetEnumerator()) {
       "Key={0} Value={1}" -f $boundparam.Key,$boundparam.Value
   }

   # or Call a second function passing all the parameters plus any extra if needed:
   DemoFunc2 @PSBoundParameters -ExtraDemoParam 'Testing 123'
}

Function DemoFunc2 {
   param(
      [string]$demoText,
      [int]$demoNumber,
      [string]$ExtraDemoParam
   )
   Write-Output "$demoText $demoNumber $ExtraDemoParam"
}

You can also check for the existence of a specific key with $PSBoundParameters.ContainsKey('demoText') or $PSBoundParameters['demoText']

   If ($PSBoundParameters.ContainsKey('demoText')) {
      Write-Output -InputObject "Text has been included as: '$demoText'"
   }

Adding and Removing key/value pairs

$PSBoundParameters can be manipulated like any other hash table, so it is possible to .add or .remove key/value pairs.

$PSBoundParameters.Add('Key','Value')
$PSBoundParameters.Remove('Key')

So to add 'myDescription' and remove 'demoNumber':
$PSBoundParameters.Add('myDescription','Hello world')
$PSBoundParameters.Remove('demoNumber')

“A major advantage of age is learning to accept people without passing judgment” ~ Liz Carpenter

Related PowerShell Cmdlets:

Get-ParameterValues.ps1 - Script to return both Bound Parameters and Default values.
Test-Params.ps1 - function with example that returns both Bound Parameters and Default values.


 
Copyright © SS64.com 1999-2020
Some rights reserved