前言
SSIS 不僅是 ETL 工具,其內建的 WMI Data Reader 與 Event Watcher 任務能透過 WQL (WMI Query Language) 查詢作業系統層級資訊,極大擴展自動化運維能力。
WMI 典型應用場景
- 讀取系統事件日誌尋找特定錯誤
- 查詢執行中應用程式清單
- 監控封裝執行期間可用記憶體
- 查詢磁碟可用空間(本文重點)
需求:取得遠端伺服器磁碟可用空間
前置條件
- 具備目標主機系統管理員權限,或以管理員身分執行封裝
- 目標主機啟用 WMI 服務 (Winmgmt) 並開放防火牆 (TCP 135, 445 及動態埠)
實作步驟
- 建立 SSIS 專案,新增封裝
WMI_Query.dtsx
- 控制流拖入 WMI Data Reader Task,雙擊設定屬性

WMI 連線管理器設定
- 直接新建連線,輸入主機名稱、使用者名稱、密碼
- 進階:可透過運算式動態修改
ConnectionString 實現多伺服器巡檢

WQL 查詢語句
SELECT Name, FreeSpace, Size FROM Win32_LogicalDisk WHERE DriveType = 3
DriveType = 3:僅查詢本機固定磁碟
FreeSpace:可用位元組數
Size:總容量位元組數
結果處理
- WMI Data Reader 可將查詢結果輸出至變數(Object 型別)或檔案
- 後續使用 Script Task 或 Foreach Loop Container 解析結果,寫入資料庫或觸發警示
擴充應用:多伺服器巡檢自動化
- 建立伺服器清單表 (ServerList)
- Execute SQL Task 讀取清單至 Object 變數
- Foreach Loop Container (ADO Enumerator) 逐台處理
- 迴圈內動態設定 WMI 連線字串,執行查詢
- 結果彙總寫入監控資料庫,超閾值發送警示
注意事項
- 跨網域查詢需信任關係或相同認證
- WMI 查詢耗時較長,建議非同步或排程離峰執行
- 若目標主機為 SQL Server 2008+,可考慮使用 DMV
sys.dm_os_volume_stats 替代