引子
一直很羨慕Linux的命令提示符(當然他們叫Shell)。正則表達式,管道,各種神奇的命令,組合起來就能高效完成很多復雜的任務。效率實在是高。流了n年的哈喇子以后,終于有幸用上了Win7,邂逅了cmd的升級版:Windows PowerShell。從此暗爽無比,原來Windows下也有這樣的利器呀~
看看下面的Windows腳本,不到15行有效代碼。在Win7下只要右擊腳本文件,選擇Run with PowerShell,就會自動找到最占內存的10個進程,然后將它們占用的內存畫成一個三維餅圖,如下圖所示。
# write information to the excel file
$i = 0
$first10 = (ps | sort ws -Descending | select -first 10)
$first10 | foreach -Process {$i++; $objWorksheet.Cells.Item($i,1) = $_.name; $objWorksheet.Cells.Item($i,2) = $_.ws}
$otherMem = (ps | measure ws -s).Sum - ($first10 | measure ws -s).Sum
$objWorksheet.Cells.Item(11,1) = "Others"; $objWorksheet.Cells.Item(11,2) = $otherMem
# draw the pie chart
$objCharts = $objWorksheet.ChartObjects()
$objChart = $objCharts.Add(0, 0, 500, 300)
$objChart.Chart.SetSourceData($objWorksheet.range("A1:B11"), 2)
$objChart.Chart.ChartType = 70
$objChart.Chart.ApplyDataLabels(5)
(1. 這個腳本調用了Excel的COM庫。 2. 當然從命令耦合的角度來看,輸出成文本格式更有利,但這個例子主要想說明PowerShell的強大以及微軟產品優異的復用性。 3. 要手動啟動PowerShell,可以在開始菜單的搜索框中直接鍵入PowerShell回車即可)
簡單領略PowerShell的強大之后,下文就從幾個方面介紹一下PowerShell相對于以往版本的命令提示符甚至Linux Shell的優勢。
Cmdlet + Regex + Pipeline + ...
以往cmd相對于Shell有很多不足,比如命令偏少,部分命令功能偏弱,對正則表達式不支持等等。但現在PowerShell一下趕上來不少。2.0 RTM版內建支持414個命令(術語稱為cmdlet),支持正則表達式,強大的管道應用(其實管道本身的功能和以前差不多,關鍵是冒出來一堆能用管道的命令,比如more, sort, foreach等等),和系統的聯系也比以前緊密了很多。
舉幾個例子來說明:
dir registry::HKEY_CURRENT_USER可以直接顯示注冊表相應位置的內容,可以看到dir的功能改進了不少。
ps | sort ws -Descending | select -first 10可以顯示占用內存最大的10個進程,可以看到管道的靈活應用。
dir -Name | ? {$_ -match "(?<num>.).*(/k<num>)"}可以顯示出當前目錄下文件名有重復字符的文件。比如abcda.efg,而abcd.efg則不會顯示出來??梢钥吹絇owerShell對正則表達式的支持相當強大。(確切的說嚴格的正則表達式 已經無法實現這樣的效果,需要上下文無關文法 才能夠支持。)
以前為了演示Linux Shell的強大,Stephenjy發了一個自己的截圖,在遇見PowerShell前覺得好神奇,所幸現在也可以實現了。:-)
(為了節約顯示空間,PowerShell的部分顯示結果被刪除,但這個Prompt效果可以用以下腳本驗證: function prompt {"($env:username)-($env:computername)-(`$?: $?)-(jobs: $((get-job | measure).Count))-($(get-location))`n(! $(((history)[-1]).ID + 1))->"})
大殺器 - 面向對象
Linux的設計思想決定所有的輸入和輸出都盡可能是文本格式,這樣可以方便各進程間的合作。同樣這也要求各個程序提供一定強度的文本解析能力。但Windows的思想與此不同,PowerShell中很多輸入輸出都不是普通的文本(plain text),而是一個個對象(objects)。因此與其說PowerShell是一種交互環境,不如說它是一種強大語言的Runtime,而這種語言甚至是面向對象的。
比如當鍵入get-process查看當前進程列表時,系統返回的是這樣的列表:
雖然看似一般的格式化文本,但其實這是一個數組,而每個數組元素又是Process類型的對象。同.NET一脈相承,PowerShell中的所有的類都繼承自Object,且支持GetType()函數。因此我們可以執行(get-process).GetType()來看看它的類型:
站在巨人的肩膀上 - 無縫調用.NET/COM
.NET Framework中包含了一個異常強大的庫,而微軟為了保證二進制層面上跨語言的兼容性,很多庫都是用COM封裝的。PowerShell的一大特色就是可以直接調用這些庫。比如前面的示例用$objExcel = New-Object -comobject Excel.Application創建了一個Excel對象。而wikipedia上的一個腳本更示范了這種無縫調用的強大。下面這個3句話的腳本的作用是顯示一個RSS源最近的8篇文章的標題。注意其中網絡連接,內容下載,XML解析等工作全部由.NET庫完成,正因為站在巨人的肩膀上,PowerShell在實際使用中往往左右逢源,簡潔高效。
編輯,運行,調試 - IDE
Windows程序開發,尤其是基于微軟技術的開發很爽的一點就是有強大的IDE和專業的文檔作支持。不論是Windows下的Visual Studio還是Linux下的Mono Develop,甚至連PowerShell這樣的語言都有集編輯與調試為一體的IDE:Windows PowerShell ISE。有了自動完成,即時腳本交互,調試甚至遠程調試,PowerShell腳本寫起來“甚爽甚強巨”。當然文檔也是一般的強大,MSDN中關于PowerShell的部分依舊專業浩瀚。
蛋疼的偽裝 - Profile
有了PowerShell以后,很少就去cmd了。不過作為一個蛋疼的裝B男,把PowerShell偽裝成cmd也是挺有樂趣的一件事。不難發現PowerShell和cmd僅僅在圖標,標題,背景色,提示符,以及剛啟動時的顯示文字五個方面不同。圖標和背景色在快捷方式屬性中可以很方便的修改。而標題和提示符的修改就要用到Profile了。所謂Profile就是在每次啟動PowerShell時都首先自動運行的一段腳本。這個腳本的路徑在$profile變量中有設定。只要設定$host.UI.RawUI.WindowTitle為C:/windows/system32/cmd.exe就能將標題偽裝為cmd。而自定義提示符為當前路徑在PowerShell中自然萬分簡單。至于啟動時的顯示文字,只要通過/nologo參數隱藏原有的版本信息,再打印一行cmd中的文字就好了。最終效果如圖:(關于Profile,可以參見這個鏈接)
另:進程級工作調度 亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb 亚洲成人国产精品| 国产亚洲精品美女久久久久| 国产一级揄自揄精品视频| 在线国产精品视频| 国模叶桐国产精品一区| 最新69国产成人精品视频免费| 午夜欧美不卡精品aaaaa| 欧美电影免费看| 精品久久久精品| 欧美国产视频一区二区| 91久久久国产精品| 全亚洲最色的网站在线观看| 日本91av在线播放| 久久久久久69| 综合网日日天干夜夜久久| 精品成人av一区| 欧美肥臀大乳一区二区免费视频| 国产欧美久久一区二区| 97精品在线观看| 66m—66摸成人免费视频| 欧美性生交xxxxx久久久| 日韩小视频网址| 91综合免费在线| 隔壁老王国产在线精品| 欧美精品xxx| 亚洲第一中文字幕| 精品亚洲男同gayvideo网站| 欧美丰满少妇xxxxx做受| 91大神在线播放精品| 色噜噜久久综合伊人一本| 视频一区视频二区国产精品| 国模私拍视频一区| 中文字幕无线精品亚洲乱码一区| 麻豆国产精品va在线观看不卡| 国产做受69高潮| 中文字幕无线精品亚洲乱码一区| 国产成人黄色av| 欧美精品video| 全球成人中文在线| 国产精品久久久久久久av大片| 久久99精品久久久久久青青91| 精品一区二区电影| 欧美色视频日本高清在线观看| 欧美乱大交xxxxx另类电影| 欧美精品激情在线观看| 热久久这里只有精品| 色妞在线综合亚洲欧美| 亚洲国产精品悠悠久久琪琪| 91免费版网站入口| 国产精品稀缺呦系列在线| 欧美激情在线观看视频| 国产在线观看精品一区二区三区| 欧美成人亚洲成人| 97精品国产97久久久久久免费| 国产精品久久久久久av| 国产成人一区二| 成人有码视频在线播放| 欧美成人精品在线播放| 久久国产精品久久国产精品| 亚洲高清av在线| 国产午夜精品理论片a级探花| 国内精品中文字幕| 精品亚洲一区二区三区在线观看| 一区二区三区美女xx视频| 午夜精品久久久久久久久久久久久| 国产一区二区日韩精品欧美精品| 日韩在线欧美在线国产在线| 亚洲精品suv精品一区二区| 欧美日韩高清在线观看| 欧美激情精品久久久久久免费印度| 中文字幕日韩在线播放| 久久久久久久久久久国产| 久久免费精品视频| 亚洲精品一区二区在线| 国产精品成人观看视频国产奇米| 成人激情在线播放| 668精品在线视频| 亚洲成色777777女色窝| 国产成人啪精品视频免费网| 久久艹在线视频| 伊人久久久久久久久久久| 视频直播国产精品| 国产欧美日韩精品丝袜高跟鞋| 欧美在线不卡区| 亚洲欧美成人一区二区在线电影| 久久综合久久美利坚合众国| 国产乱肥老妇国产一区二| 国产精品久久久久久影视| 成人福利网站在线观看11| 亚洲色图日韩av| 久久99久国产精品黄毛片入口| 欧美激情国产日韩精品一区18| 精品亚洲一区二区三区在线播放| 国产精品久久中文| 国产偷亚洲偷欧美偷精品| 欧美中文在线字幕| 国产丝袜视频一区| 亚洲午夜精品久久久久久性色| 日韩av最新在线观看| 国产精品大片wwwwww| 亚洲一区二区三区视频| 亚洲另类xxxx| 5566日本婷婷色中文字幕97| 国产亚洲精品久久久优势| 欧美性猛交xxxxx免费看| 精品中文字幕在线| 亚洲欧美日韩国产精品| 一区二区在线视频| 国产精品视频一| 久久久久久久久久久网站| 国产精品久久久久影院日本| 亚洲综合精品伊人久久| 欧美xxxx18性欧美| 亚洲天堂久久av| 日产精品久久久一区二区福利| 国产精品成人观看视频国产奇米| 亚洲情综合五月天| 国产在线观看精品| 欧美国产极速在线| 欧美黑人一级爽快片淫片高清| 国产日本欧美一区| 亚洲精品综合精品自拍| 亚洲国产精品推荐| 大胆欧美人体视频| 国产精自产拍久久久久久蜜| 欧美国产日本在线| 国产成人黄色av| 8x海外华人永久免费日韩内陆视频| 中文字幕日韩欧美在线视频| 国模叶桐国产精品一区| 亚洲国产精品嫩草影院久久| 欧美日本啪啪无遮挡网站| 亚洲欧美国产精品专区久久| 国产精品狼人色视频一区| 亚洲理论在线a中文字幕| 欧美寡妇偷汉性猛交| 欧美成人午夜免费视在线看片| 91精品国产自产在线老师啪| 精品在线欧美视频| 日韩在线视频导航| 亚洲深夜福利在线| 国产精品扒开腿爽爽爽视频| 欧美二区在线播放| 亚洲新中文字幕| 欧美精品一区二区免费| 国产成人免费av电影| 欧美中文在线观看国产| 韩日欧美一区二区| 国产成人一区二区在线| 国产亚洲精品久久久| 亚洲精品欧美日韩专区| 欧美裸体xxxx极品少妇| 国产精品久久久久国产a级| 国产欧美一区二区三区在线看| 91美女高潮出水| 日本久久91av| 色婷婷综合久久久久| 国产a级全部精品| 国产精品中文久久久久久久| 国产精品久久久久aaaa九色| 日韩在线免费视频| 国产美女搞久久| 亚洲最大的网站| 国产专区欧美专区|