AWS Developer Tools Blog
Listing Cmdlets by Service
In this post, we discussed a new cmdlet you can use to navigate your way around the cmdlets in the AWS Tools for Windows PowerShell module. This cmdlet enables you to search for cmdlets that implemented a service API by answering questions like, “Which cmdlet implements the HAQM EC2 ‘RunInstances’ API?” It can also do a simple translation of AWS CLI commands you might have found in example documentation to give you the equivalent cmdlet.
In the 3.1.21.0 version of the tools, we extended this cmdlet. Now you can use it to get a list of all cmdlets belonging to a service based on words that appear in the service name or the prefix code we use to namespace the cmdlets by service. You could, of course, do something similar by using the PowerShell Get-Command
cmdlet and supplying the -Noun
parameter with a value that is the prefix with a wildcard (for example, Get-Command -Module AWSPowerShell -Noun EC2*
). The problem here is that you need to know the prefix before you can run the command. Although we try to choose memorable and easily guessable prefixes, sometimes the association can be subtle and searching based on one or more words in the service name is more useful.
To list cmdlets by service you supply the -Service
parameter. The value for this parameter is always treated as a case-insensitive regular expression and is used to match against cmdlets using both their ‘namespace’ prefix and full name. For example:
PS C:> Get-AWSCmdletName -Service compute
CmdletName ServiceOperation ServiceName
---------- ---------------- -----------
Add-EC2ClassicLinkVpc AttachClassicLinkVpc HAQM Elastic Compute Cloud
Add-EC2InternetGateway AttachInternetGateway HAQM Elastic Compute Cloud
Add-EC2NetworkInterface AttachNetworkInterface HAQM Elastic Compute Cloud
Add-EC2Volume AttachVolume HAQM Elastic Compute Cloud
...
Stop-EC2SpotInstanceRequest CancelSpotInstanceRequests HAQM Elastic Compute Cloud
Unregister-EC2Address DisassociateAddress HAQM Elastic Compute Cloud
Unregister-EC2Image DeregisterImage HAQM Elastic Compute Cloud
Unregister-EC2PrivateIpAddress UnassignPrivateIpAddresses HAQM Elastic Compute Cloud
Unregister-EC2RouteTable DisassociateRouteTable HAQM Elastic Compute Cloud
When a match for the parameter value is found, the output contains a collection of PSObject
instances. Each instance has members detailing the cmdlet name, service operation, and service name. You can see the assigned prefix code in the cmdlet name. If the search term fails to match any supported service, you’ll see an error message in the output.
You might be asking yourself why we output the service name. We do this because the parameter value is treated as a regular expression and it attempts to match against two pieces of metadata in the module’s cmdlets (service and prefix). It is therefore possible that a term can match more than one service. For example:
PS C:> Get-AWSCmdletName -Service EC2
CmdletName ServiceOperation ServiceName
---------- ---------------- -----------
Add-EC2ClassicLinkVpc AttachClassicLinkVpc HAQM Elastic Compute Cloud
Add-EC2InternetGateway AttachInternetGateway HAQM Elastic Compute Cloud
...
Unregister-EC2RouteTable DisassociateRouteTable HAQM Elastic Compute Cloud
Get-ECSClusterDetail DescribeClusters HAQM EC2 Container Service
Get-ECSClusters ListClusters HAQM EC2 Container Service
Get-ECSClusterService ListServices HAQM EC2 Container Service
...
Unregister-ECSTaskDefinition DeregisterTaskDefinition HAQM EC2 Container Service
Update-ECSContainerAgent UpdateContainerAgent HAQM EC2 Container Service
Update-ECSService UpdateService HAQM EC2 Container Service
You’ll see the result set contains cmdlets for both HAQM EC2 and HAQM EC2 Container Service. This is because the search term ‘EC2’ matched the noun prefix for the cmdlets exposing the HAQM EC2 service API as well as the service name for the container service.
We hope you find this new capability useful. You can get the new version as a Windows Installer package here or through the PowerShell Gallery.
If you have suggestions for other features, let us know in the comments!