欢迎光临 Enjoy IT (ITECN.NET) 登录 | 注册 | 帮助

Windows PowerShell每周提示(2):引用变量及变量值

当你编写脚本,尤其是系统管理脚本时,你很少提前知道你所有需要用到的值;取而代之的是,你通常需要提取信息,在一两个变量中保存信息,然后显示这些变量的值。例如,有可能有一个简单的用来从AD中提取数据的VBS脚本:

 

strFirstName = objUser.givenName

strLastName = objUser.sn

strTitle = objUser.title

strDepartment = objUser.department

当你获得该数据时,你会乐意回显像这样的漂亮短句:

"Ken Myer is an Accountant in Financial Services."

没什么大不了的,对么?好的,也许是这样。另一方面,毫不夸张的说,组合文字及变量值在VBS里显得有点错综复杂。例如,为了显示以上信息,你将不得不写一行类似这样的代码:

Wscript.Echo strFirstName & " " & strLastName & " is an " & strTitle & " in " & strDepartment & "."

这不是不行,但是它将变得很麻烦,也很容易遗漏空格。反过来说,这些简单错误将会导致有点不专业的输出,类似这个:

"Ken Myer is anAccountant inFinancial Services."

但是你打算如何处理这个问题呢?毕竟,你不能直接将变量嵌入字符串中。无论喜欢与否,这些“&”以及双引号标记对生活来说是不幸的事实。

不过,如果你使用Windows PowerShell,这问题将变得很容易处理。

Windows PowerShell中显示变量值

Windows PowerShell 中你实际上能够将变量嵌入到字符串中,PowerShell将会显示变量的值。这意味什么?那么,考虑下这个简单小巧的PowerShell脚本,某人将四个不同变量赋予不同的值,然后使用Write-Host cmdlet来回显包含每一个变量的字符串:

$FirstName = "Ken"

$LastName = "Myer"

$Title = "Accountant"

$Department = "Financial Services"

Write-Host "$FirstName $LastName is an $Title in $Department."

现在,你期待实际上会在屏幕上显示什么?无论相信与否,这就是在屏幕上显示的:

Ken Myer is an Accountant in Financial Services.

没有“&”,没有双引号,不需要担心是否要添加空格:只需要把变量包含在字符串中,PowerShell就会回显变量的值。

这是如此的简单并且显而易见这是具有革命性的。

诚然,也有可能出现当你不想要变量的值出现在屏幕的上情况:

$FirstName $LastName is an $Title in $Department.

看上去有点古怪,但是你想要在屏幕上回显什么与我们无关。如果PowerShell自动用变量值替换变量,那么你打算如何处理这个问题呢?

那也很简单;你只需用单引号将字串符引起来:

Write-Host '$FirstName $LastName is an $Title in $Department.'

单引号将使字面上的值(变量名)能够被回显;双引号能使变量的实际值被回显。

这里还有另外一个例子。就如你所知,PowerShell包含了一定数量的能返回关于PowerShellPowerShell环境的信息的“自动”变量;例如,$pshome变量返回Windows PowerShell被安装到的文件夹。

假设我们有这样一行代码(这是很奇怪的一行代码,但是我们很宽容):

Write-Host "$pshome"

这将会返回$pshome的值;也就是说,安装PowerShell被安装到的文件夹:

C:\WINDOWS\system32\WindowsPowerShell\v1.0

现在假设我们有这行代码:

Write-Host '$pshome'

感谢单引号吧,它能返回下面的字串符值:

$pshome

毋庸讳言,这很棒。但是假设我们要回显以下的内容:

The value of the $pshome variable is C:\WINDOWS\system32\WindowsPowerShell\v1.0.

我们究竟如何实现这样的回显呢?我们怎么样既返回变量的字面上的及实际值呢,并且在同一句子中?

以下就是如何实现的方法:

Write-Host "The value of the `$pshome variable is $pshome."

看我们在这里干了什么?我们将整句句子用双引号引起来;因此你会期待PowerShell回显每一个$pshome的值。但是注意我们在第一个$pshome前放置的有趣的小符号(重音符,Tab键上面的那个符号,不是单引号):

`$pshome

这就是秘密之所在:在变量前放置重音符那么PowerShell将会回显变量名($pshome)而不是变量值。这对在双引号中引起来的整个字符串也有效-就像我们在这里做的。

换而言之,在PowerShell中组合变量及其它文字是容易的:只需把变量和字符串放置在一起,然后PowerShell就会默认回显这些变量的值。那么我们就要和“&”,双引号,以及类似这样古怪的结构说再见了:

Wscript.Echo strLastName & ", " &  strFirstName & " " & strInitials & "."

英文原文

http://www.microsoft.com/technet/scriptcenter/resources/pstips/jun07/pstip0615.mspx

已发表 2007年9月21日 18:09 作者 ghjconan

评论

# re: Windows PowerShell每周提示(2):引用变量及变量值

2007年9月22日 0:50 by anders

不错。。。引号的神奇@_@

文中说的重音符。

各大系统Shell常用的说法也叫倒引号,即转义字符(`)

# re: Windows PowerShell每周提示(2):引用变量及变量值

2007年9月23日 21:50 by aloki

PowerShell这个语法跟PHP的很像,除了那个重音符。

禁止匿名发表评论