下一代Shell腳本語(yǔ)言,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(以下簡(jiǎn)稱(chēng)PS)
安裝完成后,打開(kāi)程序菜單,看來(lái)M$習(xí)慣還是保持的不錯(cuò)的,幫助很詳細(xì)
發(fā)行說(shuō)明
快速參考
入門(mén)
用戶(hù)指南
其他不做細(xì)表
看過(guò)文檔以后,發(fā)現(xiàn)比較重要的一點(diǎn)是,PS是用.Net編寫(xiě),并且完全支持.Net的任何對(duì)象。
.Net!什么?
祭出屠龍刀 Reflector 打開(kāi) PowerShell的主程序及目錄下的所有DLL,失?。篊LR頭無(wú)效,沒(méi)有一個(gè)被正確反編譯了的,不是說(shuō)用PS是由 .Net編寫(xiě)的么?怎么...M$在忽悠我們?
那他是如何操作.Net對(duì)象的呢?
那么再來(lái),祭出PE Explorer 打開(kāi) PS的主程序 看了下其API導(dǎo)入,發(fā)現(xiàn) PS 的主程序。
引用了mscoree.dll 的函數(shù) CorBindToRuntimeEx
MSDN是這樣解釋 CorbindToRuntimeEx 的 : 使非托管主機(jī)能夠?qū)⒐舱Z(yǔ)言運(yùn)行庫(kù)加載到進(jìn)程中。
這說(shuō)明了PS在運(yùn)行前是以非托管代碼執(zhí)行了必要的初始化,然后才進(jìn)入CLR的,也可能是建立一個(gè)混合環(huán)境,方面托管和非托管代碼交互執(zhí)行;那么,宿主程序在哪呢?
用 Windows 的搜索功能搜索關(guān)鍵字 "PowerShell",失敗,找出來(lái)的全部是程序目錄里的東西!~~~
仔細(xì)想了一下,決定從根源著手;Windows的補(bǔ)丁程序是使用CAB打包的,因此可以直接用 WinRAR打開(kāi),用WinRAR打開(kāi) WindowsXP-KB926140-x86-CHS.exe,找到了我需要的東西 "_sfx_manifest_",用文本格式打開(kāi)查看,發(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"
......
這充分說(shuō)明了,宿主程序是存在的,它就是 Microsoft.PowerShell.ConsoleHost.dll,那么,為什么我找不到這些文件呢?
再考慮以下,覺(jué)得這些東西可能在 GAC 中,打開(kāi)GAC目錄查看;哈,他們都在那呢?
但是用 Reflector 仍然有問(wèn)題!Reflector 找不到這些程序集~~~,用 Open Cache 同樣找不到!!!
沒(méi)法,就從補(bǔ)丁包里把文件解出來(lái)看吧,弄出來(lái)再用 Reflector 打開(kāi),傻了,"File is not a portable executable. DOS header does not contain 'MZ' signature.",文件頭不對(duì);用記事本打開(kāi)看看,發(fā)現(xiàn)文件頭居然為 "PA19",這是什么格式的文件,為什么我從來(lái)沒(méi)有見(jiàn)過(guò)?NGEN生成的本地代碼?或者是加密過(guò)的Managed DLL?
先不管這個(gè),找其他辦法弄出 GAC里面的程序集好了。
GAC目錄已經(jīng)被一個(gè) Shell Extension所接管了,那么現(xiàn)在要做的就是把目錄里面的文件弄出來(lái),我先后嘗試了對(duì)話框,復(fù)制文件夾,未果,最后用一條命令行搞定了:
xcopy /e C:\Windows\assembly\GAC_MSIL G:\GAC_MSIL
然后在拷貝出來(lái)的目錄中尋找需要的程序集。哈,現(xiàn)在我們可以看PS的代碼了,這將是很愉快的一件事。
另外,我通過(guò) _sfx_manifest_ 文件和 Reflector 分析程序集引用發(fā)現(xiàn)多了一個(gè)程序集 "System.Management.Automation.dll",其EXE備注為"Microsoft Command-Line Shell Engine Core Assembly"
我將這些解出來(lái)的程序集打包上傳,點(diǎn)這里下載,我們可以Reflector分析他的代碼,或者將他和PS的主程序一起打包用以實(shí)現(xiàn) XCOPY 部署,用以做為產(chǎn)品的腳本系統(tǒng)。
到這里,我們已經(jīng)把代碼程序集都搞出來(lái)了,我們來(lái)看一下 PowerShell 到底是什么東西,能做什么:
由于以下原因,Windows PowerShell 使用它自己的語(yǔ)言,而不是重用現(xiàn)有的語(yǔ)言:
•Windows PowerShell 需要用于管理 .NET 對(duì)象的語(yǔ)言。
•該語(yǔ)言需要為使用 cmdlet 提供一致的環(huán)境。
•該語(yǔ)言需要支持復(fù)雜的任務(wù),而不會(huì)使簡(jiǎn)單的任務(wù)變得更復(fù)雜。
•該語(yǔ)言需要與在 .NET 編程中使用的高級(jí)語(yǔ)言(如 C#)一致。
PS語(yǔ)言的一些特性:
1.高級(jí)語(yǔ)言的部分特性(變量、數(shù)組、運(yùn)算符、哈希表、函數(shù),條件語(yǔ)句,循環(huán)語(yǔ)句...)
2.能直接在文件系統(tǒng)、注冊(cè)表、證書(shū)存儲(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.可以直接訪問(wèn) WMI 對(duì)象。
8.可以編寫(xiě) .Net 程序集來(lái)擴(kuò)展PS,通過(guò)擴(kuò)展,幾乎可以無(wú)限的擴(kuò)充 PS 的功能。
其他特性請(qǐng)參考PowerShell的幫助文檔。
常見(jiàn)的命令:
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 來(lái)結(jié)尾吧,明天,我們?cè)賮?lái)進(jìn)一步研究 PS:
使用 輸出命令
Write-Output "Hello World!"使用 .Net 來(lái)輸出
[System.Console]::ForegroundColor = [System.ConsoleColor]::Blue
[System.Console]::WriteLine("Hello World!") 真是強(qiáng)大的Shell!
PS:
我一直都希望M$能夠提供一個(gè)無(wú)圖形界面的,從目前看來(lái)似乎是時(shí)間還早了,但是現(xiàn)在是朝著好的方向發(fā)展,PowerShell讓我看到了希望,說(shuō)不定PowerShell就是將來(lái)的無(wú)圖形界面 Server 的雛形。
所以,我大膽預(yù)測(cè),Vienna(繼Vista之后的下一個(gè)OS,完全重寫(xiě)內(nèi)核)將會(huì)是內(nèi)核和圖形界面分離,而非現(xiàn)在基于NT的內(nèi)核,內(nèi)核與圖形界面將湊在一起;并且將會(huì)有一個(gè)無(wú)圖形界面的Server和目前的圖形Server,兩者將在很長(zhǎng)一段時(shí)間內(nèi)并存,至于誰(shuí)會(huì)被取代,我覺(jué)得似乎是沒(méi)可能了。
因此,我能想象的到的東西大概是,微軟會(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è)營(yíng)銷(xiāo)更快人一步
日前,有相關(guān)報(bào)道顯示,現(xiàn)在我國(guó)移動(dòng)上網(wǎng)用戶(hù)處在爆發(fā)性增長(zhǎng)階段,預(yù)測(cè)今年移動(dòng)互聯(lián)網(wǎng)用戶(hù)將突破2億,而且還有6億多的潛在用戶(hù)2009-08-08
微軟推DreamSpark計(jì)劃為學(xué)生提供免費(fèi)軟件下載地址
2008-02-02
互聯(lián)網(wǎng)寒冬來(lái)臨 企業(yè)節(jié)流有訣竅
今年下半年,由次貸危機(jī)引起的金融危機(jī)波及全球,對(duì)大部分企業(yè)產(chǎn)生了許多不利影響,許多企業(yè)出現(xiàn)了資金周轉(zhuǎn)困難的情況,因此“開(kāi)源節(jié)流”成為眾多企業(yè)的生存手段。2008-11-11
2月份停止Google Adsense下線推介 將在中國(guó)地區(qū)停止投放
2008-01-01
域名深耕電子商務(wù) 幫助企業(yè)厚積而薄發(fā)
2009-07-07
數(shù)字奧運(yùn)引發(fā)建站熱 主機(jī)市場(chǎng)供求兩旺
2008-07-07
網(wǎng)店辦照試行 無(wú)本經(jīng)營(yíng)亮劍何方
自8月1日起,北京工商局在國(guó)內(nèi)首開(kāi)新規(guī),營(yíng)利性的網(wǎng)店要領(lǐng)取營(yíng)業(yè)執(zhí)照后才能開(kāi)展經(jīng)營(yíng)。2008-08-08

