Executive Summary:
Windows PowerShell cmdlets often include strings. The rules that govern how to use quotes in PowerShell strings are referred to as quoting rules. In this lesson, you’ll learn about these rules. You also learn how to obtain and use the methods and properties of PowerShell's System.String object.
|
Most PowerShell statements include string values.
Usually, these strings are passed to cmdlets
as arguments. In some cases, the strings
are enclosed in single quotes. In other cases,
they’re enclosed in double quotes. And sometimes
they’re not enclosed in quotes at all. It’s
important to understand how to properly handle strings. The rules
that govern how to do so are often referred to as quoting rules. In
this lesson, you’ll learn about these rules. Specifically, you’ll learn
when to enclose string values in quotes and whether to use single
or double quotes. In addition, you’ll learn how to flag, or escape,
special characters.
Working with String
Values
Whenever you enclose text in quotes,
PowerShell treats that text as a string
value. So, as long as the text doesn’t contain
any special characters (you’ll learn
more about these characters shortly)
or reference variables (I’ll discuss how
to reference variables in strings in the
next lesson), you can enclose the text
in either single or double quotes. For
example, the following statements
achieve the same results:
Write-Output “String in quotes.”
Write-Output ‘String in quotes.’
In these examples, the Write-Output cmdlet sends a string object
down the pipeline or, in this case, directly to the PowerShell console.
As you can see in Figure 1, the outputted value is the same for both
statements.
In addition to the Write-Output cmdlet, PowerShell’s Out-Host
and Write-Host cmdlets output information to the console. Their differences
lie in the details. For example, the Write-Output cmdlet sends
output down the pipeline to the next cmdlet. When Write-Output is
the last cmdlet in the pipeline, the output is displayed in the console.
The Out-Host cmdlet sends output directly to the
console and offers an optional parameter that lets
you view the output one screen at a time, which
can be helpful if there is a lot of output. This is
the default output cmdlet, so if you don’t specify
an output cmdlet, Out-Host cmdlet is used. The
Write-Host cmdlet also sends output directly
to the console. However, Write-Host has two
optional parameters that let you change the color
of the text or text background, thereby creating a
customized console.
For basic quoted string values that you want
to output directly to the console window, all three
cmdlets behave in similar ways. For example, the following four commands all display the
string in the console window in the same way
as in Figure 1:
“String in quotes.”
Write-Output “String in quotes.”
Write-Host “String in quotes.”
Out-Host `
-InputObject “String in quotes.”
Notice that no cmdlet is specified in the first
command. As a result, the Out-Host cmdlet
is used.
For many of the examples in this lesson, I
use the Write-Output cmdlet because it outputs
an object in a way similar to many other
cmdlets. This lets me demonstrate different
principles about quoted values. Keep in
mind, however, that the Write-Output, Out-
Host, and Write-Host cmdlets can behave
differently in different circumstances. For
more information about these cmdlets, see
their Help files.
If you want to include quotes within
a string, you can use single quotes within
double quotes or double quotes within single
quotes:
Write-Output “String ‘in’ quotes.”
Write-Output ‘String “in” quotes.’
If you refer again to Figure 1, you’ll see that
inside quotes in both cases are carried to the
output. This isn’t the case when you use the
same type of quotes throughout the string:
Write-Output “String “in” quotes.”
Write-Output ‘String ‘in’ quotes.’
As Figure 1 shows, the results are quite different.
In both cases, the quotes are not
displayed and a new line is added. This is because PowerShell
interprets the one
string as multiple
strings and consequently
adds a line
break. For example,
PowerShell interprets
String as the
first string (so it adds
a line break after
that string), then
interprets the rest
as a different string.
You can use double
quotes within double
quotes, but you must
escape the inside
quotes, which I’ll describe how to do later.
Whenever you work with quotes, be
careful not to mix up the type of quotes or
forget to include one. Otherwise, you might
get stuck in a loop that continues to prompt
you for an entry—but nothing you enter gets
you out of the loop. If you run into that situation,
press Ctrl+C to return to the command
prompt.
Another issue to take into account when
defining cmdlet arguments is how Power-
Shell treats numerical values. As I said earlier,
PowerShell treats any values within quotes as
strings, even if the value consists of all numbers:
Write-Output “123”
When you execute this statement (shown
in Figure 2), the value returned is a string object, as Figure 2 shows. You can verify the
value’s type by running the statement:
(Write-Output “123”).GetType()
Continue on Page 2
petmwintel May 27, 2008 (Article Rating: