微软Windows操作系统最初的设计目标是面向非技术用户, 甚至是对计算机不感兴趣的人群, 因此, 真正自动化, 强大的Shell一直不是微软公司所关心的问题。
但是,随着Windows开拓市场,随着需要管理的计算机数量提升, 就必须依靠能够有效自动化计算机配置的工具, 这是开发PowerShell的一个重要原因。
为什么不使用已有的shell或扩展cmd.exe呢? 我们熟知的bash, ksh是为unix, linux系统设计的, 优化的shell, 从这些操作系统内核提供的system call来看, shell将内核的特性真正表现出来。
但是, Windows操作系统和unix, linux是完全不同的, Windows将大部分管理通过面向对象的方式进行管理, 提供了诸如COM, WMI等概念。
传统的shell输出信息都是字符串, 这样有利于统一的处理, 但是字符串也是你唯一能够操作的对象。
PowerShell开发队伍为了能够为Windows提供更好的优化, 因此选择了重新创建一门新的语言。
希望大家在和Cantgis一起学习PowerShell的过程中, 能够多思考。
下面开始放出powershell语法及解释
1.其实在powershell 中,运行数学运算相当简单,只需要输入自己想要输入的数值和法则,结果就立即呈现。这里不需要打什么语句,执行的结果可以输入,不会丢失,第四个例子就是输出结果。
你看我们轻松计算出20+200的结果在使用powershell。
1
2
<code>PS C:\> 20 + 200</code>
<code>220</code>
2.我们在学习HTML语言或者任何语言首先使用的是helloworld,powershell也不例外,让我们尝试输入一下。
<code>PS D:\> </code><code>"hello world,powershell"</code>
<code>hello world,powershell</code>
3.powershell也很好的支持四则混合运算,使用()括号键来修改运算符的优先级和结合性,这里需要注意:powershell支持不同的数据类型
<code>PS D:\> (6+8)*45-(56*7)/2</code>
<code>434</code>
4.除了将运算结果输出到显示屏幕, 我们可以将结果存储到临时文件, 然后用type命令将文件的结果取回. 看起来powershell 确实power了。
你看我这里就把运算出来的数值放到D盘的powershell命名的txt文档,如果你懒得手动打开txt查看结果,这时候需要键入type命令,直接读取这个文本里的数值。
3
<code>PS D:\> (6+8)*45-(56*7)/2 >d:powershell.txt</code>
<code>PS D:\> type D:\powershell.txt</code>
5.除了将运算结果存储到文件, 我们可以通过变量赋值, 将运算结果存储到变量中, 并使用该变量进行后续的计算工作,更深入的四则运算。
下面我们看到 我们定义了 $N的数值为9 结果运算显示了出来,结果我们/3 显示结果为3,由于首次定义为n=9他是不会被改变的,所以我们在继续运算也是那个固定的数值哦。
4
5
6
7
8
9
<code>PS D:\> </code><code>$n</code> <code>= (1+2)*3</code>
<code>PS D:\> </code><code>$n</code>
<code>9</code>
<code>PS D:\> </code><code>$n</code><code>/3</code>
<code>3</code>
<code>PS D:\> </code><code>$n</code><code>/5</code>
<code>1.8</code>
6.powershell是支持对象的语言,我们将命令返回的结果赋值给这个变量,$files中包含了当前目录的对象集合,使用数组访问的语法,就可以获得改位置的对象。
下面我们看到的D盘的目录。注意powershell的数组是从零开始的。
<code>PS D:\> </code><code>$files</code> <code>=dir</code>
<code>PS D:\> </code><code>$files</code><code>[1]</code>
<code> </code><code>目录: D:\</code>
<code>Mode LastWriteTime Length Name</code>
<code>---- ------------- ------ ----</code>
<code>d---- 2013/6/8 9:40 fs.cer</code>
7.大多数常见语言,都提供一些操作集合类型的语法。最基本的集合类型就是数组类型,它提供了一种下标基于0的数组对象。
首先Cantgis会通过几个例子,来了解一下PowerShell中的数组是如何使用的。
这个例子输出了四个对象:数值1、字符串“a”、数值“10MB”和十六进制的“0x100”,也明确的解释出powershell数组类型的语法,事实上,在powershell中只要把不同对象用逗号“,”连接起来。就可以构成数组对象。如果不手动执行输入文本格式,powershell默认的格式器和输出器会输出到显示器上,最终我们看到了这个数组的结果。
<code>PS D:\> 1,</code><code>'a'</code><code>,10MB,0x100</code>
<code>1</code>
<code>a</code>
<code>10485760</code>
<code>256</code>
8.下面我们简单的使用几个变量来存储数组,在输出看看数组对象的更多可用特性,在下面的第一个例子中,将四个数组存放到变量:$array1中,接下来我们要将数值1定位于$int中。
数组对象上属性为count来指出当前数组对象的数量值为4(a.b.c.d.确实是四个)$int中并没有count属性(这个现象就需要下一个例子解释)
<code>PS D:\> </code><code>$array1</code> <code>= </code><code>'a'</code><code>,</code><code>'b'</code><code>,</code><code>'c'</code><code>,</code><code>'d'</code>
<code>PS D:\> </code><code>$int</code> <code>= 1</code>
<code>PS D:\> </code><code>$array1</code><code>.count</code>
<code>4</code>
<code>PS D:\> </code><code>"$array1"</code>
<code>a b c d</code>
<code>PS D:\> </code><code>$int</code><code>.count</code>
<code>PS D:\> </code><code>"$int"</code>
PS:这里我们说一下。在powershell中如果引用的属性不存在,它会返回$null对象,该对象不会对显示器也就是呈现的控制台造成任何影响,只提示用户继续输入命令。
9.powershell是基于对象的shell,我们看看数组究竟是什么对象呢,接下来我们继续进行cmdlet,我们执行后发现一个现象,在powershell中调用对象gettype()方法,可以得到该对象的类型对象,注意类型对象也是一个对象。改对象的fullname属性表现为该类型的名称。
如果你想要知道一个对象的类型就调用gettype()方法,然后再访问fullname属性就可以了。
<code>PS D:\> </code><code>$array1</code><code>.gettype().fullname</code>
<code>System.Object[]</code>
10.下面我们学习一下如何访问数组中的元素。实际上powershell的数组是通过.net类库中的数组来实现的,到这里我们发现了powershell是在.net类库原有之上添加了访问的接口,对象还是.net类库的对象
使用数组时候大家记住数组的第一个元素为“0”、数组的最后一个元素下表是数组长度减一 数组长度就是属性length得出,Count是属性Length的别名,这主要是为不同对象提供一致性接口的技术。这里需要特别注意的是,当数组访问越界也就时,PowerShell是不会给出任何错误信息的,只会得到一个$null对象。
<code>PS D:\> </code><code>$cantgis</code> <code>= 1,2,3</code>
<code>PS D:\> </code><code>$cantgis</code><code>.length</code>
<code>PS D:\> </code><code>$cantgis</code><code>[0]</code>
<code>PS D:\> </code><code>$cantgis</code><code>[2]</code>
<code>PS D:\> </code><code>$cantgis</code><code>[4]</code>
<code>PS D:\></code>
11.向数组中添加新的元素,在perl中,大家只需要见得使用索引,然后再存储上数值就OK,然后如果大家用perl的方法在继续操作的话,会出现数组赋值错误,超出范围哦!
对于索引越界问题,powershell 需要执行下面的代码。
10
11
<code>PS D:\> </code><code>$a</code> <code>= </code><code>"Cantgis"</code><code>,</code><code>"IPHONE4"</code>
<code>PS D:\> </code><code>$a</code><code>[0]</code>
<code>Cantgis</code>
<code>PS D:\> </code><code>$a</code><code>[1]</code>
<code>IPHONE4</code>
<code>PS D:\> </code><code>$a</code><code>[2]=</code><code>"IPHONE5"</code>
<code>数组赋值失败,因为索引“2”超出范围。</code>
<code>所在位置 行:1 字符: 4</code>
<code>+ </code><code>$a</code><code>[ <<<< 2]=</code><code>"IPHONE5"</code>
<code> </code><code>+ CategoryInfo : InvalidOperation: (2:Int32) [], RuntimeException</code>
<code> </code><code>+ FullyQualifiedErrorId : IndexOutOfRange</code>
<code>只需要把数组中“加”起来,执行下列代码解决索引越界</code>
<code>PS D:\> </code><code>$a</code> <code>= </code><code>$a</code><code>+</code><code>"IPHONE5"</code>
<code>PS D:\> </code><code>$a</code>
<code>IPHONE5</code>
<code>PS D:\> </code><code>$a</code><code>[2]</code>
12.结尾如果需要向数组中添加更多的对象时,必须使用“+”运算符。在执行powershell实际上进行下面的操作过程
<code>创建一个新的数组,该数组的大小能够存下运算结果的所有对象;</code>
<code>将第一个数组的成员拷贝到新数组中;</code>
<code>将第二个数组的成员拷贝到新数组中;</code>
如果数组中包含的元素很多,过多的向数组中添加对象,一定会使powershell执行脚本时更慢。
powershell是一个工具,不要依赖它来向数组添加对象,在.net类库中好多数据结构都能够满足经常向数组中添加对象的请求。
谢谢大家陪Cantgis一起学习powershell之路,我们刚刚走过往里长征的开端,接下来,我们会逐渐深入。
<b> 本文转自cantgis 51CTO博客,原文链接:http://blog.51cto.com/cantgis/1221910</b><b>,如需转载请自行联系原作者</b>
<b></b>