理解通用的PowerShell自动变量

日期: 2015-07-30 作者:Adam Bertram翻译:黄小明 来源:TechTarget中国 英文

在Windows PowerShell脚本语言中有一些变量名称是有限制的,使用它们可能会产生一些超出预期和意想不到的结果。每一个脚本新手遇到这类问题的时候,都会很苦恼,想知道这个脚本哪里出问题了。而罪魁祸首基本上往往就是PowerShell的自动变量。 PowerShell语言本身需要一些变量的支持才能正确运行。

PowerShell使用这些变量来存储各类信息单位,并且允许用户读取这些变量,而不能对它们进行写入操作。PowerShell在这些变量里面存储着不同类型的信息。 最通用的一个自动变量就是管道变量$_,它也被叫做$PSItem。这个变量被用于展示对象在PowerShell管道里的流向。

……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

在Windows PowerShell脚本语言中有一些变量名称是有限制的,使用它们可能会产生一些超出预期和意想不到的结果。每一个脚本新手遇到这类问题的时候,都会很苦恼,想知道这个脚本哪里出问题了。而罪魁祸首基本上往往就是PowerShell的自动变量。

PowerShell语言本身需要一些变量的支持才能正确运行。PowerShell使用这些变量来存储各类信息单位,并且允许用户读取这些变量,而不能对它们进行写入操作。PowerShell在这些变量里面存储着不同类型的信息。

最通用的一个自动变量就是管道变量$_,它也被叫做$PSItem。这个变量被用于展示对象在PowerShell管道里的流向。

如果你想要使用PowerShell读取一个CSV文件或者使用Get-AdUser命令来查找Active Directory用户,但是你并不想检索CSV或者整个Active Directory用户的所有项,这时候你就可以使用另外一个通用的自动变量:where alias(也可以叫做 Where-Object)。例如,如果你要查询一个以FirstName和LastName为文件头的CSV文件,那会包含上百个名称;有一个可以只获取到last name为Jones的命令就是Where-Object(如下图)。
 
理解通用的PowerShell自动变量 
 
在这个实例里,我使用了管道变量来展示从Import-Csv命令获取到每一个名字。我引用LastName属性作为管道变量,并且告知Where-Object命令只显示最后名称为Jones的名字。我不能使用$_变量给自身分配一个值,因为PowerShell已经在使用它了。

如下图的PowerShell脚本,你想要使用$_来匹配somethingelse,但是没用,因为PowerShell允许管理员编写任何自动变量;你会注意到并没有错误发生,这个问题经常会绊倒一些新的PowerShell用户。

理解通用的PowerShell自动变量

最后,另外两个自动变量是$true和$false。PowerShell保留这些变量是为了标识Boolean True和Boolean Falsevalue。这些值一直都穿插用于所有的PowerShell脚本,来检查各类条件。例如,你可以使用$false变量来检查是否某些值是否相等,如下图所示,我用它来检查整数1是否等于整数2。

 
在这个案例中,1不等于2,我使用“1 -eq 2”的比较结果与自动变量$false进行比对来确认。如期望的,另外一个自动变量$true也得到相同的结论。

当你试图分配一个变量给$false(如下图所示),你会得到这个变量是只读或者是常量的报错信息。在这两种情况下,意味着这个变量是不允许在其他地方被定义或者被更改值的。

 
这些例子都很相似,所以很难出错。无论如何,在你着手创建一个大型脚本时候,使用自动变量的问题会变得很难被追踪。记住:你不需要对一个问题获取实际的错误。下一次你遇到脚本问题时,即使所有似乎看起来都很正常,但是检查自动变量可以确保你使用的不是某种冲突PowerShell的变量。

作者

Adam Bertram
Adam Bertram

自由撰稿人