// 安全研究 · 2025-04-26

Windows Net命令详解

net 命令是 Windows 系统中最古老、最持久的命令行工具之一,从 Windows NT 时代延续至今。它不仅是一个命令,更是一个由前台调度器(net.exe)和后台执行组件(net1.exe)构成的复合体系。掌握 net,意味着掌握了一种无需图形界面即可完成用户管理、资源共享、服务控制和网络诊断的能力。本文将系统梳理 net 的历史渊源、net1.exe 的由来与分工、核心子命令的实战用法,以及在现代 Windows 环境中的定位。

一、net 命令概述与由来

net 命令是 Windows 内置的命令行工具,适用于 Windows XP、Vista、7、8、10、11 以及 Windows Server 系列。它通过命令行提供对系统资源(如用户、组、共享文件夹、打印机等)和网络配置的细粒度控制。net 命令的优点包括:

  • 多功能性:支持用户管理、共享管理、服务控制、时间同步等。
  • 跨平台适用:可管理本地或远程计算机(需适当权限)。
  • 简单易用:语法直观,适合脚本化和批量操作。

历史渊源

net 命令并非 Windows 独有。它的历史可以追溯到 IBM 的 OS/2 操作系统以及早期的 DOS 网络环境。在 Windows NT 之前,微软与 IBM 在 OS/2 上就有合作,net 命令作为网络管理工具被引入。Windows 95 中已经存在 net.exe,但体积较大,功能与后来的版本有所不同。

进入 Windows NT 时代后,net 命令逐渐定型为一组子命令的集合,用于管理本地或域环境中的用户、组、共享、服务、时间等资源。它的设计哲学很明确:通过命令行提供对系统资源细粒度、可脚本化的控制,补充甚至替代图形界面的“计算机管理”工具。

net 命令的一个关键特征是它与 NetBIOS 和 SMB 协议深度绑定。早期 Windows 网络依赖 NetBIOS 进行名称解析和通信,而 net 命令中的许多子命令(如 net use、net view)正是通过这些协议与远程计算机交互的。即使在 NetBIOS 逐渐被 TCP/IP 和 DNS 取代的今天,这些命令仍然保留着对传统网络命名方式的支持。

net 命令的基本语法如下:

net [子命令] [参数] [/选项]
  • 子命令:指定具体操作,如 user、share、group 等。
  • 参数:子命令所需的特定参数,如用户名、共享名等。
  • 选项:修改命令行为的开关,如 /add、/delete 等。

二、net1.exe 的由来与角色分工

它为什么存在

net1.exe 的诞生与“千年虫”问题直接相关。在 Windows NT 和 Windows 2000 时期,net.exe 在处理某些与时间相关的操作时存在 Y2K 缺陷。微软为此创建了一个临时解决方案:net1.exe,作为修复版本来执行受影响的命令。

这个问题在 Windows XP 发布前就已经修复,但 net1.exe 被永久保留了下来。原因很简单:向后兼容。大量第三方脚本和批处理文件在编写时可能明确调用了 net1 而非 net,如果删除它,这些脚本会立即失效。

二者的分工

net.exe 和 net1.exe 在大多数 Windows 版本中功能几乎相同,但内部存在明确分工:

  • net.exe 是前台“调度员”:接收用户输入的命令,判断该命令由谁执行。
  • net1.exe 是后台“执行者”:负责实际完成部分子命令的操作。

具体来说,以下命令会调用 net1.exe 来执行:

会调用 net1.exe 的命令 不调用 net1.exe 的命令
net localgroup net use
net start net view
net stop
net share

一个值得注意的细节是:某些情况下,如果直接用 net1 执行 net 可以处理的命令,系统反而会显示 net 的帮助信息。这说明 net1.exe 只承担了部分功能,并非 net.exe 的完整替代品。

net1.exe 位于 C:\Windows\System32(64 位系统中 32 位版本位于 SysWOW64),是微软签名的合法系统文件,不应被删除。

三、net 主要子命令

net 命令支持多种子命令,以下是常见子命令及其功能概述:

1. net user

