PowerShell Get-Command: Find Cmdlets and Functions

PowerShell Get-Command: Find Cmdlets and Functions

PowerShell Tips Editor 3 min read
PowerShell Get-Command: Find Cmdlets and Functions

You don’t need to memorize the entire PowerShell command catalog — you just need to know how to find what you’re looking for. PowerShell Get-Command is the discovery tool that tells you every cmdlet, function, alias, and external command available in your current session. Whether you know the verb, the noun, or just a fragment of the name, Get-Command surfaces it instantly. This post covers every useful search pattern with examples.

List All Cmdlets

Running Get-Command without parameters returns everything available — cmdlets, functions, aliases, external commands, and scripts. The output can be large, so filter immediately.

# Count total available commands
(Get-Command).Count

# List cmdlets only (not aliases or external commands)
Get-Command -CommandType Cmdlet | Select-Object Name, ModuleName | Sort-Object Name
Name                    ModuleName
----                    ----------
Add-AppxPackage         Appx
Add-Content             Microsoft.PowerShell.Management
Add-History             Microsoft.PowerShell.Core
...
# Search by partial name with wildcards
Get-Command *network*

Search by Verb with -Verb

PowerShell uses a strict verb-noun naming convention. If you know the action you want to perform, filter by verb to see all related cmdlets. Approved PowerShell verbs include Get, Set, New, Remove, Start, Stop, Enable, Disable, and dozens more.

# All cmdlets that start with "Get"
Get-Command -Verb Get | Select-Object -First 20 | Format-Table Name, ModuleName

# All cmdlets that stop or start things
Get-Command -Verb Start, Stop | Sort-Object Noun | Format-Table Verb, Noun, Name

Search by Noun with -Noun

When you know the resource you want to work with — a file, a service, a process — search by noun. This quickly shows you all operations available for that resource.

# Everything related to "Service"
Get-Command -Noun Service
CommandType  Name               Version  Source
-----------  ----               -------  ------
Cmdlet       Get-Service        7.0.0.0  Microsoft.PowerShell.Management
Cmdlet       New-Service        7.0.0.0  Microsoft.PowerShell.Management
Cmdlet       Remove-Service     7.0.0.0  Microsoft.PowerShell.Management
Cmdlet       Restart-Service    7.0.0.0  Microsoft.PowerShell.Management
Cmdlet       Resume-Service     7.0.0.0  Microsoft.PowerShell.Management
Cmdlet       Set-Service        7.0.0.0  Microsoft.PowerShell.Management
Cmdlet       Start-Service      7.0.0.0  Microsoft.PowerShell.Management
Cmdlet       Stop-Service       7.0.0.0  Microsoft.PowerShell.Management
Cmdlet       Suspend-Service    7.0.0.0  Microsoft.PowerShell.Management
# Everything related to files
Get-Command -Noun Item | Sort-Object Name

Find Commands from a Module

After importing a module, check what it provides with -Module. This is also useful for discovering what’s available in a module before deciding to import it.

# Commands from a specific module
Get-Command -Module ActiveDirectory | Select-Object Name | Sort-Object Name

# Commands from all networking modules
Get-Command -Module NetTCPIP, NetSecurity, DnsClient

Check If a Command Exists

Before using a cmdlet in a script, verify it exists on the target system. This is essential for cross-version compatibility — some cmdlets only exist in Windows PowerShell, others only in PowerShell 7.

# Returns command object if found, $null if not
$cmd = Get-Command -Name "Invoke-WebRequest" -ErrorAction SilentlyContinue

if ($cmd) {
    Write-Output "Found: $($cmd.Name) in module: $($cmd.ModuleName)"
} else {
    Write-Output "Command not available on this system."
}

# Quick existence check
if (Get-Command -Name "Get-CimInstance" -ErrorAction SilentlyContinue) {
    # Use Get-CimInstance
} else {
    Write-Warning "Get-CimInstance not available — are you on PowerShell 3+?"
}

Get Command Syntax with -Syntax

The -Syntax switch returns the parameter syntax for a command without full help text — perfect for a quick reminder of parameter names and positions without running Get-Help.

Get-Command -Name Copy-Item -Syntax
Copy-Item [-Path] <string[]> [[-Destination] <string>] [-Container] [-Force] [-Filter <string>]
    [-Include <string[]>] [-Exclude <string[]>] [-Recurse] [-PassThru] [-Credential <pscredential>]
    [-WhatIf] [-Confirm] [-FromSession <PSSession>] [-ToSession <PSSession>] [<CommonParameters>]
# Get syntax for multiple commands
Get-Command -Name Get-Item, Set-Item, Remove-Item -Syntax

Common Errors and Fixes

  • Too many results — narrow with -Verb or -Noun: Running Get-Command without parameters returns thousands of entries. Always combine with -Verb, -Noun, -Module, or a wildcard name pattern to get a manageable result. For example, Get-Command *log* finds anything with “log” in the name.
  • Functions vs cmdlets appear differently in output: The CommandType column distinguishes Cmdlet (compiled .NET), Function (PowerShell code), Alias, ExternalScript, and Application (executables). Functions and cmdlets behave similarly but functions show no module name if they’re defined in the current session. Use -CommandType Cmdlet or -CommandType Function to limit results to one type.

Related Cmdlets / See Also

Wrapping Up

Get-Command is your discovery tool — use it to explore before you ask a search engine. The combination of -Verb and -Noun searches gives you the complete action vocabulary for any resource. As a next step, run Get-Command -Noun Process to explore all process management cmdlets and then use Get-Help on the ones that look useful to dive deeper.

Send-Item -To