当前位置:服务器企业动态 → 正文

理解通用的PowerShell自动变量

责任编辑:editor005 作者:Adam Bertram |来源:企业网D1Net  2015-07-31 14:44:21 本文摘自: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的变量。                                    

关键字:PowerShell变量

本文摘自:TechTarget中国

x 理解通用的PowerShell自动变量 扫一扫
分享本文到朋友圈
当前位置:服务器企业动态 → 正文

理解通用的PowerShell自动变量

责任编辑:editor005 作者:Adam Bertram |来源:企业网D1Net  2015-07-31 14:44:21 本文摘自: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的变量。                                    

关键字:PowerShell变量

本文摘自:TechTarget中国

电子周刊
回到顶部

关于我们联系我们版权声明隐私条款广告服务友情链接投稿中心招贤纳士

企业网版权所有 ©2010-2024 京ICP备09108050号-6 京公网安备 11010502049343号

^