欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

下一代Shell腳本語言,Windows Power Shell!

 更新時間:2006年12月18日 00:00:00   投稿:mdxy-dxy  
這篇文章主要介紹了下一代Shell腳本語言,Windows Power Shell

今天回家照常瀏覽了下cnbeta.com,看看有什么新鮮的內(nèi)容。
   于是乎,就看到了那么一條 Windows Power Shell 1.0
   恩,我對這個東西很感興趣,畢竟Windows目前的Shell是在是太弱了,立馬從微軟站點下載,安裝,發(fā)現(xiàn)其是以補丁包的形式發(fā)布的,并非常規(guī)的MSI,那么,我估計Vista已經(jīng)自帶了這個東西了。
   下面將嘗試了解PowerShell(以下簡稱PS)
      安裝完成后,打開程序菜單,看來M$習慣還是保持的不錯的,幫助很詳細
      發(fā)行說明
      快速參考
      入門
      用戶指南
      其他不做細表

   看過文檔以后,發(fā)現(xiàn)比較重要的一點是,PS是用.Net編寫,并且完全支持.Net的任何對象。
   .Net!什么?
   祭出屠龍刀 Reflector 打開 PowerShell的主程序及目錄下的所有DLL,失?。篊LR頭無效,沒有一個被正確反編譯了的,不是說用PS是由 .Net編寫的么?怎么...M$在忽悠我們?


   那他是如何操作.Net對象的呢?
   那么再來,祭出PE Explorer 打開 PS的主程序 看了下其API導入,發(fā)現(xiàn) PS 的主程序。
   引用了mscoree.dll 的函數(shù) CorBindToRuntimeEx
   MSDN是這樣解釋 CorbindToRuntimeEx 的 : 使非托管主機能夠?qū)⒐舱Z言運行庫加載到進程中。
   這說明了PS在運行前是以非托管代碼執(zhí)行了必要的初始化,然后才進入CLR的,也可能是建立一個混合環(huán)境,方面托管和非托管代碼交互執(zhí)行;那么,宿主程序在哪呢?


   用 Windows 的搜索功能搜索關(guān)鍵字 "PowerShell",失敗,找出來的全部是程序目錄里的東西!~~~
   仔細想了一下,決定從根源著手;Windows的補丁程序是使用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 同樣找不到!!!
   沒法,就從補丁包里把文件解出來看吧,弄出來再用 Reflector 打開,傻了,"File is not a portable executable. DOS header does not contain 'MZ' signature.",文件頭不對;用記事本打開看看,發(fā)現(xiàn)文件頭居然為 "PA19",這是什么格式的文件,為什么我從來沒有見過?NGEN生成的本地代碼?或者是加密過的Managed DLL?


   先不管這個,找其他辦法弄出 GAC里面的程序集好了。
   GAC目錄已經(jīng)被一個 Shell Extension所接管了,那么現(xiàn)在要做的就是把目錄里面的文件弄出來,我先后嘗試了對話框,復制文件夾,未果,最后用一條命令行搞定了:

xcopy /e C:\Windows\assembly\GAC_MSIL G:\GAC_MSIL


   然后在拷貝出來的目錄中尋找需要的程序集。哈,現(xiàn)在我們可以看PS的代碼了,這將是很愉快的一件事。
   另外,我通過 _sfx_manifest_ 文件和 Reflector 分析程序集引用發(fā)現(xiàn)多了一個程序集 "System.Management.Automation.dll",其EXE備注為"Microsoft Command-Line Shell Engine Core Assembly"
   我將這些解出來的程序集打包上傳,點這里下載,我們可以Reflector分析他的代碼,或者將他和PS的主程序一起打包用以實現(xiàn) XCOPY 部署,用以做為產(chǎn)品的腳本系統(tǒng)。


   到這里,我們已經(jīng)把代碼程序集都搞出來了,我們來看一下 PowerShell 到底是什么東西,能做什么:
      由于以下原因,Windows PowerShell 使用它自己的語言,而不是重用現(xiàn)有的語言:
         •Windows PowerShell 需要用于管理 .NET 對象的語言。
         •該語言需要為使用 cmdlet 提供一致的環(huán)境。
         •該語言需要支持復雜的任務(wù),而不會使簡單的任務(wù)變得更復雜。 
         •該語言需要與在 .NET 編程中使用的高級語言(如 C#)一致。


      PS語言的一些特性:
         1.高級語言的部分特性(變量、數(shù)組、運算符、哈希表、函數(shù),條件語句,循環(huán)語句...)
         2.能直接在文件系統(tǒng)、注冊表、證書存儲區(qū)、驅(qū)動器中導航,而導航方式和我們熟悉的DOS導航方式極相似。
         3.強大的通配符和字符串搜索功能
         4.可以創(chuàng)建和操作.Net對象 和 COM 對象
         5.基于對象管道功能使用任何對象(包括.Net和COM對象)與目標交互
         7.可以直接訪問 WMI 對象。
         8.可以編寫 .Net 程序集來擴展PS,通過擴展,幾乎可以無限的擴充 PS 的功能。

      其他特性請參考PowerShell的幫助文檔。
      
      常見的命令:
         Get-Date            - 獲得當前日期。
         Get-Help            - 獲取幫助。
         Get-Member       - 查看對象結(jié)構(gòu)(可用此命令查看 .Net 對象的成員)。
         Get-WmiObject   - 獲取 WMI 對象。
         Get-Process         - 獲取進程對象。
         Get-Service         - 獲取Windows服務(wù)對象。


   現(xiàn)在已經(jīng)是月黑風高催人眠,只能等明天繼續(xù)研究了;最后,我們以經(jīng)典的 Hello World 來結(jié)尾吧,明天,我們再來進一步研究 PS:
      使用 輸出命令

Write-Output "Hello World!"

      使用 .Net 來輸出

[System.Console]::ForegroundColor = [System.ConsoleColor]::Blue
[System.Console]::WriteLine(
"Hello World!")

   真是強大的Shell!


PS: 
   我一直都希望M$能夠提供一個無圖形界面的,從目前看來似乎是時間還早了,但是現(xiàn)在是朝著好的方向發(fā)展,PowerShell讓我看到了希望,說不定PowerShell就是將來的無圖形界面 Server 的雛形。
   所以,我大膽預(yù)測,Vienna(繼Vista之后的下一個OS,完全重寫內(nèi)核)將會是內(nèi)核和圖形界面分離,而非現(xiàn)在基于NT的內(nèi)核,內(nèi)核與圖形界面將湊在一起;并且將會有一個無圖形界面的Server和目前的圖形Server,兩者將在很長一段時間內(nèi)并存,至于誰會被取代,我覺得似乎是沒可能了。
   因此,我能想象的到的東西大概是,微軟會將 Windows PE 升級,使其使用 Vienna 的核心,并且將會包含 .Net Framework X.Y,同時分為字符界面和圖形界面。這樣,Windows PE 將會成為一個極為順手的系統(tǒng)診斷、故障排除工具。
   Windows Server 在和 Unix/Linux Server 的距離在拉近。

相關(guān)文章

最新評論