PowerShell 学习笔记(5): 浅谈使用.Net对象
本文在ITECN首发,未经许可严禁转载。
首先要使用.net对象的话,我们需要一个详细的资料库,无疑MSDN是最好的。诸位可以通过以下地址进行访问。
http://msdn2.microsoft.com/zh-cn/library/ms229335(VS.80).aspx
打开之后不要吓一跳,里面的东西的确是很丰富,不可能是短时间内全部都掌握的,我们先大致浏览下里面的东西。
首先我们天天和系统打交道,所以System理所应当是我们应该关注的。翻动列表的时候我们会发现“System.DirectoryServices.ActiveDirectory”,呵呵,这个大家肯定很熟悉,活动目录嘛,不过点击“+”号展开后又是一堆东西,这下大家明白PowerShell V1.0没有提供AD相关的cmdlets的原因了吧,把这些东西都完美的整合到PowerShell里面是需要时间的,我们期待PowerShell的后继版本的改进,而目前我么可以使用Quest公司提供的扩展包(笔记4中有提到)。
然后我们就看到“System.Net”显而易见这是和网络相关的类,我们点击“+”号展开,呵呵我们面前再次出现一大堆东西。不过我们耐心点看的话会发现一个叫WebClient的类,顾名思义,网络客户端。看来里面有好东西啊。我们点击“+”,我们就会看到如下图一样的列表。
我们会发现一个叫DownloadFile的方法,我们再单击“+”展开,看看这个方法具体如何使用。
有两个参数,第一个是URI,第二个是filename,分别代表网络文件路径,和下载文件的本地存放路径。因此假设我们要下载ITECN的logo的话,我们可以使用以下两行代码
|
$webclient = New-Object system.Net.WebClient
$webclient.downloadfile("http://blogs.itecn.net/Themes/default/images/common/title.gif","title.gif") |
新建对象,然后执行下载。这里要注意的是如果本地文件路径不填写完整,文件将被下载到 [System.Environment]::CurrentDirectory 中的路径而不是你当前提示符“>”前的路径,如果你需要修改的话可以使用[System.Environment]::set_CurrentDirectory('x:\powershell')进行修改
。

当然,你还会看到下面有一个DownloadString的方法,这个比较简单,我们试试就知道了。
比如我们输入下面的语句(已创建$webclient对象)
|
$webclient.DownloadString("http://www.google.com") |
输出结果

然后还有个比较有用的就是“System.Net.NetworkInformation.Ping”,这个在笔记3里出现过,要想在PowerShell里面使用的话,我们可以输入以下代码
|
$ping = New-Object System.Net.NetworkInformation.Ping
$ping.send("192.168.1.1") |
这比使用WMI的Win32_PingStatus简洁多了,当然你要是问为什么不使用直接使用Ping(还有比如dir,del,findstr 等Windows Native Command)呢?
这里再推荐一个国内的PowerShell blog (这里还有部分PowerShell的基础知识,不熟悉的朋友也可以再阅读下,加深理解)http://blog.chinaunix.net/u1/42924/showart_353355.html
在这篇blog里阐述的比较详细,主要是出于效率的原因所以不推荐使用Native Command
原创测试:http://bbs.winos.cn/viewthread.php?tid=20150 by Anders@winos
总结一下的话,在PowerShell使用.Net对象只需用 New-Object 新建.Net对象,而想要确定具体.Net对象的话则需要查阅MSDN的相关文档,我们需要关注的是继承层次结构中黑体标注的部分。这是我们新建对象时需要用到的。然后具体方法的使用则需要查阅文档。

当然不是所有.Net 对象都能像例子中的那样很简单的就可以使用。New-Object的帮助里面还有几个比较简单的例子,诸位也可看下。
最后,本文只是非常非常简单的说了下关于在PowerShell中使用.Net,希望给诸位起个抛砖引玉的作用。