前言

在 ServiceNow 維運中,Database View 的建立方式很容易依賴個人的 RDB 基礎而形成屬人化。另一方面,即使想透過 GUI 活用資料,也會遇到資料量過大導致匯出上限、清單顯示狀態影響匯出欄位、附件散落於各筆記錄難以回收等問題。為此,我製作了以 GUI 支援原始資料匯出與 Database View 定義的 PowerShell Utility

本文依據公開儲存庫中的實作,整理其背景、實作方針、設計重點與維運成效。


背景1:可以匯出,但維運負擔沉重

ServiceNow 標準 UI 可以匯出資料,但在實務上會持續累積下列問題。

  1. 即使想每次用相同欄位匯出,也容易受清單檢視變更影響。
  2. 若要求「全欄位 + 內部名稱」的定型匯出,流程說明成本會快速上升。
  3. 在大量資料下,GUI 匯出本身會變慢,執行與重跑管理都更困難。

結果是維護團隊把時間花在「怎麼匯出」而非「怎麼用資料」。因此我改為準備透過 API 讓各部門自行依固定欄位匯出的結構。


背景2:Database View 建立容易暴露 RDB 知識落差

Database View 很好用,但對非工程人員或 RDB 經驗較少的使用者來說門檻偏高。

  • sys_db_viewsys_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)加密保存。

設計重點

這次實作最重視的是:降低維運期間的維護負擔。

  1. 將通訊處理集中到共用函式
    Invoke-SnowRequest 為核心封裝 GET/POST/PATCH/DELETE/附件取得,避免驗證、例外處理、日誌輸出分散。

  2. 分離 UI 建構與顯示控制
    Build-* 系列建構 UI,並以 Apply-*LanguageSet-Theme 切換顯示。

  3. 穩定設定保存行為
    透過 Load-Settings / Save-SettingsRequest-SaveSettings,抑制漏存與過度保存。

  4. 危險操作多重確認
    Truncate 流程加入確認碼與目標資訊顯示,以降低誤操作風險。

  5. 以前後追蹤日誌為前提
    透過 Logs 分頁與 ConvertTo-LogCompactJson,讓執行結果更易於事後追蹤。


實作上的取捨

在企業環境中,安裝程式發佈與常駐應用導入門檻通常較高。因此這次優先採用僅靠文字分發也可執行的 PowerShell 腳本型態

此取捨在降低導入門檻的同時,也縮短了現場開始使用的時間。


導入成效

導入後確認了以下四點成效。

  1. Export 流程在畫面上固定化,降低了每次擷取需求的說明成本。
  2. 建立 Database View 時,在 ServiceNow UI 手動輸入 WHERE 的場景減少。
  3. 可依期間條件批次回收附件,縮短調查時的重複作業。
  4. 透過設定保存,減少了 Instance 名稱與驗證資訊的重複輸入。

效果雖不花俏,但能穩定壓縮維運人員的重複工時,具備實務價值。


限制與注意事項

  • 資料表清單依賴 sys_db_object,受 ACL 影響時可能無法取得(可手動輸入迴避)。
  • 在部分環境中 WHERE/JOIN 自動保存受限,可能仍需在 ServiceNow 側手動補完。
  • 本工具與 ServiceNow 公司無關,不受其核可、保證或支援。

總結

PS1 SNOW Utilities 的目標,是降低資料擷取與 Database View 定義中的實務瓶頸。

就我個人而言,我早就知道 PowerShell 可以做 GUI,但並沒有真正「自己動手做」的想法。這次在生成式 AI 協助下,以接近 no-code 的指令式方式把工具做成可用形態,讓我強烈感受到 AI 演進速度之快。同時我也認為,傳統 low-code / no-code 工具正進入必須重定義優勢、並承受同質化壓力的階段。