PowerShell可以設(shè)計的大而全,重新實現(xiàn)一切;也可以像現(xiàn)在一樣設(shè)計成膠水語言,利用現(xiàn)有的資源。特別是,與.Net、COM和WMI三大豪門的聯(lián)姻,使得PowerShell必將在Windows世界里大放光彩。
與新銳.Net聯(lián)姻
在Windows的世界里,.Net代表著現(xiàn)在和將來,是新生力量。與.Net聯(lián)姻,就意味著榜上了粗腿,邁上了快車道。號稱基于.Net Framework,那么使用.Net的基類就易如反掌?;静襟E如下:1、添加類所在程序集;2、創(chuàng)建類的實例;3、調(diào)用實例的函數(shù)或者屬性。以StringBuilder類為例,代碼如下:
復(fù)制代碼 代碼如下:
Add-Type -AssemblyName mscorlib
$str = New-Object System.Text.StringBuilder
$str.Append("Hello")
$str.ToString()
其結(jié)果是輸出Hello字符串。
其實最讓人開心的,是PowerShell能夠使用自定義的.Net類庫。這意味著我們的產(chǎn)品或者工具都能在PowerShell中繼續(xù)有效?;静襟E是:寫一個類庫,編譯成DLL,導(dǎo)入到PowerShell會話中,然后所定義的函數(shù)和屬性都可以使用了。示例如下:
首先寫好代碼,編譯成DLL,假設(shè)路徑是D:\PowerShellDemo\PowerShellDemo.dll。
復(fù)制代碼 代碼如下:
using System;
namespace PowerShellDemo
{
public class PowerShellDemo
{
public void Greet()
{
Console.WriteLine("Hello!");
}
}
}
然后將其導(dǎo)入到PowerShell會話中,并使用其函數(shù)或者屬性。
復(fù)制代碼 代碼如下:
Add-Type –Path “D:\PowerShellDemo\PowerShellDemo.dll”
$obj = New-Object PowerShellDemo.PowerShellDemo
$obj.Greet()
以上調(diào)用的輸出是Hello字符串.
如此容易就能使用.Net的托管程序集,必然為它招徠一大票簇擁。
與貴族COM為伍
COM就像沒落的貴族一樣,雖然過氣,但那個范兒還在。作為遺產(chǎn),它們還在放光發(fā)熱。PowerShell沒有嫌棄它,而是選擇與他們兼容。這也讓現(xiàn)在依舊戰(zhàn)斗在Native C++的程序員頗為欣慰。PowerShell對COM的訪問方式是通過其ProgID來進行。示例如下:
復(fù)制代碼 代碼如下:
$ie = New-Object -ComObject InternetExplorer.Application
$ie.Visible = $true
$ie.Navigate(“www.bing.com”)
$ie.Quit()
以上這個示例演示了對IE的啟動、顯示、導(dǎo)航和退出等操作,非常簡便。與COM的良好關(guān)系,也讓PowerShell操作一些系統(tǒng)接口變得簡單而其直接。這絕對是個加分的設(shè)計。
與實力派WMI結(jié)盟
WMI是訪問本機和域內(nèi)標(biāo)準(zhǔn)資源的強大武器,接管了WMI的資源訪問,PowerShell也從此邁入豪門。它沒有做多余的工作,只是輕巧的通過幾個WMIObejct命令,就擁有了WMI的一整套訪問機制。對于域內(nèi)其他機器的訪問,甚至不用利用PowerShell的遠程基礎(chǔ)結(jié)構(gòu)。訪問WMI的示例如下:
復(fù)制代碼 代碼如下:
Get-WmiObject -Namespace "root\cimv2" -Class Win32_Process
這個命令的功能跟Get-Process一樣,獲取本機上正在運行的進程,只是它們得到的結(jié)果的形式有一點點小的區(qū)別。真正的區(qū)別在于當(dāng)從遠程計算機上獲取進程信息時,Get-Process必須用Invoke-Command命令,在PowerShell遠程基礎(chǔ)結(jié)構(gòu)下運行,而Get-WmiObject命令只需加上-ComputerName參數(shù)即可。這份從容,是從WMI娘家?guī)淼摹?/p>
擅用WMI,必將大大提高訪問本機和遠程系統(tǒng)資源的效率。不管你信不信,反正我是信了!
結(jié)語
不管是建立在.Net的基礎(chǔ)上,還是兼容COM,再或者是以WMI的方式訪問資源,PowerShell一心想成為多面膠,成為大眾而非小眾的朋友。作為IT人士的你,有沒有別粘(電)到?
您可能感興趣的文章:- 使用PowerShell .Net獲取電腦中的UUID
- PowerShell中使用.NET將程序集加入全局程序集緩存
- Powershell中可以使用的.Net實用靜態(tài)方法
- Powershell小技巧之查看安裝的.Net framework版本信息
- PowerShell中調(diào)用.NET對象的靜態(tài)方法、靜態(tài)屬性和類方法、類屬性例子
- PowerShell中查看當(dāng)前版本、Windows版本、.NET版本信息的代碼
- 一個ASP.Net下的WebShell實例
- PowerShell 定時執(zhí)行.Net(C#)程序的方法
- ASP.NET下使用WScript.Shell執(zhí)行命令
- 如何使用 Shell 腳本執(zhí)行 .NET Core 應(yīng)用