windows powershell
概述
1. 微软Windows操作系统最初的设计目标是面向非技术用户, 甚至是对计算机不感兴趣的人群, 因此, 真正自动化, 强大的Shell一直不是微软公司所关心的问题. 随着Windows开拓市场, 用户的反馈等, 微软意识到, 通过图形化工具管理一台计算机或许是最完美的手段, 但是随着需要管理的计算机数量提升, 就必须依靠能够有效自动化计算机配置的工具, 这是开发PowerShell的一个重要原因.
2. 为什么不使用已有的shell或扩展cmd.exe呢? 我们熟知的bash, ksh是为unix, linux系统设计的, 优化的shell, 从这些操作系统内核提供的system call来看, shell将内核的特性真正表现出来. 但是, Windows操作系统和unix, linux是完全不同的, Windows将大部分管理通过面向对象的方式进行管理, 提供了诸如COM, WMI等概念. 传统的shell输出信息都是字符串, 这样有利于统一的处理, 但是字符串也是你唯一能够操作的对象. PowerShell开发队伍为了能够为Windows提供更好的优化, 因此选择了重新创建一门新的语言.
3. PowerShell最初的蓝本是Posix的shell标准, 并借鉴了大量的Perl语言中精华, 提供了一个基于对象的脚本环境. PowerShell v1(版本1.0)希望使用者与对象交互, 但没有真正提供面向对象创建的语法(但是, 借助PowerShell的机制, 可以自己实现这套语法). 并且大量特性与C#语言相同, 因此C#到PowerShell的转换是非常容易的.
4. PowerShell有一些核心的特性, 这些特性是比较复杂的, 他们的存在是为了让传统shell用户能够尽量获得相似的用户体验. 对于普通用户, 你不需要理解, 掌握这些复杂的特性, 但是对于想深入理解, 掌握PowerShell的朋友, 这些特性对你将会产生巨大的帮助.
综上所述, 如果你用bash, perl, .Net, WMI, COM, VBscript的相关知识, 那么学习PowerShell的过程就会更短. 但是对于掌握bash, ksh的用户, 最困难的步骤是对问题的处理方式, 思维方式转变. 因为PowerShell中不仅仅有字符串, 因此, 尝试使用更加丰富的手段去处理问题, 往往阻挠大家的前进, 不过只要你有信心, 那么你一定能克服这些不是困难的困难. 祝大家在学习PowerShell的过程中, 能够举一反三, 从软件工程等多种角度, 更好的理解计算机科学.
语法及解释下面, 简单的贴出简单的语法及解释.
PS C:> 5 + 100
105
在PowerShell中, 进行数学运算相当的简单, 将需要计算的表达式输入, 结果就会输出, 这里根本不需要什么打印语句, 执行的结果不会被丢弃掉, 而是将结果输出(以后, 我们会看到如何将结果丢弃).
PS C:> "hello world!"
hello world!
学习任何语言, 第一个代码总会是hello world, 和上面的数学计算一样, 直接输入即可.
PS C:> (5 + 23 * 2) / 23
2.21739130434783
对于, 四则混合运算, PowerShell也支持的很好, 能够使用()来修改运算符的优先级和结合性. 这里注意, PowerShell支持几种不同的数据类型, 如: int, float, double等. 大多数时候, 我们会在后面对类型转换等做一些介绍.
PS C:> (2+2)*3/7 > c:foo.txt
PS C:> type c:foo.txt
1.71428571428571
除了将运算结果输出到显示器, 我们可以将结果存储到临时文件, 然后用type命令将文件的结果取回. 怎么样? 是不是和shell很相似呢?
PS C:> $n = (2+2)*3
PS C:> $n
12
PS C:> $n / 7
1.71428571428571
除了将运算结果存储到文件, 我们可以通过变量赋值, 将运算结果存储到变量中, 并使用该变量进行后续的计算.
PS C:> $files = dir
PS C:> $files[3]
Directory: Microsoft.PowerShell.CoreFileSystem::C:
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 2007-7-26 21:25 Program Files
PowerShell是一个支持对象的语言, 我们可以简单的将命令返回的结果赋值给变量, $files中包含了但前目录下的目录项的对象集合, 使用普通数组访问语法, 就可以获得该该位置的对象. 例子中显示了Program Files目录. 注意PowerShell中的数组下标是从0开始的. 这点与.Net Common Language Runtime完全一致.