#PSCXTip Getting details about a command’s parameters
The parameters for a PowerShell command can be quite complex. Some parameters are only valid in certain parameter sets. Parameters have types, may be mandatory or optional, can have aliases and may or may not support pipeline input. The standard PowerShell mechanism to inspect a command’s parameters is to look at the command’s help page. This can be informative. See the output for a few of the parameters to Get-Process:
-Id <Int32[]>
Specifies one or more processes by process ID (PID). To specify multiple IDs,
use commas to separate the IDs.
To find the PID of a process, type "get-process".
Required? True
Position? Named
Default value
Accept pipeline input? true (ByPropertyName)
Accept wildcard characters? False
-Name <String[]>
Specifies one or more processes by process name. You can type multiple process
names (separated by commas) and use wildcard characters. The parameter name
("Name") is optional.
Required? False
Position? 1
Default value
Accept pipeline input? true (ByPropertyName)
Accept wildcard characters? true
What the help file doesn’t show is that these two parameters are in different parameter sets and can’t be used in the same command invocation. Also, the help isn’t always in lock-step with the actual parameters based on the way the help files are created.
The ultimate source of parameter information is in the CmdletInfo object for the command. We can see some of this information using PowerShell’s Get-Command cmdlet:
PS> Get-Command Get-Process -Syntax
Get-Process [[-Name] <string[]>] [-ComputerName <string[]>] [-Module]
[-FileVersionInfo] [<CommonParameters>]
Get-Process -Id <int[]> [-ComputerName <string[]>] [-Module] [-FileVersionInfo]
[<CommonParameters>]
Get-Process -InputObject <Process[]> [-ComputerName <string[]>] [-Module]
[-FileVersionInfo] [<CommonParameters>]
This at least shows us that there are different parameter sets and that the Id and Name parameters are in different parameter sets. We even get type information for the parameters. However there is no information about accepting pipeline input nor is there any information on parameter aliases.
There is a command in the PowerShell Community Extensions (2.1 and 3.0) that displays rich parameter information in an easy to read format:
PS> Get-Parameter Get-Process
Command: Microsoft.PowerShell.Management/Get-Process
Set: Name
Name Aliases Position Mandatory Pipeline ByName Provider Type
---- ------- -------- --------- -------- ------ -------- ----
ComputerName {Cn, co, ... Named False False True All String[]
FileVersionInfo {FV, FVI,... Named False False False All SwitchPara...
Module {m, mo, m... Named False False False All SwitchPara...
Name {ProcessN... 0 False False True All String[]
Command: Microsoft.PowerShell.Management/Get-Process
Set: Id
Name Aliases Position Mandatory Pipeline ByName Provider Type
---- ------- -------- --------- -------- ------ -------- ----
ComputerName {Cn, co, ... Named False False True All String[]
FileVersionInfo {FV, FVI,... Named False False False All SwitchPara...
Id {PID, id} Named True False True All Int32[]
Module {m, mo, m... Named False False False All SwitchPara...
Command: Microsoft.PowerShell.Management/Get-Process
Set: InputObject
Name Aliases Position Mandatory Pipeline ByName Provider Type
---- ------- -------- --------- -------- ------ -------- ----
ComputerName {Cn, co, ... Named False False True All String[]
FileVersionInfo {FV, FVI,... Named False False False All SwitchPara...
InputObject {in, inp,... Named True True False All Process[]
Module {m, mo, m... Named False False False All SwitchPara...
As you can see, there’s much more usable information available from the Get-Parameter command.
Note: There are many more useful PowerShell Community Extensions (PSCX) commands. If you are interested in this great community project led by PowerShell MVPs Keith Hill and Oisin Grehan, give PSCX a try at http://pscx.codeplex.com.
Share on: