Capitalization rules for identifiers were created to help make types, members, and parameters easier to read. There are several types of casing used, depending on the identifier: camelCasing, PascalCasing, lowercase, and UPPERCASE.

Writing good code isn’t just about how it performs or its usability. Writing code that is clean and well presented is just as important. I will be looking at how to format and case your code for better readability in .NET.

PascalCasing capitalizes the first character of each word, while camelCasing sets the first letter of the first word in lowercase with each word thereafter starting with a capital letter. Here is an example of both PascalCasing and camelCasing:

Class Foo {}


Notice, in the examples above, that the keyword for the Class name – Foo – starts with a capital, but the first two letters of the variable name are lowercase, with an uppercase letter for the next word.

Since we are talking about .NET, there is a guide, called the .NET Framework Design Guidelines, which recommends that all identifiers, except parameter names, use PascalCasing. It also has a table which describes the capitalization rules for different types of identifier. Here is a link to the online resource.

We now change our attention slightly to see how these guidelines look in PowerShell. PowerShell, as a language, is not case sensitive, but that doesn’t mean we shouldn’t capitalize our code. Being built on .NET, PowerShell follows the same format. Public identifiers in PowerShell, such as module names, functions, cmdlets, classes, enums, attribute names, and properties, conform to PascalCasing:

Get-Module | select Name -First 2
Module casing in PowerShell

Module casing in PowerShell


Get-Command -Module Microsoft.PowerShell.Utility | Get-Random -Count 5 | select Name
Example casing for cmdlets in PowerShell

Example casing for cmdlets in PowerShell


Get-Help -Name Get-Command -Parameter * | Select Name -First 5
Parameter casing in PowerShell

Parameter casing in PowerShell

For two-letter acronyms, PowerShell makes an exception in which both letters are capitalized, such as the automatic variable $PSCmdlet, or cmdlets like New-PSSession and Set-PSBreakpoint.

The language keywords in PowerShell are written in lowercase; for example, foreach, param(), begin, process, and end.

This pattern continues with operators (-eq, -match, -like).

When it comes to naming your variables and modules, camelCase is often applied, but this isn’t a hard-and-fast rule. You could continue with PascalCasing or even use lowercase.

UPPERCASE is generally reserved for keywords in comment-based help, to make them easier to find when looking at code:

Subscribe to 4sysops newsletter!

        Move AD Object
        Check and move Computer if not in correct OU container

These are just a few tips for using different types of casing in your code. Formatting your code by indenting and using these examples of casing will produce beautiful, clean, readable code which will not only benefit others, but yourself as well.

  1. Ray (Rank: 2)
    4 years ago

    While I capitalize my PowerShell code out of habit from coding in Pascal, Basic and C++, I don’t really feel the need to do it for clean code or for anyone else reading my code. As long as the code is formatted properly, a capital Get-Service or a get-service shouldn’t matter to anyone reading the code.

    If I’m writing something down and dirty in a one liner or a same script to get something done I’m not going to worry about capitalization. It’s about getting the work done.

  2. This is more likely to be relevant for anyone writing modules and is not a die-hard rule of thumb. Although to be honest, if you always follow the formatting rules, it becomes habitual. Most people seem to have a tendency to continue to use Aliases (even in modules) which does make it more difficult to follow when reading to find out exactly what it will do…..I hope most people are doing this rather than running “any old code” downloaded from the internet.

Leave a reply to Ray (Rank: 2)
Click here to cancel the reply

Please enclose code in pre tags

Your email address will not be published.


© 4sysops 2006 - 2022


Please ask IT administration questions in the forums. Any other messages are welcome.


Log in with your credentials


Forgot your details?

Create Account