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

Windows PowerShell每周提示(3):访问数组中的值

且不论他们富有魅力的生活方式(例如,仅在过去的一年中脚本专家Jean RossGreg Stemp已经从OrlandoFL出发到过……呃,OrlandoFL),从内心上来说,脚本专家是一群有着简单品味的普通人。他们带着Windows PowerShell,例如,询问100个人他们最喜欢Windows PowerShell的什么,那么你将很有可能得到100种不同的回答,他们中的大多数人富有经验地处理诸如访问.NET Framework之类的新功能。如果询问脚本专家们中的任意一个,他们最喜欢Windows PowerShell的什么,那么你有可能得到一致的回答:PowerShell让你能以很酷的方式访问数组中的值。

如果你是VBScript脚本方面老手的话,你不得不带着害怕的感觉来面对数组。为什么?好的,其一,你不能回显任何数组的值;那将会导致“类型不匹配”错误。例如,看一下下面的VBScript脚本:

x = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Wscript.Echo x

这能够运行么?你已经知道这个问题的答案了,不是么?是的,它无法正常运行。取而代之的是,你需要建立For Each或者For Next 循环来获得x中的值:

x = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
For Each y in x
    Wscript.Echo y
Next

那没有什么特别困难的,但是你确实需要对妳的脚本做一些额外的工作。此外,你有可能需要预先检查来确保x是以数组的形式第一次出现(这将导致更多一点的工作量)。毕竟,尝试循环不是数组的变量也将会导致错误:

x = 1
For Each y in x
    Wscript.Echo y
Next

在这个例子中我们只能得到“对像不是一个集合”的信息。

Windows PowerShell则完全不同。例如,考虑下下面的Windows PowerShell脚本:

$x = 1,2,3,4,5,6,7,8,9,10
$x

当我们运行这个脚本的时候将发生什么?这就是将要发生的:

1
2
3
4
5
6
7
8
9
10

换句话说,Windows PowerShell让你能够访问数组中的所有值只通过简单的回显数组它本身(本例中是$x)。你不必建立For each loop循环或者For Next循环;PowerShell为你处理这些事。

当然,在VBScript下你不必访问数组中的所有项目;你能通过指定项目索引号来访问单个项目。例如,假设你要访问以下数组中的第三个项目:

x = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

因为在VBScript(及PowerShell)中的数组是从0开始索引的,第二个项目的索引号为1,推而广之,第三个项目的索引号为2.我们如何访问第三个项目并只访问它?使用类似这样的代码:

Wscript.Echo x(2)

就如你期待的,Windows PowerShell让你能做同样的事,并且使用相似的语法;

$x[2]

但不仅仅是这样。想要回显数组中的最后一个项目?在VBScript中这是可以的,虽然使用一些令人看上去疯狂的结构:

Wscript.Echo x(Ubound(x))

这是你如何在Windows PowerShell中完成同样的任务:

$x[-1]

那是什么?那如何访问数组中倒数第二个项目呢?没有问题:

$x[-2]

等等……

但是等一下,还有更多的问题。假设你要回显索引号为1357的项目值?无论相信与否,那没有什么问题。只要确保指定了那些索引号,并使用逗号分隔单独的数字:

$a[1,3,5,7]

我们直到最后都做得很好。Windows PowerShell提供了称为“数字范围”操作符(..)的特性,这使你能指定一个范围内的数字,这对你在处理数组时十分有帮助。假设我们有一个100个项目的数组,并且我们需要回显第37-39号项目的值。如果你愿意,我们可以单独列出每个项目的索引号。或者我们可以用数字范围操作符来替代:

$a[37..79]

很漂亮,不是么?如同在蛋糕里加入一点冰,范围操作符也并不局限于数组。例如,试试这个小巧的单行脚本并看看会发生什么:

1..100

也只有简单品味的普通人才能抑制不住被简单的事物所感动。

英文原文

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

已发表 2007年9月23日 17:46 作者 ghjconan

评论

# re: Windows PowerShell每周提示(3):访问数组中的值

2007年9月23日 22:23 by aloki

PowerShell实在是太酷了,简单,明了。

# re: Windows PowerShell每周提示(3):访问数组中的值

2007年9月24日 19:35 by anders

ghjconan兄,试试 1..2*3

@_@PowerShell is cool

# re: Windows PowerShell每周提示(3):访问数组中的值

2007年9月24日 19:39 by anders

1,2分3组显示

PowerShell名副其实~

# Windows PowerShell每周提示(12):UC时代的用户对象创建(中)

2008年8月4日 22:33 by ghjconan's blog

第二节 组织结构树的实现 那么在开始这一节内容之前,你需要深呼吸一下,准备面对那些很复杂的代码?不,不必这样,放轻松,没有你想象的那么复杂,因为 Quest 公司的相关 cmdlets 为我们节省了很多时间。那么先让我们来看看诸位可能比较感兴趣的组织架构树。代码如下:

禁止匿名发表评论