Convert a String to Upper/Lowercase

1. Problem

You want to convert a string to uppercase or lowercase.

2. Solution

Use the ToUpper() and ToLower() methods of the string to convert it to uppercase and lowercase, respectively.

To convert a string to uppercase, use the ToUpper() method:

        PS >"Hello World".ToUpper()
        HELLO WORLD

To convert a string to lowercase, use the ToLower() method:

        PS >"Hello World".ToLower()
        hello world



3. Discussion

Since PowerShell strings are fully featured .NET objects, they support many string-oriented operations directly. The ToUpper() and ToLower() methods are two examples of the many features that the String class supports. To learn what other functionality the String class supports, see Section 3.9, “Learn About Types and Objects.”

Neither PowerShell nor the methods of the .NET String class directly support capitalizing only the first letter of a word. If you want to capitalize only the first character of a word or sentence, try the following commands:

        PS >$text = "hello"
        PS >$newText = $text.Substring(0,1).ToUpper() +
        >>    $text.Substring(1)
        >> $newText
        >>
        Hello

One thing to keep in mind as you convert a string to uppercase or lowercase is your motivation for doing it. One of the most common reasons is for comparing strings, as shown in Example 5-4.

Example 5-4. Using the ToUpper() method to normalize strings
## $text comes from the user, and contains the value "quit"
if($text.ToUpper() -eq "QUIT") { ... }

Unfortunately, explicitly changing the capitalization of strings fails in subtle ways when your script runs in different cultures. Many cultures follow different capitalization and comparison rules than you may be used to. For example, the Turkish language includes two types of the letter “I”: one with a dot, and one without. The uppercase version of the lowercase letter “i” corresponds to the version of the capital I with a dot, not the capital I used in QUIT. Those capitalization rules cause the string comparison code in Example 5-4 to fail in the Turkish culture.

To compare some input against a hard-coded string in a case-insensitive manner, the better solution is to use PowerShell’s–eq operator without changing any of the casing yourself. The–eq operator is case-insensitive and culture-neutral by default:

        PS >$text1 = "Hello"
        PS >$text2 = "HELLO"
        PS >$text1 -eq $text2
        True
Tags: , , , , , , , , , , , ,