下一代Shell腳本語言,Windows Power Shell!
今天回家照常瀏覽了下cnbeta.com,看看有什么新鮮的內(nèi)容。
于是乎,就看到了那么一條 Windows Power Shell 1.0
恩,我對(duì)這個(gè)東西很感興趣,畢竟Windows目前的Shell是在是太弱了,立馬從微軟站點(diǎn)下載,安裝,發(fā)現(xiàn)其是以補(bǔ)丁包的形式發(fā)布的,并非常規(guī)的MSI,那么,我估計(jì)Vista已經(jīng)自帶了這個(gè)東西了。
下面將嘗試了解PowerShell(以下簡稱PS)
安裝完成后,打開程序菜單,看來M$習(xí)慣還是保持的不錯(cuò)的,幫助很詳細(xì)
發(fā)行說明
快速參考
入門
用戶指南
其他不做細(xì)表
看過文檔以后,發(fā)現(xiàn)比較重要的一點(diǎn)是,PS是用.Net編寫,并且完全支持.Net的任何對(duì)象。
.Net!什么?
祭出屠龍刀 Reflector 打開 PowerShell的主程序及目錄下的所有DLL,失敗:CLR頭無效,沒有一個(gè)被正確反編譯了的,不是說用PS是由 .Net編寫的么?怎么...M$在忽悠我們?
那他是如何操作.Net對(duì)象的呢?
那么再來,祭出PE Explorer 打開 PS的主程序 看了下其API導(dǎo)入,發(fā)現(xiàn) PS 的主程序。
引用了mscoree.dll 的函數(shù) CorBindToRuntimeEx
MSDN是這樣解釋 CorbindToRuntimeEx 的 : 使非托管主機(jī)能夠?qū)⒐舱Z言運(yùn)行庫加載到進(jìn)程中。
這說明了PS在運(yùn)行前是以非托管代碼執(zhí)行了必要的初始化,然后才進(jìn)入CLR的,也可能是建立一個(gè)混合環(huán)境,方面托管和非托管代碼交互執(zhí)行;那么,宿主程序在哪呢?
用 Windows 的搜索功能搜索關(guān)鍵字 "PowerShell",失敗,找出來的全部是程序目錄里的東西!~~~
仔細(xì)想了一下,決定從根源著手;Windows的補(bǔ)丁程序是使用CAB打包的,因此可以直接用 WinRAR打開,用WinRAR打開 WindowsXP-KB926140-x86-CHS.exe,找到了我需要的東西 "_sfx_manifest_",用文本格式打開查看,發(fā)現(xiàn)了一些我需要的東西:
"microsoft.powershell.consolehost.dll" = "_sfx_0008._p", "powershell.exe"
"system.management.automation.dll" = "_sfx_0009._p", "microsoft.powershell.consolehost.dll"
"microsoft.powershell.security.dll" = "_sfx_0010._p", "system.management.automation.dll"
......
這充分說明了,宿主程序是存在的,它就是 Microsoft.PowerShell.ConsoleHost.dll,那么,為什么我找不到這些文件呢?
再考慮以下,覺得這些東西可能在 GAC 中,打開GAC目錄查看;哈,他們都在那呢?
但是用 Reflector 仍然有問題!Reflector 找不到這些程序集~~~,用 Open Cache 同樣找不到!!!
沒法,就從補(bǔ)丁包里把文件解出來看吧,弄出來再用 Reflector 打開,傻了,"File is not a portable executable. DOS header does not contain 'MZ' signature.",文件頭不對(duì);用記事本打開看看,發(fā)現(xiàn)文件頭居然為 "PA19",這是什么格式的文件,為什么我從來沒有見過?NGEN生成的本地代碼?或者是加密過的Managed DLL?
先不管這個(gè),找其他辦法弄出 GAC里面的程序集好了。
GAC目錄已經(jīng)被一個(gè) Shell Extension所接管了,那么現(xiàn)在要做的就是把目錄里面的文件弄出來,我先后嘗試了對(duì)話框,復(fù)制文件夾,未果,最后用一條命令行搞定了:

