是谁入了我的梦 给了我一整夜的温馨 收藏本站
登陆 / 注册 搜索

阅读: 4.1K   回复: 3

[# 系统基础] PowerShell入门(九):访问.Net程序集、COM和WMI(转)

soarcloud 「龙战于野」 2016-8-2 15:29 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

本帖最后由 soarcloud 于 2016-8-2 21:28 编辑
& X& b+ j# \: l. w* ?0 z- \' \- C1 x3 O4 |. w# Q  D8 {) E: V1 s- J6 f
  PowerShell可以设计的大而全,重新实现一切;也可以像现在一样设计成胶水语言,利用现有的资源。特别是,与.Net、COM和WMI三大豪门的联姻,使得PowerShell必将在Windows世界里大放光彩。
. Q/ s) [3 V8 O6 j4 k7 q7 m6 c  D/ A1 H( e% d
与新锐.Net联姻
. I' r) ?6 |/ L  Z/ |% K4 G$ B  在Windows的世界里,.Net代表着现在和将来,是新生力量。与.Net联姻,就意味着榜上了粗腿,迈上了快车道。号称基于.Net Framework,那么使用.Net的基类就易如反掌。基本步骤如下:1、添加类所在程序集;2、创建类的实例;3、调用实例的函数或者属性。以StringBuilder类为例,代码如下:! j4 T2 E. i# K% |' I

( q; P: ]; d6 I复制代码
  X8 c4 k. U# k. x) g1 d* D7 qAdd-Type -AssemblyName mscorlib) w1 ^! k8 Z4 }# ~
$str = New-Object System.Text.StringBuilder
5 b6 o, Q0 x: I5 w  R$ m# W$str.Append("Hello")% n: L* E) t7 H4 H: f
$str.ToString()
( ~& f  A, d2 y0 L! U8 [" U1 F复制代码/ L' R3 t* k0 v  k/ P
其结果是输出Hello字符串。* V  N$ ]4 O6 t: W
  其实最让人开心的,是PowerShell能够使用自定义的.Net类库。这意味着我们的产品或者工具都能在PowerShell中继续有效。基本步骤是:写一个类库,编译成DLL,导入到PowerShell会话中,然后所定义的函数和属性都可以使用了。示例如下:+ }2 \7 |: E4 I* r/ e5 e
首先写好代码,编译成DLL,假设路径是D:\PowerShellDemo\PowerShellDemo.dll。
3 J  W1 K- z; @7 H' ^! K$ H' D复制代码
* L& n2 N* t# ?+ uusing System;* t, M" d* A5 y/ t
namespace PowerShellDemo- K: Z0 V) E: n/ a
{* v+ g( J/ [6 Y5 s
    public class PowerShellDemo& J5 I0 r# D" n& f- `# W; J
    {+ G. V0 K3 X6 U# N7 K7 ?6 i& |
        public void Greet()
/ S) {6 \0 p& v& [6 D9 r2 e        {
: s- H& L0 j/ E$ ^% |            Console.WriteLine("Hello!");& x4 \- X. P2 ?4 C9 J1 Z
        }; i( ]8 L# {' d, E7 S
    }
3 L& l7 _! U4 d# A}  H; g& q1 C8 G. h
复制代码! k3 H3 }7 P9 N" D: F! j0 A
然后将其导入到PowerShell会话中,并使用其函数或者属性。3 f, _1 a* j, t4 ^0 |, h
Add-Type –Path “D:\PowerShellDemo\PowerShellDemo.dll”
/ e7 _4 l/ D3 C8 C1 O; M$obj = New-Object PowerShellDemo.PowerShellDemo
) I: n7 v; Y% u/ d: ]$obj.Greet()9 R! E8 D! ^$ T! g' Z, V) |- T5 |
以上调用的输出是Hello字符串.
0 G. z* j. V2 @. F( n9 u1 \  _5 ~  如此容易就能使用.Net的托管程序集,必然为它招徕一大票簇拥。
7 o0 j0 ^% z2 T. I# @与贵族COM为伍
% I. B9 G0 C( S1 Y8 TCOM就像没落的贵族一样,虽然过气,但那个范儿还在。作为遗产,它们还在放光发热。PowerShell没有嫌弃它,而是选择与他们兼容。这也让现在依旧战斗在Native C++的程序员颇为欣慰。PowerShell对COM的访问方式是通过其ProgID来进行。示例如下:
. _" ^; C& v) u复制代码
' {6 A" i8 c4 n8 |0 G$ie = New-Object -ComObject InternetExplorer.Application
: p% K: b  C) l. U) L  ]+ @$ie.Visible = $true) n  Q. T; Q/ Y* U  }% H, n$ ^0 S( m0 K7 }
$ie.Navigate(“www.bing.com”)! q, |$ C5 k7 g/ d
$ie.Quit()
. w/ C9 v! K2 ~5 q* r+ |复制代码" _+ w9 t3 V9 f) A
以上这个示例演示了对IE的启动、显示、导航和退出等操作,非常简便。与COM的良好关系,也让PowerShell操作一些系统接口变得简单而其直接。这绝对是个加分的设计。 ' q) N# h. K8 w  x  U4 a
与实力派WMI结盟, O2 n8 M# N$ g) `# @2 o, a$ I
  WMI是访问本机和域内标准资源的强大武器,接管了WMI的资源访问,PowerShell也从此迈入豪门。它没有做多余的工作,只是轻巧的通过几个WMIObejct命令,就拥有了WMI的一整套访问机制。对于域内其他机器的访问,甚至不用利用PowerShell的远程基础结构。访问WMI的示例如下:
