ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

jc net_localgroup 解析器:将 Windows `net localgroup` 输出转为结构化 JSON 的完整指南

jc net_localgroup 解析器:将 Windows `net localgroup` 输出转为结构化 JSON 的完整指南 开发工具【免费下载链接】jcCLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.项目地址https://gitcode.com/gh_mirrors/jc/jc点击查看免费下载Windows 本地组local group成员关系排查是系统管理与自动化运维中的高频场景而net localgroup命令输出的是典型的人眼友好的定宽文本无法直接被脚本消费。jcJSON Convert项目提供的 net_localgroup 解析器 正是为此而生它能将该命令的全部输出形态组列表、单组详情、域控制器场景统一转换为带固定 Schema 的 JSON/YAML/Python 字典。读完本文你将掌握该解析器的两种调用方式、输出字段语义、两种输出模式组列表模式 vs 成员详情模式的解析行为以及 jc/parsers/net_localgroup.py 中回退迭代器 正则状态机的底层解析实现。适用前提与兼容性该解析器在 info 元数据类 中声明兼容平台win32仅在 Windows 上运行net localgroup才有意义魔法命令magic commandnet localgroup——当 jc 通过管道自动识别命令时会依据该标识匹配到此解析器版本 1.0作者 joehacksalot。parse入口第一步即调用 jc.utils.compatibility在非 win32 平台如 Linux 服务器上处理从 Windows 采集的日志会向 STDERR 打印警告但不阻断解析使用-q/quietTrue可抑制该警告。因此该解析器适合在 Windows 上采集、在任意平台上集中解析的运维架构。CLI 用法覆盖四种命令形态net localgroup有四种典型调用方式解析器对它们全部兼容引自官方文档$ net localgroup | jc --net-localgroup # 列出本机所有本地组 $ net localgroup /domain | jc --net-localgroup # 列出域中的组 $ net localgroup Administrators | jc --net-localgroup # 查看指定组的成员 $ net localgroup Administrators /domain | jc --net-localgroup配合 jc 的通用输出选项可以直接与jq等工具衔接$ net localgroup | jc --net-localgroup -p-p为 pretty print格式化缩进输出。文档给出的典型输出示例{ account_origin: null, comment: null, domain: null, groups: [ { name: Administrators, members: [ Administrator, Operator, ansible, user1 ] } ] }作为 Python 模块使用在 Python 脚本中可将任意字符串文本直接交给解析器无需真正执行命令便于回放采集到的历史输出import jc result jc.parse(net_localgroup, net_localgroup_command_output)底层调用链为 jc/lib.py 的 parse 函数 动态导入jc.parsers.net_localgroup并调用其parse。解析器主函数签名与文档一致def parse(data, rawFalse, quietFalse)参数类型说明datastring待解析的文本数据net localgroup的完整输出rawbooleanTrue时返回未经_process加工的结构。本解析器中 raw 与 processed 结构相同_process直接原样返回quietbooleanTrue时抑制平台兼容性警告返回值为解析后的字典当data为空仅空白字符时返回{}——这一点由单元测试test_net_localgroup_nodata验证parse(, quietTrue) {}判断逻辑来自 jc.utils.has_data。输出 Schema 与字段语义输出 Schema 固定为四键字典其中groups为列表{ account_origin: string, // 账户/组列表的归属来源如 \\\\DESKTOP-WIN11 domain: string, // /domain 模式下的域名域控制器场景 comment: string, // 单组详情模式下的组注释 groups: [ { name: string, // 组名 members: [ string ] // 组成员列表模式下为空数组 } ] }字段的取值取决于net localgroup的输出模式这正是理解该解析器行为的关键模式一组列表模式net localgroup无参数。原始输出形如 Windows XP 测试夹具Aliases for \\DESKTOP-WINXP ------------------------------------------------------------------------------- *Administrators *Backup Operators *Distributed COM Users *Guests ... The command completed successfully.解析后account_origin取值为\\DESKTOP-WINXPgroups中每个组的members均为空数组comment与domain为null见 windows-xp/net_localgroup.json。注意原始列表中每个组名前的*前缀会被解析器剥离。模式二成员详情模式net localgroup 组名。原始输出形如 Windows XP Administrators 夹具Alias name Administrators Comment Administrators have complete and unrestricted access to the computer/domain Members ------------------------------------------------------------------------------- Administrator SOMECOMPANY\Domain Admins The command completed successfully.此时groups只含一个元素其members填充全部成员含DOMAIN\Group形式的域全局组名comment承载注释文本见 net_localgroup.administrators.json。模式三域控制器场景。当使用/domain且请求被转发到域控制器时输出开头会出现The request will be processed at a domain controller for domain xxx行解析器从中提取domain字段。源码解析正则状态机 回退迭代器jc/parsers/net_localgroup.py 的核心解析逻辑在_parse函数L142-L194其设计可归纳为逐行扫描 正则分类 分段批量收集三步预处理按行切分、去除首尾空白、过滤空行L153-L155状态机分类每行依次尝试以下正则/前缀匹配均忽略大小写The request will be processed at a domain controller for domain (.)→ 写入domainAliases for\s*([^:])→ 提取account_origin并置parse_typegroups_listAlias name\s*([^:])→ 提取组名group_name并置parse_typemembers_list以Comment开头的行 → 截取冒号后内容写入comment空值归一化为None以---开头的分隔线行 → 触发成员/组名单的批量收集见下。批量收集遇到---分隔线后调用 _parse_net_localgroup_list持续读取后续行直到遇到The command completed successfully.结尾句或输入耗尽groups_list模式expect_asteriskTrue剥离*前缀生成groups [{name: ..., members: []}, ...]members_list模式expect_asteriskFalse成员行原样收集生成单元素groups列表。一个值得关注的实现细节是 L108-L120 的_PushbackIterator类它包装普通迭代器并维护一个回退栈使主循环与批量收集函数共享同一个行序列、且收集函数可以把多读的一行推回给外层循环继续处理。从源码结构看这是解决两种模式共用同一行流问题的最小实现避免了把输入切成多个子串再二次扫描。入口parse的执行顺序为compatibility平台检查 →input_type_check类型校验jc/utils.py L490确保传入的是 str/bytes→has_data判空 →_parse→ 按raw决定是否过_processL69-L91。测试覆盖跨 Windows 版本的双模式验证tests/test_net_localgroup.py 为 Windows XP、Windows 7、Windows 2008、Windows 2016、Windows 10、Windows 11 共六个版本各准备了两组夹具——无参数的组列表net_localgroup.out与指定Administrators组的成员详情net_localgroup.administrators.out并逐组断言解析结果与对应的 JSON 夹具完全一致。以 Windows 11 为例windows-11/net_localgroup.out 中account_origin为\\DESKTOP-WIN11-HOME组列表包含*docker-users、*Hyper-V Administrators等非内置组验证了组名大小写、带连字符命名等真实场景windows-11/net_localgroup.administrators.json 中members为[Administrator, user1]comment正确捕获。这些夹具同时说明了解析器对不同 Windows 世代输出措辞差异如组名对齐空格、结尾提示语的鲁棒性。实战衔接与 net_user 解析器组合使用jc 还提供了一个同源的姊妹解析器 net_userjc/parsers/net_user.py其 Schema 中的local_group_memberships/global_group_memberships字段从用户侧给出组归属与本解析器的组侧成员视图互补。在自动化脚本中可以双向交叉验证组成员关系例如# 组侧Administrators 里有哪些人 net localgroup Administrators | jc --net-localgroup -q # 用户侧某用户属于哪些组 net user user1 | jc --net-user -q两者结合即可在 CI/巡检脚本中回答该用户是否拥有管理员权限这类安全审计问题而无需引入额外依赖。小结net_localgroup 解析器以固定的四键 Schemaaccount_origin、domain、comment、groups[].name/members统一了net localgroup的三种输出形态其回退迭代器 正则状态机实现简洁且跨 Windows XP 至 Windows 11 全版本有测试保障。对于需要批量采集 Windows 主机组权限数据的自动化场景直接jc --net-localgroup管道输出 JSON 后即可交给jq或任何下游处理链消费。赞分享开发工具【免费下载链接】jcCLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.项目地址https://gitcode.com/gh_mirrors/jc/jc点击查看免费下载相关推荐fastfetch 内置的 Shell 补全脚本怎么用为 bash/zsh/fish 启用 tab 补全fastfetch 内置的 Shell 补全脚本怎么用为 bash/zsh/fish 启用 tab 补全 fastfetch 仓库自带三份 shell 补全脚开发工具jc 的 lsblk 解析器把 Linux 块设备树输出转换为结构化 JSON 的完整指南jc 的 lsblk 解析器把 Linux 块设备树输出转换为结构化 JSON 的完整指南 本篇基于 jc 仓库的 lsblk 解析器文档 https://l开发工具jc mount 解析器把多平台 mount 输出转成结构化 JSON 的完整指南jc mount 解析器把多平台 mount 输出转成结构化 JSON 的完整指南 本文围绕 jc 项目中的 mount 解析器展开讲解如何把 Linux、开发工具上一篇wger数据备份自动化使用Python脚本监控健身数据备份下一篇Vegile核心功能揭秘从后门注入到会话持久化的终极技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表