Checking for bound parametersThe short, sweet version is to add this sort of test inside your function definition:
If the $PSBoundParameters object does not contain a key/value pair of the parameters you need to work with you know that the default parameter set is being used.if ($PSBoundParameters.ContainsKey(x))
{
write-host X Bound!
}
Another approach Chris Duck (@gpduck) clued me into via Twitter was the $PSCmdlet object. As I researched this one, I didnt see as much, however, Chris property, $PSCmdlet.ParameterSetName, gave me exactly what I needed to look at. Going back a little further, via search engines, I was able to find this post:
Test-PSCmdletfrom the Windows PowerShell team blog. So, instead of my previous syntax, I can use the .ParameterSetName and get information more directly. For example, this function shows the default ParameterSetName used when none is specified,
Interestingly, when I run this, I get no results. I expect to see something, in particular, the $PSCmdlets property, ParameterSetName. On a hunch I add [CmdletBinding()] and hit paydirt:function Demo-DefaultParameterSet{param($test)$PSCmdlet.ParameterSetName}Demo-DefaultParameterSet -test 1
NOTE: if no Parameter sets are specified, there is still one, the __AllParameterSets parameter set.function Demo-DefaultParameterSet{[CmdletBinding()]param($test)$PSCmdlet.ParameterSetName}Demo-DefaultParameterSet -test 1__AllParameterSets
To get a better idea of what these two objects are all about I decide to do a little digging. Time to break out some Get-Member:
When I run this I get the following:function Demo-DefaultParameterSet{[CmdletBinding()]param($test)$PSCmdlet| gm | ft -auto -wrap$PSBoundParameters| gm | ft -auto -wrap}Demo-DefaultParameterSet -test 1
TypeName: System.Management.Automation.PSCompiledScriptCmdletName MemberType Definition---- ----------
----------
CurrentProviderLocation Method System.Management.Automation.PathInfo CurrentProviderLocation(string providerId)
Dispose Method System.Void Dispose()
Equals Method bool Equals(System.Object obj)
GetDynamicParameters Method System.Object GetDynamicParameters()
GetHashCode Method int GetHashCode()
GetResolvedProviderPathFromPSPath Method System.Collections.ObjectModel.Collection[string]
GetResolvedProviderPathFromPSPath(string path,
System.Management.Automation.ProviderInfo&, System.Management.Automation,
Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 provider)
GetResourceString Method string GetResourceString(string baseName, string resourceId)
GetType Method type GetType()
GetUnresolvedProviderPathFromPSPath Method string GetUnresolvedProviderPathFromPSPath(string path)
GetVariableValue Method System.Object GetVariableValue(string name), System.Object GetVariableValue(string
name, System.Object defaultValue)
Invoke Method System.Collections.IEnumerable Invoke(), System.Collections.Generic.IEnumerable[T]
Invoke[T]()
PrepareForBinding Method System.Void PrepareForBinding(System.Management.Automation.SessionStateScope,
System.Management.Automation, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35 scope,
System.Management.Automation.CommandLineParameters, System.Management.Automation,
Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 commandLineParameters)
ShouldContinue Method bool ShouldContinue(string query, string caption), bool ShouldContinue(string query,
string caption, System.Boolean&, mscorlib, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089 yesToAll, System.Boolean&, mscorlib, Version=4.0.0.0,