先前「使用 Windows PowerShell 將資料匯出成 .html 檔案(含安裝 SQLPSX 模組教學)」一文說明使用 CodePlex 的 SQL Server Powershell Extensions(簡稱 SQLPSX)專案,可以將資料匯出成 HTML 格式。結果在發文之後的幾天(2010 年 11 月 6 日),SQLPSX 又出新版:2.3 版,安裝檔的名稱從 SQLPSX_Install_32.exe、SQLPSX_Install_64.exe,改成 SQLPSX.msi。這麼一改,安裝時,就無須注意作業系統版本是 32 還是 64 位元,真是太方便了。
沒想到,一個多月之後(2010 年 12 月 11 日),發行了 2.3.1 版;2011 年 3 月 13 日,再推出 2.3.2.1 版,開始支援存取查詢 MySQL 資料庫。上述幾個版本之差異如下所列:
2.3 版 | 2.3.1 版 | 2.3.2.1 版 |
10 個模組 (開始支援「以原則為基礎的管理」,亦即 PBM) | 12 個模組 (多了模組:PerfCounter、SQLProfiler(此模組僅能用於 x86 的環境中)) | 13 個模組 (多了模組:MySQLLib,這表示 SQLPSX 也支援 MySQL) |
137 個函式 | 155 個函式 | 163 個函式、2 個 cmdlet、7 個腳本 |
前置作業
安裝 SQLPSX v2.3.2.1 的方式很簡單,但在安裝之前,您的電腦必須已經安裝下列元件並做好設定:
安裝 SQLPSX 模組
- 在下載的 SQLPSX.msi 檔案上,連按兩下滑鼠左鍵 。
- 此時會出現 SQLPSX 安裝精靈,按下「Next」按鈕。
- 勾選「I accept the terms in the License Agreement」,然後按下「Next」按鈕。
- 按下「Next」按鈕。
一般來說,是不需要修改安裝的路徑,除非您希望所有使用者皆可使用,此時就請考慮安裝到所有人皆有權限可存取的目錄,同時記得替環境變數 PSModulePath 加上剛修改的自訂路徑。
- 按下「Install」按鈕。
- 當出現「使用者帳戶控制」對話視窗,請按下「是」按鈕,並稍待片刻。
- 按下「Finish」按鈕。
啟用 SQLPSX 模組
於安裝 SQLPSX 完畢之後,當您開啟 Windows PowerShell 時,並不會自動載入 SQLPSX 模組,需自行載入相關的模組才行,例如要查詢電腦名稱 ALEX-PC 上,預設的 SQL Server 執行個體(亦即執行個體名稱為 MSSQLServer)之相關 SMO 資訊,就要先載入名稱為 SQLServer 的模組,並呼叫 Get-SqlServer 函式:
Import-Module SQLServer
Get-SqlServer "ALEX-PC"
▼ 載入特定模組,並執行某個函式
個別載入 SQLPSX 模組的指令如下:
Import-Module SQLServer
Import-Module adoLib
Import-Module Agent
Import-Module PerfCounters
Import-Module Repl
Import-Module ShowMbrs
Import-Module SQLIse
Import-Module SQLMaint
Import-Module SQLParser
Import-Module SQLProfiler
Import-Module SSIS
Import-Module OracleClient
Import-Module OracleIse
您當然可以實際所需,僅載入會使用到的模組。不過這樣的操作方式,還不是挺方便的,因為要輸入多次的載入指令。用下面這個指令,就可一次載入數個 SQLPSX 模組:
▼ 一次載入數個 SQLPSX 模組
然而這樣子,有 2 個模組(PerfCounters 跟 SQLProfiler)並沒被載入。原因在於原作者忘了修改位於 %UserProfile%\Documents\WindowsPowerShell\Modules\SQLPSX (該路徑為 Windows Vista 之後的作業系統,如上面安裝步驟 4. 中所顯示的路徑。若您的作業系統為 Vista 之前,請自行將 Documents 調整成 My Documents 或實際的路徑名稱)目錄中的 SQLPSX.psm1,所以請使用您熟悉的文字編輯器開啟該檔案,找到 $PSXloadModules += 該行,然後於該行的後面,加入如下的文字:
,"PerfCounters","SQLProfiler"
▼ 修改 SQLPSX.psm1 設定
如何知道有哪些模組可供載入?
這個問題跟 SQLPSX 沒什麼關係,使用下面的指令會顯示 Windows PowerShell 有哪些模組可供載入:
Get-Module -ListAvailable
可以一開啟 Windows PowerShell 就載入 SQLPSX 相關的模組嗎?
難道沒有辦法類似 DOS 時代,使用批次檔 Autoexec.bat 事先載入相關模組嗎?答案是肯定的,請依照下列步驟進行操作:
- 開啟 Windows PowerShell,輸入下面的指令,以便建立目前這個使用者的 Windows PowerShell 設定檔:
- 此時會開啟記事本,並出現找不到檔案的提示訊息,按下「是」按鈕,開始編輯設定檔。請將下面的內容複製下來,然後貼到記事本,接著存檔(下面的路徑適用於 Windows Vista 之後的作業系統,若您的作業系統為 Vista 之前,請自行將 Documents 調整成 My Documents 或實際的位置與名稱):
Import-Module $Home\Documents\WindowsPowerShell\Modules\SQLPSX\SQLPSX.psm1
▼ 找不到檔案的提示訊息
請注意:
$Home 變數是指目前使用者的主目錄,此步驟就是在目前使用者的主目錄下的 Documents\WindowsPowerShell 目錄,建立 Microsoft.PowerShell_profile.ps1 檔。
- 關閉 Windows PowerShell,然後再開啟它,此時應該會看到如下的畫面,即表示成功自動載入 SQLPSX 模組了。
▼ 成功自動載入 SQLPSX 模組
請注意:
SQLProfiler 模組僅能執行於 PowerShell x86 中,原因請看圖:
Windows PowerShell 還有個整合式指令碼環境(簡稱 ISE)是一個以 GUI 為介面的應用程式,可讓我們在一個整合式的環境中撰寫、執行和測試指令碼與模組。所以他具有語法標色、TAB 自動完成、視覺化偵錯、Unicode 相容性、即時線上說明等,提供豐富的指令碼撰寫體驗。欲一開啟 ISE 中,也能自動載入 SQLPSX 模組,也需要按照上述的操作步驟進行設定,此時所編輯的設定檔名為:Microsoft.PowerShellISE_profile.ps1,而不是 Microsoft.PowerShell_profile.ps1。