概述
寫下本篇文章源於參加Tech.Ed的一場關於Window PowerShell的課程。雖然以前也常常關注,但從沒有親自體驗過。Windows PowerShell 是一種新的命令行外殼和腳本語言,用於進行系統管理和自動化任務,它創建在 .NET Framework 的基礎上,可以使 IT 專業人員和開發人員控制和自動完成Windows 和應用程序的管理。更爲強大之處在於它能夠調用.NET Framework中的類庫,能夠與COM、ADO、XML等交互。在本文中讓咱們一塊兒來體會一下回歸Doc操做的快感,進入強大無比的Windows PowerShell世界。
在Windows PowerShell中包括了:
1. 129 個命令行工具(稱爲「cmdlet」),用於執行常見系統管理任務,如管理服務、進程、事件日誌、證書、註冊表以及使用 Windows Management Instrumentation (WMI)。
2. 採用標準命名約定和通用參數的命令行工具,易於掌握和使用;以及用於對數據和對象進行排序、篩選以及格式設置的簡便工具。
3. 對現有腳本語言、現有命令行工具以及多種 Windows 版本的支持,其中包括 Windows XP、Windows Server 200三、Windows Vista 以及 Windows Server 2008。
4. 方便的功能,使用戶可以瀏覽數據存儲(如註冊表和證書存儲),就像面對文件系統同樣。
5. 用於管理位於不一樣存儲中以及採用不一樣格式的 Windows 數據的標準實用程序,這些數據包括 Active Directory (ADSI)、Windows Management Instrumentation (WMI)、組件對象模型 (COM) 對象、ActiveX 數據對象 (ADO)、HTML 和 XML。
6. 在命令行進行的高級表達式分析和 .NET 對象處理,其中包括對對象進行流水線處理以幫助提升 IT 專業人員的工做效率。
7. 可擴展的接口,使獨立軟件供應商和企業開發人員可以構建自定義 cmdlet 以知足特有的應用程序和系統管理要求。
簡單示例
在開始以前,先來看一個簡單的示例,在.NET中獲取當前系統全部進程的一段代碼:
static void Main(string[] args)
{
Process[] proceses = Process.GetProcesses();
foreach (var item in proceses)
{
Console.WriteLine(item.ProcessName);
}
Console.ReadLine();
}
很是簡單的一段代碼,直接獲取全部進程並顯示出它們的名稱,以下圖所示:
在安裝完Windows PowerShell以後,能夠看到它的界面與經常使用的命令行界面很是類似。如今再使用Windows PowerShell來獲取一下當前系統全部的進程,只有一個命令就能夠完成:
Get-Process
輸出以下圖所示:
PowerShell命令
在Windows PowerShell中,內置了129個命令供咱們使用,這些命令稱之爲「Cmdlet」。除了不少在Dos中的命令繼續可使用以外,還有PowerShell內置的一些命令。每一個命令由兩部分組成,前半部分表示動做,後半部分表示動做的標的,如Get-Help、Get-Command、Write-Host等。在Windows PowerShell中輸入命令時,不須要輸入所有名稱,能夠只輸入其中幾個關鍵字,PowerShell會自動匹配,如只輸入get-he,而後按下「Tab」鍵,屏幕上就能夠出現完整的Get-Help命令。
Get-Help、Get-Command是PowerShell中很是重要的兩個命令,能夠獲取幫助和獲取全部的命令列表,如輸入:
Get-Command
結果以下圖所示,列出了全部的命令:
與.NET Framework交互
Windows PowerShell更強大的地方在於它能夠訪問.NET Framework的類庫,咱們可使用New-Object命令來建立一個.NET Framework中的類實例,並保存在變量中,以下面的命令:
$d = New-Object -TypeName System.DateTime
這裏使用New-Object來建立一個DateTime對象,使用-TypeName指定類型名稱,建立的對象保存在$d變量中,輸出結果以下圖所示:
除此以外,還可使用-ArgumentList來指定參數,以下圖所示:
與COM交互
使用Windows PowerShell還能夠徹底與COM交互,這使的Windows PowerShell的功能更增強大,有了上面前面提到的訪問WMI、與.NET Framework交互,再加上與COM交互,能夠說Windows PowerShell幾乎無所不能。以下面看一個例子,使用PowerShell來訪問IE,可使用以下命令來建立一個IE的對象,並讓它導航到博客園首頁:
$ie = New-Object -ComObject InternetExplorer.Application
$ie.Visible = $true
$ie.Navigate("http://www.cnblogs.com")
$ie.Quit()
簡單解釋一下這段代碼,首先建立一個IE的COM對象,並讓它顯示,而後導航到博客園首頁,最後程序退出。以下圖所示:
在這個過程當中,你們會看到系統打開了一個IE窗口,而且導航到了博客園。
訪問註冊表
除此以外,Windows PowerShell還能夠實現對註冊表的徹底控制,包括查詢全部的Entry,或者修改、刪除鍵值等,能夠說是一切皆可控制,如使用下面的命令:
Get-ChildItem -Path hkcu:\
輸出以下圖所示,列出了HKEY_CURRENT_USER下面的信息:
建立別名
在Windows PowerShell中,還容許爲命令建立本身熟悉的別名,這樣對於某些太長的命令名可使用本身的縮寫來表示,或者對於某些不太容易記憶的命令,使用本身喜歡的名字來表示。
Set-Alias gh Get-Help
這裏設置gh爲Get-Help命令的別名,這樣在後面的操做中,當輸入gh後,執行的命名就是Get-Help,以下圖所示:
輸出文件
在Windows PowerShell中,咱們還能夠把操做的結果輸出到一個文件中,可使用Out-File命令,另外可使用-FilePath來指定輸出的路徑和文件名,以下命令所示:
Get-Process | Out-File -FilePath C:\temp.txt
如今打開C盤的temp.txt文件,能夠看到輸出的結果以下所示:
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
126 4 13272 10220 47 1204 audiodg
73 4 2936 8080 61 1.05 3580 conime
512 5 2188 4112 59 2.06 532 csrss
511 7 5704 19744 182 93.44 588 csrss
1249 109 127144 157128 561 44.67 6648 devenv
188 8 47088 73332 164 2,020.61 2508 dwm
2261 48 75040 72600 416 341.38 2548 explorer
0 0 0 24 0 0 Idle
664 28 36696 49076 173 14.78 3384 iexplore
969 35 74868 87576 328 43.92 7480 iexplore
404 10 7280 640 96 6.23 2812 kavstart
65 3 1368 3360 46 0.09 316 kissvc
80 5 6592 1012 62 1.28 496 kmailmon
以上所介紹只是Windows PowerShell強大功能的冰山之一角,除此以外,還能夠與WMI交互,訪問機器設備,對於輸出結果格式化等等,這裏再也不介紹。
總結
本文中簡單介紹了一下Windows PowerShell,相信經過這些介紹你們已經看到了Windows PowerShell的強大之處,並且在微軟之後的產品中,都會支持使用PowerShell進行管理。