欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PowerShell入门教程之访问.Net程序集、COM和WMI实例

程序员文章站 2022-03-29 21:39:41
powershell可以设计的大而全,重新实现一切;也可以像现在一样设计成胶水语言,利用现有的资源。特别是,与.net、com和wmi三大豪门的联姻,使得powershel...

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,必将大大提高访问本机和远程系统资源的效率。不管你信不信,反正我是信了!

结语

  不管是建立在.net的基础上,还是兼容com,再或者是以wmi的方式访问资源,powershell一心想成为多面胶,成为大众而非小众的朋友。作为it人士的你,有没有别粘(电)到?