如下翻译来自微软
TechNet
脚本中心
: http://www.microsoft.com/technet/scriptcenter/resources/pstips/jun07/pstip0615.mspx
译者: Edengundam(马涛)
Referencing Variables and Variable Values
当你编写脚本时
,
特别是系统管理脚本
,
你基本上不可能提早的将你是用的值硬编码进去
;
取而代之的是
,
你通常将取得的信息存储在一个或多个变量中
,
然后显示这些变量的值
.
例如
,
你可能有一个简单的
VBScript
脚本
,
向下面示例代码一样从活动目录中获取数据
:
strFirstName = objUser.givenName
strLastName = objUser.sn
strTitle = objUser.title
strDepartment = objUser.department
一旦你获得了这些数据
,
你倾向于回显一个更加漂亮的句子
,
例如
:
"Ken Myer is an Accountant in Financial Services."
这太简单了
,
是不是
?
恩
,
也许吧
.
然而
,
在
VBScript
中组合文本和变量值至少是需要一些技巧的
.
例如
,
要显示上面的信息
,
你需要照着这样来编写代码
:
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
将会回显变量的值
.
这是多么的简单与清晰
,
真是革命性的进步
. (
译注
:
汗
,
这个老外好幽默
,
这个技术在古老的
Unix sh
中就支持了
...)
现在
,
必须要承认的是
,
总会有某些时候你不希望变量的值被显示在屏幕上
.
例如
,
假设你希望显示在屏幕的是这个
:
$FirstName $LastName is an $Title in $Department.
很奇怪吧
,
但是你想输出到屏幕的信息与我们可是什么关系都没有的
.
如果
PowerShell
自动的将变量替换为值
,
你该如何去完成它呢
?
其实非常简单
;
你只需要将字符串用单引号括起来
:
Write-Host '$FirstName $LastName is an $Title in $Department.'
单引号将导致字面值直接被输出
;
双引号将会导致变量的实际值被输出
.
我们再来一个例子
.
正如你所知道的
, PowerShell
包含了一些
“automatic”
变量
,
用来返回一些关于
PowerShell
和
PowerShell
环境的信息
;
例如
,
变量
$pshome
将会返回
Windows PowerShell
安装的目录名称
.
假设我们有下面一行代码
(
这是一行怪异的代码
,
但是请您饶了我们吧
)(
译注
:
作者这里只是为了展示例子
,
而构造了不太合适的例子
,
因此玩笑似的希望读者见谅
):
Write-Host "$pshome"
这样将会返回变量
$pshome
的值
;
也就是
PowerShell
安装到的目录名称
:
C:/WINDOWS/system32/WindowsPowerShell/v1.0
现在假设我们有这样一行代码
:
Write-Host '$pshome'
我们必须感谢单引号
,
它使得输出的结果为字面值
(literal):
$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
实例的前面
:
`$pshome
这就是秘密所在了哦
:
在变量前使用一个重音符号
, PowerShell
将会显示变量的名称
($pshome)
而不是该变量的值
.
就像我们这里所做的一样
,
即使将整个字符串放在双引号中这个规则也是成立的
.
换句话说
,
在
PowerShell
中
,
组合变量和其他文本是非常容易的
:
只需要将变量嵌入到字符串中
,
默认情况下
PowerShell
就会显示该变量的值
.
不可否认的
,
我们将会错过
&,
双引号
,
和类似这样的怪异结果
:
Wscript.Echo strLastName & ", " & strFirstName & " " & strInitials & "."
但是
,
我们已经设法绕过它们了
.