然后在拷貝出來的目錄中尋找需要的程序集。哈,現(xiàn)在我們可以看PS的代碼了,這將是很愉快的一件事。
另外,我通過 _sfx_manifest_ 文件和 Reflector 分析程序集引用發(fā)現(xiàn)多了一個(gè)程序集 "System.Management.Automation.dll",其EXE備注為"Microsoft Command-Line Shell Engine Core Assembly"
我將這些解出來的程序集打包上傳,點(diǎn)這里下載,我們可以Reflector分析他的代碼,或者將他和PS的主程序一起打包用以實(shí)現(xiàn) XCOPY 部署,用以做為產(chǎn)品的腳本系統(tǒng)。
到這里,我們已經(jīng)把代碼程序集都搞出來了,我們來看一下 PowerShell 到底是什么東西,能做什么:
由于以下原因,Windows PowerShell 使用它自己的語言,而不是重用現(xiàn)有的語言:
•Windows PowerShell 需要用于管理 .NET 對(duì)象的語言。
•該語言需要為使用 cmdlet 提供一致的環(huán)境。
•該語言需要支持復(fù)雜的任務(wù),而不會(huì)使簡單的任務(wù)變得更復(fù)雜。
•該語言需要與在 .NET 編程中使用的高級(jí)語言(如 C#)一致。
PS語言的一些特性:
1.高級(jí)語言的部分特性(變量、數(shù)組、運(yùn)算符、哈希表、函數(shù),條件語句,循環(huán)語句...)
2.能直接在文件系統(tǒng)、注冊(cè)表、證書存儲(chǔ)區(qū)、驅(qū)動(dòng)器中導(dǎo)航,而導(dǎo)航方式和我們熟悉的DOS導(dǎo)航方式極相似。
3.強(qiáng)大的通配符和字符串搜索功能
4.可以創(chuàng)建和操作.Net對(duì)象 和 COM 對(duì)象
5.基于對(duì)象管道功能使用任何對(duì)象(包括.Net和COM對(duì)象)與目標(biāo)交互
7.可以直接訪問 WMI 對(duì)象。
8.可以編寫 .Net 程序集來擴(kuò)展PS,通過擴(kuò)展,幾乎可以無限的擴(kuò)充 PS 的功能。
其他特性請(qǐng)參考PowerShell的幫助文檔。
常見的命令:
Get-Date - 獲得當(dāng)前日期。
Get-Help - 獲取幫助。
Get-Member - 查看對(duì)象結(jié)構(gòu)(可用此命令查看 .Net 對(duì)象的成員)。
Get-WmiObject - 獲取 WMI 對(duì)象。
Get-Process - 獲取進(jìn)程對(duì)象。
Get-Service - 獲取Windows服務(wù)對(duì)象。
現(xiàn)在已經(jīng)是月黑風(fēng)高催人眠,只能等明天繼續(xù)研究了;最后,我們以經(jīng)典的 Hello World 來結(jié)尾吧,明天,我們?cè)賮磉M(jìn)一步研究 PS:
使用 輸出命令

使用 .Net 來輸出


真是強(qiáng)大的Shell!
PS:
我一直都希望M$能夠提供一個(gè)無圖形界面的,從目前看來似乎是時(shí)間還早了,但是現(xiàn)在是朝著好的方向發(fā)展,PowerShell讓我看到了希望,說不定PowerShell就是將來的無圖形界面 Server 的雛形。
所以,我大膽預(yù)測(cè),Vienna(繼Vista之后的下一個(gè)OS,完全重寫內(nèi)核)將會(huì)是內(nèi)核和圖形界面分離,而非現(xiàn)在基于NT的內(nèi)核,內(nèi)核與圖形界面將湊在一起;并且將會(huì)有一個(gè)無圖形界面的Server和目前的圖形Server,兩者將在很長一段時(shí)間內(nèi)并存,至于誰會(huì)被取代,我覺得似乎是沒可能了。
因此,我能想象的到的東西大概是,微軟會(huì)將 Windows PE 升級(jí),使其使用 Vienna 的核心,并且將會(huì)包含 .Net Framework X.Y,同時(shí)分為字符界面和圖形界面。這樣,Windows PE 將會(huì)成為一個(gè)極為順手的系統(tǒng)診斷、故障排除工具。
Windows Server 在和 Unix/Linux Server 的距離在拉近。
相關(guān)文章
手機(jī)郵融入移動(dòng)商務(wù) 企業(yè)營銷更快人一步
日前,有相關(guān)報(bào)道顯示,現(xiàn)在我國移動(dòng)上網(wǎng)用戶處在爆發(fā)性增長階段,預(yù)測(cè)今年移動(dòng)互聯(lián)網(wǎng)用戶將突破2億,而且還有6億多的潛在用戶2009-08-08微軟推DreamSpark計(jì)劃為學(xué)生提供免費(fèi)軟件下載地址
2008-02-02互聯(lián)網(wǎng)寒冬來臨 企業(yè)節(jié)流有訣竅
今年下半年,由次貸危機(jī)引起的金融危機(jī)波及全球,對(duì)大部分企業(yè)產(chǎn)生了許多不利影響,許多企業(yè)出現(xiàn)了資金周轉(zhuǎn)困難的情況,因此“開源節(jié)流”成為眾多企業(yè)的生存手段。2008-11-112月份停止Google Adsense下線推介 將在中國地區(qū)停止投放
2008-01-01域名深耕電子商務(wù) 幫助企業(yè)厚積而薄發(fā)
2009-07-07數(shù)字奧運(yùn)引發(fā)建站熱 主機(jī)市場(chǎng)供求兩旺
2008-07-07