迴歸Dos操作的快感,進入PowerShell世界

 

概述

寫下本篇文章源於參加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 2003、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();
}

非常簡單的一段代碼,直接獲取所有進程並顯示出它們的名稱,如下圖所示:

TerryLee_0203

在安裝完Windows PowerShell之後,可以看到它的界面與常用的命令行界面非常相似。現在再使用Windows PowerShell來獲取一下當前系統所有的進程,只有一個命令就可以完成:

Get-Process

輸出如下圖所示:

TerryLee_0204 

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

結果如下圖所示,列出了所有的命令:

TerryLee_0209

與.NET Framework交互

Windows PowerShell更強大的地方在於它可以訪問.NET Framework的類庫,我們可以使用New-Object命令來創建一個.NET  Framework中的類實例,並保存在變量中,如下面的命令:

$d = New-Object -TypeName System.DateTime

這裏使用New-Object來創建一個DateTime對象,使用-TypeName指定類型名稱,創建的對象保存在$d變量中,輸出結果如下圖所示:

TerryLee_0205

除此之外,還可以使用-ArgumentList來指定參數,如下圖所示:

TerryLee_0206 

與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對象,並讓它顯示,然後導航到博客園首頁,最後程序退出。如下圖所示:

TerryLee_0207 

在這個過程中,大家會看到系統打開了一個IE窗口,並且導航到了博客園。

訪問註冊表

除此之外,Windows PowerShell還可以實現對註冊表的完全控制,包括查詢所有的Entry,或者修改、刪除鍵值等,可以說是一切皆可控制,如使用下面的命令:

Get-ChildItem -Path hkcu:\

輸出如下圖所示,列出了HKEY_CURRENT_USER下面的信息:

TerryLee_0208

創建別名

在Windows PowerShell中,還允許爲命令創建自己熟悉的別名,這樣對於某些太長的命令名可以使用自己的縮寫來表示,或者對於某些不太容易記憶的命令,使用自己喜歡的名字來表示。

Set-Alias gh Get-Help

這裏設置gh爲Get-Help命令的別名,這樣在後面的操作中,當輸入gh後,執行的命名就是Get-Help,如下圖所示:

TerryLee_0210 

輸出文件

在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進行管理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章