微软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。
PS C:\> 20 + 200220
2.我们在学习HTML语言或者任何语言首先使用的是helloworld,powershell也不例外,让我们尝试输入一下。
PS D:\> "hello world,powershell"hello world,powershell
3.powershell也很好的支持四则混合运算,使用()括号键来修改运算符的优先级和结合性,这里需要注意:powershell支持不同的数据类型
PS D:\> (6+8)*45-(56*7)/2434
4.除了将运算结果输出到显示屏幕, 我们可以将结果存储到临时文件, 然后用type命令将文件的结果取回. 看起来powershell 确实power了。
你看我这里就把运算出来的数值放到D盘的powershell命名的txt文档,如果你懒得手动打开txt查看结果,这时候需要键入type命令,直接读取这个文本里的数值。
PS D:\> (6+8)*45-(56*7)/2 >d:powershell.txtPS D:\> type D:\powershell.txt434
5.除了将运算结果存储到文件, 我们可以通过变量赋值, 将运算结果存储到变量中, 并使用该变量进行后续的计算工作,更深入的四则运算。
下面我们看到 我们定义了 $N的数值为9 结果运算显示了出来,结果我们/3 显示结果为3,由于首次定义为n=9他是不会被改变的,所以我们在继续运算也是那个固定的数值哦。
PS D:\> $n = (1+2)*3PS D:\> $n9PS D:\> $n/33PS D:\> $n/33PS D:\> $n/51.8
6.powershell是支持对象的语言,我们将命令返回的结果赋值给这个变量,$files中包含了当前目录的对象集合,使用数组访问的语法,就可以获得改位置的对象。下面我们看到的D盘的目录。注意powershell的数组是从零开始的。
PS D:\> $files =dirPS D:\> $files[1] 目录: D:\Mode LastWriteTime Length Name---- ------------- ------ ----d---- 2013/6/8 9:40 fs.cer
7.大多数常见语言,都提供一些操作集合类型的语法。最基本的集合类型就是数组类型,它提供了一种下标基于0的数组对象。
首先Cantgis会通过几个例子,来了解一下PowerShell中的数组是如何使用的。
这个例子输出了四个对象:数值1、字符串“a”、数值“10MB”和十六进制的“0x100”,也明确的解释出powershell数组类型的语法,事实上,在powershell中只要把不同对象用逗号“,”连接起来。就可以构成数组对象。如果不手动执行输入文本格式,powershell默认的格式器和输出器会输出到显示器上,最终我们看到了这个数组的结果。
PS D:\> 1,'a',10MB,0x1001a10485760256
8.下面我们简单的使用几个变量来存储数组,在输出看看数组对象的更多可用特性,在下面的第一个例子中,将四个数组存放到变量:$array1中,接下来我们要将数值1定位于$int中。
数组对象上属性为count来指出当前数组对象的数量值为4(a.b.c.d.确实是四个)$int中并没有count属性(这个现象就需要下一个例子解释)
PS D:\> $array1 = 'a','b','c','d'PS D:\> $int = 1PS D:\> $array1.count4PS D:\> "$array1"a b c dPS D:\> $int.countPS D:\> "$int"1
PS:这里我们说一下。在powershell中如果引用的属性不存在,它会返回$null对象,该对象不会对显示器也就是呈现的控制台造成任何影响,只提示用户继续输入命令。
9.powershell是基于对象的shell,我们看看数组究竟是什么对象呢,接下来我们继续进行cmdlet,我们执行后发现一个现象,在powershell中调用对象gettype()方法,可以得到该对象的类型对象,注意类型对象也是一个对象。改对象的fullname属性表现为该类型的名称。如果你想要知道一个对象的类型就调用gettype()方法,然后再访问fullname属性就可以了。
PS D:\> $array1.gettype().fullnameSystem.Object[]
10.下面我们学习一下如何访问数组中的元素。实际上powershell的数组是通过.net类库中的数组来实现的,到这里我们发现了powershell是在.net类库原有之上添加了访问的接口,对象还是.net类库的对象
使用数组时候大家记住数组的第一个元素为“0”、数组的最后一个元素下表是数组长度减一 数组长度就是属性length得出,Count是属性Length的别名,这主要是为不同对象提供一致性接口的技术。这里需要特别注意的是,当数组访问越界也就时,PowerShell是不会给出任何错误信息的,只会得到一个$null对象。
PS D:\> $cantgis = 1,2,3PS D:\> $cantgis.length3PS D:\> $cantgis[0]1PS D:\> $cantgis[2]3PS D:\> $cantgis[4]PS D:\>
11.向数组中添加新的元素,在perl中,大家只需要见得使用索引,然后再存储上数值就OK,然后如果大家用perl的方法在继续操作的话,会出现数组赋值错误,超出范围哦!
对于索引越界问题,powershell 需要执行下面的代码。
PS D:\> $a = "Cantgis","IPHONE4"PS D:\> $a[0]CantgisPS D:\> $a[1]IPHONE4PS D:\> $a[2]="IPHONE5"数组赋值失败,因为索引“2”超出范围。所在位置 行:1 字符: 4+ $a[ <<<< 2]="IPHONE5" + CategoryInfo : InvalidOperation: (2:Int32) [], RuntimeException + FullyQualifiedErrorId : IndexOutOfRange
只需要把数组中“加”起来,执行下列代码解决索引越界PS D:\> $a = $a+"IPHONE5"PS D:\> $aCantgisIPHONE4IPHONE5PS D:\> $a[2]IPHONE5
12.结尾如果需要向数组中添加更多的对象时,必须使用“+”运算符。在执行powershell实际上进行下面的操作过程
创建一个新的数组,该数组的大小能够存下运算结果的所有对象;将第一个数组的成员拷贝到新数组中;将第二个数组的成员拷贝到新数组中;
如果数组中包含的元素很多,过多的向数组中添加对象,一定会使powershell执行脚本时更慢。powershell是一个工具,不要依赖它来向数组添加对象,在.net类库中好多数据结构都能够满足经常向数组中添加对象的请求。谢谢大家陪Cantgis一起学习powershell之路,我们刚刚走过往里长征的开端,接下来,我们会逐渐深入。