Skip to content
Menu
The Lonely Administrator
  • PowerShell Tips & Tricks
  • Books & Training
  • Essential PowerShell Learning Resources
  • Privacy Policy
  • About Me
The Lonely Administrator

An Improved Get-Verb Command

Posted on August 10, 2015

A recommended best practice for PowerShell scripting, especially when developing functions, is to follow the standard Verb-Noun naming convention. The VerbĀ  should be a value from the list of approved .NET verbs. The easy way to see that list is with the Get-Verb cmdlet. The result will also indicate the verb group or category like Security or Lifecycle. If you wanted to filter for a particular group you needed to use a Where-Object expression. It really isn't that difficult but I decided to make a my own version of Get-Verb that would let you specify one or more groups.

Manage and Report Active Directory, Exchange and Microsoft 365 with
ManageEngine ADManager Plus - Download Free Trial

Exclusive offer on ADManager Plus for US and UK regions. Claim now!
#requires -version 4.0

<#
This is a copy of:

CommandType Name     ModuleName
----------- ----     ----------
Function    Get-Verb

Created: 8/10/2015
Author : Jeff Hicks @JeffHicks

  ****************************************************************
  * DO NOT USE IN A PRODUCTION ENVIRONMENT UNTIL YOU HAVE TESTED *
  * THOROUGHLY IN A LAB ENVIRONMENT. USE AT YOUR OWN RISK.  IF   *
  * YOU DO NOT UNDERSTAND WHAT THIS SCRIPT DOES OR HOW IT WORKS, *
  * DO NOT USE IT OUTSIDE OF A SECURE, TEST SETTING.             *
  ****************************************************************
#>


