前言
在 ServiceNow 維運中,Database View 的建立方式很容易依賴個人的 RDB 基礎而形成屬人化。另一方面,即使想透過 GUI 活用資料,也會遇到資料量過大導致匯出上限、清單顯示狀態影響匯出欄位、附件散落於各筆記錄難以回收等問題。為此,我製作了以 GUI 支援原始資料匯出與 Database View 定義的 PowerShell Utility。
本文依據公開儲存庫中的實作,整理其背景、實作方針、設計重點與維運成效。
- 工具名稱:PS1 SNOW Utilities
- Repository:https://github.com/arimagml-collab/PS1SOWUtilities
- 實作型態:PowerShell 5.1 + WinForms(Windows 本機執行)
- 參考:README、主腳本、設計備忘(
docs/)
背景1:可以匯出,但維運負擔沉重
ServiceNow 標準 UI 可以匯出資料,但在實務上會持續累積下列問題。
- 即使想每次用相同欄位匯出,也容易受清單檢視變更影響。
- 若要求「全欄位 + 內部名稱」的定型匯出,流程說明成本會快速上升。
- 在大量資料下,GUI 匯出本身會變慢,執行與重跑管理都更困難。
結果是維護團隊把時間花在「怎麼匯出」而非「怎麼用資料」。因此我改為準備透過 API 讓各部門自行依固定欄位匯出的結構。
背景2:Database View 建立容易暴露 RDB 知識落差
Database View 很好用,但對非工程人員或 RDB 經驗較少的使用者來說門檻偏高。
sys_db_view與sys_db_view_table的操作脈絡分離,畫面跳轉多。- 很難在同一畫面集中確認內部欄位名稱。
- 在沒有 Admin 權限的環境,常需要到其他環境調查內部名再帶回。
- 手動輸入 WHERE/JOIN 定義時,容易發生拼字或參照錯誤。
因此我判斷需要一邊看候選項、一邊用 GUI 組裝定義的支援方式。
實作內容:PS1 SNOW Utilities
PS1 SNOW Utilities 是將 ServiceNow 維運高頻作業集中到單一 GUI 的 PowerShell 工具。主要分頁如下。
1. Export 分頁
- 選擇目標資料表(或手動輸入)
- 設定篩選條件(全量 /
sys_updated_on期間) - 選擇輸出格式(CSV / JSON / Excel)
- 面向大量資料的 CSV 分割匯出
- 指定輸出資料夾並檢視執行日誌
其目標是將擷取流程定型化,降低人員之間的操作差異。
2. Database View Editor 分頁
- 輸入 View 內部名稱與標籤
- 設定基底資料表與 Prefix
- 新增 JOIN(左右欄位、Variable Prefix、LEFT JOIN)
- 重新取得欄位候選並選擇顯示欄位
- 建立 View 並顯示結果連結
可在檢視候選項的同時組裝定義,降低在 ServiceNow 多畫面往返手動輸入 WHERE/JOIN 的負擔。
3. Attachment Harvester 分頁
- 依更新期間批次收集相關附件
- 檔名衝突時以流水號避免覆蓋
- 記錄收集處理日誌
用於將稽核與調查中常見的附件回收流程化、可重現化。
4. Truncate 分頁
- 用於開發場景的整表刪除
- 確認碼輸入、目標資訊顯示、重試設定
此為高風險操作,不建議在正式環境使用,前提是驗證環境中的資料重灌測試。
5. 設定分頁
- Instance 名稱
- 驗證方式(使用者 ID+密碼 / API Key)
- 語言設定(日文/英文)
- 主題設定(Dark / Light)
- 自訂網域連線設定(
instanceDomain)
輸入值儲存於 settings.json,敏感資訊使用 Windows DPAPI(CurrentUser)加密保存。
設計重點
這次實作最重視的是:降低維運期間的維護負擔。
-
將通訊處理集中到共用函式
以Invoke-SnowRequest為核心封裝 GET/POST/PATCH/DELETE/附件取得,避免驗證、例外處理、日誌輸出分散。 -
分離 UI 建構與顯示控制
以Build-*系列建構 UI,並以Apply-*Language與Set-Theme切換顯示。 -
穩定設定保存行為
透過Load-Settings/Save-Settings與Request-SaveSettings,抑制漏存與過度保存。 -
危險操作多重確認
Truncate 流程加入確認碼與目標資訊顯示,以降低誤操作風險。 -
以前後追蹤日誌為前提
透過 Logs 分頁與ConvertTo-LogCompactJson,讓執行結果更易於事後追蹤。
實作上的取捨
在企業環境中,安裝程式發佈與常駐應用導入門檻通常較高。因此這次優先採用僅靠文字分發也可執行的 PowerShell 腳本型態。
此取捨在降低導入門檻的同時,也縮短了現場開始使用的時間。
導入成效
導入後確認了以下四點成效。
- Export 流程在畫面上固定化,降低了每次擷取需求的說明成本。
- 建立 Database View 時,在 ServiceNow UI 手動輸入 WHERE 的場景減少。
- 可依期間條件批次回收附件,縮短調查時的重複作業。
- 透過設定保存,減少了 Instance 名稱與驗證資訊的重複輸入。
效果雖不花俏,但能穩定壓縮維運人員的重複工時,具備實務價值。
限制與注意事項
- 資料表清單依賴
sys_db_object,受 ACL 影響時可能無法取得(可手動輸入迴避)。 - 在部分環境中 WHERE/JOIN 自動保存受限,可能仍需在 ServiceNow 側手動補完。
- 本工具與 ServiceNow 公司無關,不受其核可、保證或支援。
總結
PS1 SNOW Utilities 的目標,是降低資料擷取與 Database View 定義中的實務瓶頸。
就我個人而言,我早就知道 PowerShell 可以做 GUI,但並沒有真正「自己動手做」的想法。這次在生成式 AI 協助下,以接近 no-code 的指令式方式把工具做成可用形態,讓我強烈感受到 AI 演進速度之快。同時我也認為,傳統 low-code / no-code 工具正進入必須重定義優勢、並承受同質化壓力的階段。