在Windows PowerShell脚本语言中有一些变量名称是有限制的,使用它们可能会产生一些超出预期和意想不到的结果。每一个脚本新手遇到这类问题的时候,都会很苦恼,想知道这个脚本哪里出问题了。而罪魁祸首基本上往往就是PowerShell的自动变量。 PowerShell语言本身需要一些变量的支持才能正确运行。
PowerShell使用这些变量来存储各类信息单位,并且允许用户读取这些变量,而不能对它们进行写入操作。PowerShell在这些变量里面存储着不同类型的信息。 最通用的一个自动变量就是管道变量$_,它也被叫做$PSItem。这个变量被用于展示对象在PowerShell管道里的流向。
……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
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(如下图)。
在这个实例里,我使用了管道变量来展示从Import-Csv命令获取到每一个名字。我引用LastName属性作为管道变量,并且告知Where-Object命令只显示最后名称为Jones的名字。我不能使用$_变量给自身分配一个值,因为PowerShell已经在使用它了。
如下图的PowerShell脚本,你想要使用$_来匹配somethingelse,但是没用,因为PowerShell允许管理员编写任何自动变量;你会注意到并没有错误发生,这个问题经常会绊倒一些新的PowerShell用户。
最后,另外两个自动变量是$true和$false。PowerShell保留这些变量是为了标识Boolean True和Boolean Falsevalue。这些值一直都穿插用于所有的PowerShell脚本,来检查各类条件。例如,你可以使用$false变量来检查是否某些值是否相等,如下图所示,我用它来检查整数1是否等于整数2。
在这个案例中,1不等于2,我使用“1 -eq 2”的比较结果与自动变量$false进行比对来确认。如期望的,另外一个自动变量$true也得到相同的结论。
当你试图分配一个变量给$false(如下图所示),你会得到这个变量是只读或者是常量的报错信息。在这两种情况下,意味着这个变量是不允许在其他地方被定义或者被更改值的。
这些例子都很相似,所以很难出错。无论如何,在你着手创建一个大型脚本时候,使用自动变量的问题会变得很难被追踪。记住:你不需要对一个问题获取实际的错误。下一次你遇到脚本问题时,即使所有似乎看起来都很正常,但是检查自动变量可以确保你使用的不是某种冲突PowerShell的变量。