用于管理本地或远程计算机上的用户账户,包括添加、修改、删除用户以及查看用户信息。

  • 语法:
    net user [username [password | *] [/add] [options]] [/domain]
    net user username [/delete] [/domain]
  • 常见选项:
    • /add:添加新用户。
    • /delete:删除用户。
    • /domain:在域控制器上执行操作(而非本地计算机)。
    • /active:{yes | no}:启用或禁用账户。
    • /passwordchg:{yes | no}:允许或禁止用户更改密码。
    • /times:{times | all}:设置登录时间限制。
  • 示例:
    • 添加用户 jdoe 并设置密码:
      net user jdoe Password123 /add
    • 查看用户 jdoe 的详细信息:
      net user jdoe
    • 禁用用户 jdoe:
      net user jdoe /active:no

2. net group

用于管理全局组(在域环境中)或本地组(在非域环境中,实际调用 net localgroup)。

  • 语法:
    net group [groupname [/comment:"text"]] [/domain]
    net group groupname {/add | /delete} [/domain]
    net group groupname username [...] {/add | /delete} [/domain]
  • 示例:
    • 创建域组 Developers:
      net group Developers /add /domain
    • 将用户 jdoe 添加到 Developers 组:
      net group Developers jdoe /add /domain

3. net localgroup

用于管理本地计算机上的本地组(与 net group 类似,但专用于本地组)。

  • 语法:
    net localgroup [groupname [/comment:"text"]] [/domain]
    net localgroup groupname {/add | /delete} [/domain]
    net localgroup groupname username [...] {/add | /delete} [/domain]
  • 示例:
    • 创建本地组 Guests:
      net localgroup Guests /add
    • 将用户 jdoe 添加到 Guests 组:
      net localgroup Guests jdoe /add

4. net share

用于管理共享资源(如文件夹或打印机),包括创建、修改或删除共享。

  • 语法:
    net share sharename=drive:path [/grant:user,{read | change | full}] [/users:number | /unlimited] [/remark:"text"] [/cache:option]
    net share sharename [/delete]
  • 常见选项:
    • /grant:user,permission:设置共享权限(read、change、full)。
    • /users:number:限制同时访问的用户数。
    • /delete:删除共享。
  • 示例:
    • 共享 C:\data 文件夹为 DataShare,授予 jdoe 读取权限:
      net share DataShare=C:\data /grant:jdoe,read
    • 删除共享 DataShare:
      net share DataShare /delete

5. net use

用于连接、断开或查看网络资源(如共享文件夹或打印机)的映射。

  • 语法:
    net use [devicename | *] [\\computername\sharename[\volume]] [password | *] [/user:[domainname\]username] [/persistent:{yes | no}]
    net use [devicename | *] [/delete]
  • 常见选项:
    • /persistent:{yes | no}:是否在重启后保留连接。
    • /delete:断开连接。
  • 示例:
    • 映射网络共享 \\server\data 到驱动器 Z::
      net use Z: \\server\data
    • 断开 Z: 驱动器的连接:
      net use Z: /delete

6. net view

用于显示网络中可用计算机、共享资源或域列表。

  • 语法:
    net view [\\computername | /domain[:domainname]] [/network:nw]
  • 示例:
    • 查看当前域中的计算机:
      net view /domain
    • 查看 \\server 的共享资源:
      net view \\server

7. net accounts

用于管理用户账户的密码和登录策略(如密码长度、账户锁定策略等)。

  • 语法:
    net accounts [/forcelogoff:{minutes | no}] [/minpwlen:length] [/maxpwage:{days | unlimited}] [/minpwage:days] [/uniquepw:number] [/domain]
  • 示例:
    • 设置密码最短长度为 8 个字符:
      net accounts /minpwlen:8
    • 设置密码最长有效期为 90 天:
      net accounts /maxpwage:90

8. net start/stop

用于启动或停止 Windows 服务。

  • 语法:
    net start servicename
    net stop servicename
  • 示例:
    • 启动打印服务:
      net start spooler
    • 停止打印服务:
      net stop spooler

9. net time

用于同步或查看计算机的时间。

  • 语法:
    net time [\\computername | /domain[:domainname] | /rtsdomain[:domainname]] [/set]
  • 示例:
    • 同步本地计算机时间与域控制器:
      net time /domain /set

10. net computer

用于在域中添加或删除计算机账户。

  • 语法:
    net computer \\computername {/add | /del}
  • 示例:
    • 添加计算机 PC01 到域:
      net computer \\PC01 /add

11. net config

用于显示或配置工作站或服务器服务。

  • 语法:
    net config {server | workstation} [options]
  • 示例:
    • 显示工作站配置:
      net config workstation

