引言

在 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. 设置标签

  • 实例名
  • 认证方式(用户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. 通过设置保存,减少了实例名与认证信息的重复输入。

效果并不花哨,但能稳定压缩运维人员的重复作业时间,具有实务价值。


限制与注意事项

  • 表清单依赖 sys_db_object,受 ACL 影响可能获取失败(可手工输入规避)。
  • 某些环境下 WHERE/JOIN 自动保存受限,可能仍需在 ServiceNow 侧手工补全。
  • 本工具与 ServiceNow 公司无关,不获得其批准、担保或支持。

总结

PS1 SNOW Utilities 的目标,是减少数据抽取与 Database View 定义中的实际堵点。

就我个人而言,我以前就知道 PowerShell 可以做 GUI,但并没有真正“自己动手做”的想法。借助生成式 AI,用接近 no-code 的指令式方式把工具做到可用形态,这段经历让我强烈感受到 AI 的进化速度。同时我也认为,传统 low-code / no-code 工具正在进入必须重定义优势、并承受同质化压力的阶段。