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

结语

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

(0)

相关推荐

  • PowerShell 定时执行.Net(C#)程序的方法

    可能也有其他方法,比如用 WGet 等等,但是 推荐用 PowerShell ,为什么呢,因为 PowerShell 太强大呗 PowerShell 语法(demo1.ps1): 复制代码 代码如下: $date = Get-Date;$beginTime = 2 * 60 ;$endTime = 2 * 60 + 11;$minuteCount = $date.hour * 60 + $date.minute #if the time is rightif(($minuteCount -le

  • PowerShell中使用.NET将程序集加入全局程序集缓存

    通常情况下,将程序集(Assembly)加入全局程序集缓存(GAC,Global Assembly Cache),可以使用GacUtil工具.只要使用/i参数,就可以把指定路径的程序集添加进GAC了. 不过由于GacUtil并不是.Net Framework的一部分,而是和Windows SDK一起发布的,这就导致了机器中安装了.Net,却可能找不到GacUtil的情况. 在PowerShell中,我们可以直接使用.Net的类库来搞定这件事,而不需要通过GacUtil.具体代码如下: [Refl

  • Powershell中可以使用的.Net实用静态方法

    支持所有版本. Powershell能够使用.net静态方法,比如下面有一些你常用的方法: 复制代码 代码如下: [Math]::Round(7.9)   [Convert]::ToString(576255753217, 8)   [Guid]::NewGuid()   [Net.Dns]::GetHostByName('schulung12')   [IO.Path]::GetExtension('c:\test.txt')   [IO.Path]::ChangeExtension('c:\

  • PowerShell中调用.NET对象的静态方法、静态属性和类方法、类属性例子

    本文介绍在PowerShell中如何使用.NET对象,PowerShell内在支持大量的.NET对象. 调用类的静态方法 用中括号把类的名称括起来,然后输入两个冒号,然后再输入方法名,最后是方法的参数.语法如下: [类名]::方法名(参数列表) 如: 复制代码 代码如下: [System.Diagnostics.Process]::GetProcessById(0) 访问类的静态属性 要访问.NET类的静态属性,可以使用中括号把类的名称括起来,然后输入两个冒号,然后再输入属性名.语法如下: [类

  • 使用PowerShell .Net获取电脑中的UUID

    UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分. 组成 UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成的API.按照开放软件基金会(OSF)制定的标准计算,用到了以太网

  • Powershell小技巧之查看安装的.Net framework版本信息

    查看当前PowerShell的.Net运行版本 PS> $PSVersionTable.CLRVersion Major Minor Build Revision ----- ----- ----- -------- 4 0 30319 34014 PS> [environment]::Version Major Minor Build Revision ----- ----- ----- -------- 4 0 30319 34014 查看所有安装的.Net 版本 PS> dir '

  • PowerShell中查看当前版本、Windows版本、.NET版本信息的代码

    PowerShell查看当前版本.Windows版本..NET版本信息 有很多cmdlet或者cmdlet的参数,在PowerShell不同的版本中,支持得不一样.所以,弄清楚当前PowerShell的版本信息是非常重要的一件事情.那么怎么查看当前PowerShell的版本信息呢?洪哥向大家介绍两个方法: 其实就是两个PowerShell的环境变量,一个是$psversiontable,另一个是$host. 有很多cmdlet或者cmdlet的参数,在PowerShell不同的版本中,支持得不一

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

    PowerShell可以设计的大而全,重新实现一切:也可以像现在一样设计成胶水语言,利用现有的资源.特别是,与.Net.COM和WMI三大豪门的联姻,使得PowerShell必将在Windows世界里大放光彩. 与新锐.Net联姻 在Windows的世界里,.Net代表着现在和将来,是新生力量.与.Net联姻,就意味着榜上了粗腿,迈上了快车道.号称基于.Net Framework,那么使用.Net的基类就易如反掌.基本步骤如下:1.添加类所在程序集:2.创建类的实例:3.调用实例的函数或者属性.

  • PowerShell入门教程之创建和使用配置文件实例

    在命令行中定义别名.变量和函数,只是将它们添加在当前PowerShell的会话中.退出会话后,这些更改就会丢失.想要在以后的会话中也能使用它们,就要将它们定义在配置文件中. 配置文件 PowerShell的配置文件,不像Windows操作系统中那样使用.ini文件,也不像多数应用程序那样使用XML文件.PowerShell的配置文件都是些普通的PowerShell脚本文件.需要注意的是,这些配置文件的文件名是固定.不能更改的.并且它们受到脚本执行策略的约束,就是说在默认情况下,也就是脚本执行策略

  • PowerShell入门教程之快速学习PowerShell的几个方法

    如何快速地掌握PowerShell呢?总的来说,就是要尽可能多的使用它,就像那句谚语说的:Practice makes perfect.当然这里还有一些原则和方法让我们可以遵循. 有效利用交互式环境 一般来说,PowerShell有两个主要的运行环境:PowerShell和PowerShell ISE.前者是PowerShell的运行环境,后者是PowerShell集成脚本环境,也就是编写脚本(.ps1)的地方.当然,你也可以使用记事本或者其他编辑器来编写脚本.对于初学者来说,一上来就写脚本绝对

  • PowerShell入门教程之函数、脚本、作用域介绍

    脚本所体现的是PowerShell的编程特性,是任务自动化的基础.函数是比脚本粒度更细的代码复用单元,可以定义在命令行中或者脚本中.作用域就是变量和函数的作用范围,是执行上下文的划分. 函数 函数就是命名的命令列表,与一般编程语言中的函数概念具有相同的范畴.函数中不但可以有简单命令,还可以有控制流程的命令,如if.while.switch等.函数可以有匿名参数或者命名参数列表.命令参数列表可以用大括号或者Param关键字定义.匿名函数可以使用$Args变量来访问.函数也可接收来自管道的对象作为输

  • PowerShell入门教程之远程操作运行PowerShell的方法

    PowerShell远程操作是远程管理的基础,它为集中管理分布式系统提供了又一种可靠.高效的方法. 一般来说PowerShell远程操作依赖于远程处理基础结构,但为数不多的几个自身具有远程处理能力的命令除外,如Get-Service.Get-Process.Get-WMIObject.Get-EventLog和Get-WinEvent等.(不难看出,这些命令都是"读取"系统的某些方面的信息,不做更改.它们依赖.Net Framework完成远程操作.) 配置远程基础结构 远程基础结构是

  • PowerShell入门教程之高效使用PowerShell交互式运行环境的几个小技巧

    在开始关于脚本.对象和远程处理等复杂的功能之前,一直想再写一篇关于交互式运行环境的文章.因为我觉得这很重要,但是有什么是不重要呢?:)所以,说到底可能是个人喜好吧,我就是特别喜欢这种立等可取的交互方式. 如何高效地使用PowerShell的交互式运行环境呢?所谓"高效",既跟使用这个工具的熟练程度有关,也跟使用这个工具的习惯有关.习惯有无意中养成的,也有主动养成的.如果你恰好玩PowerShell不久,那么就从现在开始主动养成一些好习惯吧. 多用Tab键 在运行环境中,Tab键有补全内

  • PowerShell入门教程之编写和使用脚本模块实例

    现在通过编写模块就可以在PowerShell命令行或者脚本中管理大型.分布式软件系统,就像Exchange Server和SharePoint Server正在做的那样.你有这样的需求吗? 模块.脚本模块 模块是PowerShell V2中引入的概念,用以改进之前提出的"管理单元".将管理单元也作为模块(二进制模块)处理之后,PowerShell中就包括两种模块--脚本模块和二进制模块.那么什么是模块呢?模块就是包含一些PowerShell命令.项的程序包,它以一个整体被分发共享和加载

  • HTML 30分钟入门教程

    运行下面的代码就可以了 HTML 30分钟入门教程 h1 {text-align:center} p {text-indent:2em; line-height:140%; margin:auto 10px} span {margin:3px} .code { border:solid 1px gray; background-color:#eee} .name { font-weight:bold } dl {margin-left:20px} dt {font-weight:bold} .t

  • Dom入门教程图解 推荐

    那么Dom是如何读取和管理Html文件的呢?首先你必须要了解html的源码结构.看图 如果你有学过或写过Html,那么你会对上图一目了然.我想要说明的就是Html的源码结构是有层次的,而且标签与杯签之间还存在着父子,或相邻的关系.上图不难看出HTML这个标签是最顶级的.最上层的.也可以理解成html文件的根.其次是Head与Body标签.这两个标签是相邻的.也可以理解成兄弟关系.但他们都属于html的子标签或称为子元素.然后Body标签内包含了Table,Div,Div.这三个标签你可以理解为B

  • 一篇不错的Python入门教程

    原文 http://www.hetland.org/python/instant-hacking.php Instant Hacking[译文] 译者: 肯定来过 这是一篇简短的关于python程序设计语言的入门教程,原文在这里,翻着词典翻译了来! 这是一份对编程艺术的简短介绍,其中的例子是用python写成的.(如果你已经知道了该如何编程,但是想简单了解一下python,你可以查阅我的另一篇文章Instant Python.)这篇文章已经被翻译为意大利.波兰.日本.塞尔维亚以及巴西葡萄亚语等许

随机推荐