6 d# e1 J- u3 ~1 h4 [6 m7 R# YGet-WmiObject -Namespace "root\cimv2" -Class Win32_Process
# S$ `$ Y1 ], B% C5 H! J  这个命令的功能跟Get-Process一样,获取本机上正在运行的进程,只是它们得到的结果的形式有一点点小的区别。真正的区别在于当从远程计算机上获取进程信息时,Get-Process必须用Invoke-Command命令,在PowerShell远程基础结构下运行,而Get-WmiObject命令只需加上-ComputerName参数即可。这份从容,是从WMI娘家带来的。9 s2 W3 R; n1 j6 O. M! ?
  擅用WMI,必将大大提高访问本机和远程系统资源的效率。不管你信不信,反正我是信了!5 Q5 r2 h, K, X, \! Q4 Z5 @0 |
结语1 ?0 {4 c# @- J, w0 G2 S/ _
  不管是建立在.Net的基础上,还是兼容COM,再或者是以WMI的方式访问资源,PowerShell一心想成为多面胶,成为大众而非小众的朋友。作为IT人士的你,有没有别粘(电)到?
* c8 J  s/ Y3 R1 d: s& G/ I
% {' ?4 u8 d! |7 o' k3 ^: m  c7 E, Y% z0 W5 j

1 i- A0 n) C. \) B3 T4 g
上一篇
下一篇


左岸云烟 「出类拔萃」 2018-5-1 15:56 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

曾梦想仗剑走天涯,因太穷放弃了计划#j328:
安心的味道 「锋芒初露」 2018-5-4 21:58 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

看了楼主的帖子,不由得精神为之一振,自觉七经八脉为之一畅,七窍倒也开了六巧半,自古英雄出少年,楼主年纪轻轻,就有经天纬地之才,定国安邦之智,古人云,卧龙凤雏得一而安天下,而今,天佑我大中华,沧海桑田5000年,中华神州平地一声雷,飞沙走石,大舞迷天,朦胧中,只见顶天立地一金甲天神立于天地间,这人英雄手持双斧,二目如电,一斧下去,混沌初开,二斧下去,女娲造人,三斧下去,小生倾倒.得此大英雄,实耐之幸也,民之福也,怎不叫人喜极而泣.......古人有少年楼主说为证,少年之楼主如红日初升,其道大光;河出伏流,一泻汪洋;潜龙腾渊,鳞爪飞扬;乳虎啸谷,百兽震惶;鹰隼试翼,风尘吸张;奇花初胎,皇皇;干将发硎,有作其芒;天戴其苍,地履其黄;纵有千古,横有八荒;小生对楼主之仰慕如滔滔江水连绵不绝,海枯石烂,天崩地裂,永不变心.
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

关于本站|大事记|小黑屋|古黑论 网站统计

GMT+8, 2021-6-16 20:38 , Processed in 0.032477 second(s), 19 queries , Redis On.

© 2015-2021 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表