Function Get-MyVerb {
<#

.SYNOPSIS
Gets approved Windows PowerShell verbs.


.DESCRIPTION
The Get-MyVerb function gets verbs that are approved for use in Windows PowerShell commands.  

Windows PowerShell recommends that cmdlet and function names have the Verb-Noun format and include an approved verb. This practice makes command names more consistent and predictable, and easier to use, especially for users who do not speak English as a first language.  

Commands that use unapproved verbs run in Windows PowerShell. However, when you import a module that includes a command with an unapproved verb in its name, the Import-Module command displays a warning message.

This command is a variation on Get-Verb that allows you to limit verbs to a category.

NOTE:   The verb list that Get-MyVerb returns might not be complete. For an updated list of approved Windows PowerShell verbs with descriptions, see "Cmdlet Verbs" in MSDN at http://go.microsoft.com/fwlink/?LinkID=160773.

.PARAMETER GROUP
Each Windows PowerShell verb is assigned to one of the following groups. 
-- Common: Define generic actions that can apply to almost any cmdlet, such as Add.
-- Communications:  Define actions that apply to communications, such as Connect.
-- Data:  Define actions that apply to data handling, such as Backup.
-- Diagnostic: Define actions that apply to diagnostics, such as Debug.
-- Lifecycle: Define actions that apply to the lifecycle of a cmdlet, such as Complete.
-- Security: Define actions that apply to security, such as Revoke.
-- Other: Define other types of actions.

The default is everything.


.EXAMPLE

PS C:\> Get-MyVerb
Description
-----------
This command gets all approved verbs.

.EXAMPLE

PS C:\> Get-MyVerb un*

Verb                 Group
----                 -----
Undo                 Common
Unlock               Common
Unpublish            Data
Uninstall            Lifecycle
Unregister           Lifecycle
Unblock              Security
Unprotect            Security
Description
-----------
This command gets all approved verbs that begin with "un".

.EXAMPLE

PS C:\> Get-MyVerb -Group "Security"

Verb                 Group
----                 -----
Block                Security
Grant                Security
Protect              Security
Revoke               Security
Unblock              Security
Unprotect            Security

This command gets all approved verbs in the Security group.

.EXAMPLE

PS C:\> get-command -module MyModule | where { (Get-MyVerb $_.Verb) -eq $null }

This command finds all commands in a module that have unapproved verbs.

.EXAMPLE

PS C:\> $approvedVerbs = Get-MyVerb | foreach {$_.verb}

PS C:\> $myVerbs = get-command -module MyModule | foreach {$_.verb}

PS C:\> ($myVerbs | foreach {$approvedVerbs -contains $_}) -contains $false
True

Does MyModule export functions with unapproved verbs?

PS C:\>  ($myverbs | where {$approvedVerbs -notcontains $_})
ForEach
Sort
Tee
Where

These commands detect unapproved verbs in a module and tell which unapproved verbs were detected in the module.

.NOTES

Get-MyVerb returns a modified version of a Microsoft.PowerShell.Commands.MemberDefinition object. The object does not have the standard properties of a MemberDefinition object. Instead it has Verb and Group properties. The Verb property contains a string with the verb name. The Group property contains a string with the verb group.

Windows PowerShell verbs are assigned to a group based on their most common use. The groups are designed to make the verbs easy to find and compare, not to restrict their use. You can use any approved verb for any type of command.

Some of the cmdlets that are installed with Windows PowerShell, such as Tee-Object and Where-Object, use unapproved verbs. These cmdlets are considered to be historic exceptions and their verbs are classified as "reserved."

Learn more about PowerShell:
Essential PowerShell Learning Resources
.INPUTS String .OUTPUTS Selected.Microsoft.PowerShell.Commands.MemberDefinition .LINK Get-Verb Import-Module .LINK https://msdn.microsoft.com/en-us/library/ms714428%28VS.85%29.aspx #> [CmdletBinding()] Param( [Parameter(Position=0, ValueFromPipeline=$true)] [string[]]$Verb, [ValidateSet("Common","Communications","Data","Diagnostic","LifeCycle","Security","Other")] [string[]]$Group ) Begin { Write-Verbose "Starting $($MyInvocation.Mycommand)" Write-Verbose "Using parameter set $($PSCmdlet.ParameterSetName)" } #begin Process { #remove Group from PSBoundParameters because Get-Verb won't recognize it. if ($Group) { $PSBoundParameters.Remove("Group") | Out-Null Write-Verbose "Filtering by group: $($group -join '|')" } Write-Verbose "PSBoundParameters: $($PSBoundParameters | out-string)" Get-Verb @PSBoundParameters | where {$_.group -match ($Group -join "|")} } #process End { Write-Verbose "Ending $($MyInvocation.Mycommand)" } #end } #end function Get-MyVerb

The function is essentially a wrapper for Get-Verb. It uses the same parameters plus my addition. The help is also from Get-Verb, although I modified it slightly to reflect my version of the command. You can use Get-MyVerb as you would Get-Verb or you can specify one or more groups.

get-myverb

The last improvement, is that if you run help for Get-MyVerb with -Online you'll get the MSDN documentation about .NET verbs which goes into detail. I think you will find it helpful.

Enjoy and as always, comments or questions are welcome.


Behind the PowerShell Pipeline

Share this:

  • Click to share on X (Opens in new window) X
  • Click to share on Facebook (Opens in new window) Facebook
  • Click to share on Mastodon (Opens in new window) Mastodon
  • Click to share on LinkedIn (Opens in new window) LinkedIn
  • Click to share on Pocket (Opens in new window) Pocket
  • Click to share on Reddit (Opens in new window) Reddit
  • Click to print (Opens in new window) Print
  • Click to email a link to a friend (Opens in new window) Email

Like this:

Like Loading...

Related

1 thought on “An Improved Get-Verb Command”

  1. Mike Shepard says:
    August 10, 2015 at 11:17 am

    I like using the link this way. Great job Jeff!

Comments are closed.

reports

Powered by Buttondown.

Join me on Mastodon

The PowerShell Practice Primer
Learn PowerShell in a Month of Lunches Fourth edition


Get More PowerShell Books

Other Online Content

github



PluralSightAuthor

Active Directory ADSI Automation Backup Books CIM CLI conferences console Friday Fun FridayFun Function functions Get-WMIObject GitHub hashtable HTML Hyper-V Iron Scripter ISE Measure-Object module modules MrRoboto new-object objects Out-Gridview Pipeline PowerShell PowerShell ISE Profile prompt Registry Regular Expressions remoting SAPIEN ScriptBlock Scripting Techmentor Training VBScript WMI WPF Write-Host xml

©2025 The Lonely Administrator | Powered by SuperbThemes!
%d