Windows PowerShell初体验——.NET对象支持
时间:2010-09-12 来源:chenkai
我个人很少用到Linux/Unix 操作系统. 对于不少Linux/Unix管理员在系统任务操作Shell一直保持很难理解. 后来从朋友公司听说他们测试队伍中专门保留了一个脚本Scirpt Shell 测试小组. 我一时更纳闷了. 当然这个问题知道我碰到Windows PowerShell-Windows出的一套Shell工具后 才渐渐理解.
Windows PowerShell是微软为Windows系统开发的Shell及脚本语言技术,它是一种新的命令行外壳和脚本语言,用于实现系统自动化管理。它的出现弥补了与Linux/Unix系统相比Windows在Shell方面的不足,这也就不难理解为什么微软从2004起一直在做方面努力 相继推出两个版本1.0/2.0 ,这两个版本的连续发布可以看出微软公司在马力十足的不断开发PowerShell,同时也为程序开发人员提供了一种更高效的编写脚本的工具,
Windows 7和Windows Server 2008 R2中已经整合了PowerShell 2.0: Windows 7下集成路径在附件中:
Windows PowerShell建立在.NET Framework 2.0/3.x的基础上, 和.NET公共语言运行时(CLR)和.NET框架上,它内部建立一个通信管道专门用来接受并返回.NET对象.
对脚本编程接触较少,今天将采用几个实际事例来验证Windows PowerShell(2.0) 对.NET对象的内部支持.
<1>准备工作
在进行验证之前. 我们有必要有一个好的编译工具.俗话说”公欲善其事必先利其器.”现在的Windows PowerShell已经发布到2.0版本 ,在Windows 7已经集成. 但是集成自带的图形操作界面ISE工具 . 总体给我感觉功能太多于单一. 没有字体调整. 没有详细调试执行信息提示界面.对>NET对象API没有提示界面. 我们需要一个更好用的工具——PowerShellAnalyzer
打开界面:
现在EditPlus和UltraEdit都已经出了powershell的语法文件,但是对Shell脚本编程功能更强的IDE只能算是PowerShellAnalyzer,用了N多第三方控件, 在2009年6月份只能45天试用,现在已经全部免费开放这款强大的Shell脚本的IDE工具. 也是微软官方推荐第三方工具的首选.
下载地址: Shell Tools——PowerShellAnalyzer-Tool
<2>验证Shell——.NET对象支持
目前采用Shell版本是2.0, 请确认本机.NET的环境在2.0/3.5版本上. Shell直接集成与。Net CLR 之上. 这就为了我们直接在Shell脚本中创建.NET对象提供了可能.powershell可以很方便的使用.net的类库。使用 New-Object 可以实例化一个.net类. 例如我们常在网页操作文件下载. 我们同样可以直接Shell脚本用简短几行代码 快速实现对固定链接文件本地下载:
$getobject = New-Object Net.WebClient $downloadurl = 'http://files.cnblogs.com/chenkai/WP7_LocalDBDemo.rar' $storepath = "$home\LocalStroeFile.zip" $getobject.DownloadFile($downloadurl, $storepath )
通过New-Object 命令 新建一个NET.WebClient类 用来实现下载操作. $downloadurl指定的是一个下载文件路径. 问了演示目的当前指定文件大小只有756KB. $storepath存在在本地的路径. $home类似Web页面表达式一样在Shell脚本中自动解析到当前用户文件夹下. 最后直接调用WebClient类DownLoad方法实现对文件下载.下载结果:
下载成功. 但是整个过程没有任何提示.而且下载时间是相对于自己网络环境而言有很大影响. 我们是否有必要做一个下载进度条来显示下载的文件总体进度.不过很遗憾,简单的DownloadFile ( )方法没有提供下载进度条控制. 但是VBScript中有一个方法恰恰在空间ServerComputer.Network下提供了下载进度条控制方法:
[void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') $url = 'http://files.cnblogs.com/chenkai/WP7_LocalDBDemo.rar' $local = "$home\powershellworkshop.zip" $object = New-Object Microsoft.VisualBasic.Devices.Network $object.DownloadFile($url, $local, '', '', $true, 500, $true, 'DoNothing')
现在加载Microsoft.VisualBasic.Devices.Network 空间. New出对象,后. DownLoadFile方法参数对比:
DownloadFile 方法 (Uri, String, String, String, Boolean, Int32, Boolean, UICancelOption)
Uri:String 或 Uri。要下载的文件的路径,包括文件名和主机地址。必选。 String 下载文件的文件名和路径。必选。 String。要进行身份验证的用户名。默认值为空字符串 ""。 String。要进行身份验证的密码。默认值为空字符串 ""。 Boolean。指定是否显示操作进度。默认为 False。 Int32。以毫秒为单位的超时间隔。默认值为 100 秒。Boolean。指定是否改写现有文件。默认为 False。 UICancelOption。指定当用户在对话框(此对话框在 ShowUI 设置为 True 时显示)上单击“取消”或“否”时的行为。默认为 ThrowException。 执行过程中会提示出一个进度条页面: