powershell 简介以及调用。net,com,WMI类库

来源:互联网 发布:算法第四版pdf 编辑:程序博客网 时间:2024/05/22 01:47
1 管道 |
把上一条命令的输出作为下一条命令的输入


2重定向 
1 向文件写入 '>' 这个是覆盖   ‘>>’这个是追加  
3 数学运算
 支持加减乘除的运算
 
4 能执行例如netstat ipconfig cmd 等外部命令


5  拥有命令集,即直接可以调用很多函数,例如GetHashCode()
“hello”。GetHashCode()  输出1699594585
6 用powershell调用。net程序,不管是类库还是自己写的程序,还可以调用com和WMI类库


PowerShell可以设计的大而全,重新实现一切;也可以像现在一样设计成胶水语言,利用现有的资源。特别是,与.Net、COM和WMI三大豪门的联姻,使得PowerShell必将在Windows世界里大放光彩。


与新锐.Net联姻


  在Windows的世界里,.Net代表着现在和将来,是新生力量。与.Net联姻,就意味着榜上了粗腿,迈上了快车道。号称基于.Net Framework,那么使用.Net的基类就易如反掌。基本步骤如下:1、添加类所在程序集;2、创建类的实例;3、调用实例的函数或者属性。以StringBuilder类为例,代码如下:


复制代码
Add-Type -AssemblyName mscorlib


$str = New-Object System.Text.StringBuilder


$str.Append("Hello")


$str.ToString()
复制代码
其结果是输出Hello字符串。


  其实最让人开心的,是PowerShell能够使用自定义的.Net类库。这意味着我们的产品或者工具都能在PowerShell中继续有效。基本步骤是:写一个类库,编译成DLL,导入到PowerShell会话中,然后所定义的函数和属性都可以使用了。示例如下:


首先写好代码,编译成DLL,假设路径是D:\PowerShellDemo\PowerShellDemo.dll。


复制代码
using System;


namespace PowerShellDemo
{
    public class PowerShellDemo
    {
        public void Greet()
        {
            Console.WriteLine("Hello!");
        }
    }
}
复制代码
然后将其导入到PowerShell会话中,并使用其函数或者属性。


Add-Type –Path “D:\PowerShellDemo\PowerShellDemo.dll”


$obj = New-Object PowerShellDemo.PowerShellDemo


$obj.Greet()
以上调用的输出是Hello字符串.


  如此容易就能使用.Net的托管程序集,必然为它招徕一大票簇拥。


与贵族COM为伍


COM就像没落的贵族一样,虽然过气,但那个范儿还在。作为遗产,它们还在放光发热。PowerShell没有嫌弃它,而是选择与他们兼容。这也让现在依旧战斗在Native C++的程序员颇为欣慰。PowerShell对COM的访问方式是通过其ProgID来进行。示例如下:


复制代码
$ie = New-Object -ComObject InternetExplorer.Application


$ie.Visible = $true


$ie.Navigate(“www.bing.com”)


$ie.Quit()
复制代码
以上这个示例演示了对IE的启动、显示、导航和退出等操作,非常简便。与COM的良好关系,也让PowerShell操作一些系统接口变得简单而其直接。这绝对是个加分的设计。 


与实力派WMI结盟


  WMI是访问本机和域内标准资源的强大武器,接管了WMI的资源访问,PowerShell也从此迈入豪门。它没有做多余的工作,只是轻巧的通过几个WMIObejct命令,就拥有了WMI的一整套访问机制。对于域内其他机器的访问,甚至不用利用PowerShell的远程基础结构。访问WMI的示例如下:


Get-WmiObject -Namespace "root\cimv2" -Class Win32_Process
  这个命令的功能跟Get-Process一样,获取本机上正在运行的进程,只是它们得到的结果的形式有一点点小的区别。真正的区别在于当从远程计算机上获取进程信息时,Get-Process必须用Invoke-Command命令,在PowerShell远程基础结构下运行,而Get-WmiObject命令只需加上-ComputerName参数即可。这份从容,是从WMI娘家带来的。


  擅用WMI,必将大大提高访问本机和远程系统资源的效率。不管你信不信,反正我是信了!
http://www.cnblogs.com/ceachy/archive/2013/02/28/PowerShell_DotNet_COM_WMI.html