12. net file

用于管理打开的共享文件,包括查看和关闭。

  • 语法:
    net file [id [/close]]
  • 示例:
    • 关闭文件 ID 为 123 的共享文件:
      net file 123 /close

13. net session

用于管理服务器的会话,包括查看和断开。

  • 语法:
    net session [\\computername] [/delete]
  • 示例:
    • 断开与 \\client01 的会话:
      net session \\client01 /delete

14. net print

用于管理打印作业和打印机。

  • 语法:
    net print \\computername\sharename [job# [/hold | /release | /delete]]
  • 示例:
    • 查看打印队列:
      net print \\server\printer

15. net statistics

显示工作站或服务器的统计信息。

  • 语法:
    net statistics [workstation | server]
  • 示例:
    • 查看服务器统计信息:
      net statistics server

四、net 命令使用场景与示例

以下是一些常见的 net 命令使用场景及其示例,展示如何在实际环境中应用。

1. 用户账户管理

为新员工创建一个用户账户并设置密码:

net user jsmith Password123 /add /fullname:"John Smith" /comment:"Developer"

将用户 jsmith 添加到本地 Administrators 组:

net localgroup Administrators jsmith /add

2. 共享文件夹管理

共享 C:\projects 文件夹,授予 Everyone 读取权限,并限制最多 10 个用户同时访问:

net share Projects=C:\projects /grant:Everyone,read /users:10

查看所有共享资源:

net share

3. 网络驱动器映射

将 \\server\data 共享映射到本地 Z: 驱动器,并持久保存:

net use Z: \\server\data /persistent:yes

断开所有网络连接:

net use * /delete

4. 服务管理

重启 Windows Update 服务:

net stop wuauserv
net start wuauserv

5. 时间同步

将本地计算机时间与域控制器同步:

net time /domain /set

五、net 命令的注意事项

  1. 权限要求:
    • 大多数 net 命令需要管理员权限,尤其是在修改用户、组或共享时。
    • 域操作(如 net group)需要域管理员权限。
  2. 域与本地:
    • 使用 /domain 选项时,命令作用于域控制器;否则,作用于本地计算机。
    • 非域环境中,net group 等效于 net localgroup。
  3. 语言依赖性:
    • 某些组名(如 Everyone)在非英语系统上可能不同,建议使用 SID(如 *S-1-1-0)以提高兼容性。
  4. 错误处理:
    • 如果命令失败,检查错误代码(如 System error 5 表示“拒绝访问”)以定位问题。
  5. 脚本化:
    • net 命令适合在批处理脚本中使用,但对于复杂任务,PowerShell(如 Get-LocalUser、Set-LocalGroup)可能更灵活。

六、与其他工具的对比

  • PowerShell:PowerShell 提供更现代化的命令(如 New-LocalUser、Add-LocalGroupMember),支持脚本化和复杂逻辑,但学习曲线较陡。
  • GUI 工具:如“计算机管理”或“共享和存储管理”,适合手动操作,但不适合批量任务。
  • sc 命令:专用于服务管理,比 net start/stop 更细粒度。
  • wmic:可用于远程管理,但已被 PowerShell 取代。

net 命令在简单性和跨版本兼容性上具有优势,适合快速管理和脚本化任务。

工具 适用场景 优势 局限
net 快速管理、兼容旧脚本 语法简单、全版本可用 输出非结构化、功能有限
PowerShell 自动化、复杂逻辑 对象化输出、功能丰富 学习曲线较陡
sc 服务深度管理 细粒度控制 仅限服务
GUI 工具 手动操作 直观 不适合批量任务

net 的独特价值在于无处不在。在 PE 环境、Server Core 安装或旧版系统中,图形工具可能不可用,但 net 几乎总是可用的。

七、总结

net 命令是 Windows 系统中管理用户、组、共享、服务和网络资源的强大工具。其子命令覆盖了从用户账户创建到网络驱动器映射的多种场景,适合系统管理员和高级用户使用。通过掌握 net 命令的语法和选项,用户可以高效地执行本地或远程管理任务。在实际使用中,需注意权限要求、域环境差异以及语言兼容性。对于更复杂的自动化任务,可结合 PowerShell 或其他工具使用。

参考资料:

原文 https://blog.csdn.net/2301_79518550/article/details/147481415