Windows系统管理bat批处理脚本的示例代码

Written by

in

文章目录
  • 在Windows系统管理中,批处理脚本(.bat文件)是一种强大而高效的工具,它能够自动化执行一系列命令,简化系统管理员的日常工作。本文将深入解析一个用于管理用户账户的批处理脚本,通过逐行翻译和注释,帮助读者理解其工作原理,并探讨其在系统安全管理中的实际应用。
  • 原文脚本: @echo off setlocal enabledelayedexpansion net user|find /v “命令成功完成” >tmp.txt echo.>tmp2.txt for /f “skip=4 tokens=1” %%i in (tmp.txt) do echo %%i >>tmp2.txt for /f “skip=4 tokens=2” %%i in (tmp.txt) do echo %%i >>tmp2.txt for /f “skip=4 tokens=3” %%i in (tmp.txt) do echo %%i >>tmp2.txt for /f “skip=1” %%i in (tmp2.txt) do ( if not %%i==Administrator net user %%i /active:no ) del tmp.txt del tmp2.txt echo 俇傖 pause 中文翻译: @echo off :: 关闭命令回显,使脚本运行时不显示执行的命令 setlocal enabledelayedexpansion :: 启用延迟环境变量扩展 net user|find /v “命令成功完成” >tmp.txt :: 获取用户列表,过滤掉包含特定字符的行,结果保存到tmp.txt echo.>tmp2.txt :: 创建空文件tmp2.txt for /f “skip=4 tokens=1” %%i in (tmp.txt) do echo %%i >>tmp2.txt :: 从第5行开始,提取每行第1列内容到tmp2.txt for /f “skip=4 tokens=2” %%i in (tmp.txt) do echo %%i >>tmp2.txt :: 从第5行开始,提取每行第2列内容到tmp2.txt for /f “skip=4 tokens=3” %%i in (tmp.txt) do echo %%i >>tmp2.txt :: 从第5行开始,提取每行第3列内容到tmp2.txt for /f “skip=1” %%i in (tmp2.txt) do ( :: 从第2行开始读取tmp2.txt中的每一行 if not %%i==Administrator net user %%i /active:no :: 如果不是Administrator账户,则禁用该账户 ) del tmp.txt :: 删除临时文件tmp.txt del tmp2.txt :: 删除临时文件tmp2.txt echo 俇傖 :: 输出特定字符(可能用于标识脚本执行完成) pause :: 暂停,等待用户按键继续
  • 在现代IT运维中,批处理脚本仍然是重要的自动化工具: 基础设施即代码:通过脚本实现系统配置的版本控制 持续集成/部署:自动化构建和部署流程 监控告警:定期检查系统状态并触发告警 备份恢复:自动化数据备份和恢复操作
  • 最小权限原则:仅为脚本分配必要的最小权限 输入验证:对所有外部输入进行严格验证 日志记录:详细记录所有操作供审计使用 定期审查:定期审查和更新脚本内容 代码签名:对重要脚本进行数字签名
  • 批处理脚本作为Windows系统管理的传统工具,虽然在现代IT环境中面临PowerShell等更强大工具的竞争,但其简单、高效的特点使其在某些场景下仍然不可替代。理解批处理脚本的工作原理和编写规范,对于系统管理员来说仍然是必备技能。通过本文的解析,希望读者能够掌握批处理脚本的基本知识,并能够在实际工作中安全、高效地使用这一工具。 版权声明:本文仅供参考学习,实际生产环境中使用脚本前应进行充分测试,并遵循所在组织的安全策略和操作规程。任何不当使用造成的后果由使用者自行承担。 以上就是Windows系统管理bat批处理脚本的示例代码的详细内容,更多关于Windows管理bat批处理脚本的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: 在Windows批处理(.bat)文件中获取拖入文件信息的各种方法 Windows批处理脚本(.bat)实现最小化运行的多种方案 使用Windows批处理bat实现文件重命名加时间戳 Windows中使用BAT文件运行Java Main方法的完整指南 windows批处理bat脚本获取并且处理当前日期与时间信息
  • 目录
    • 一、引言
    • 二、脚本内容翻译与整体解读
    • 三、关键技术点详解
      • 1. 延迟环境变量扩展
      • 2. net命令的使用
      • 3. 管道与find命令
      • 4. for命令的文本处理能力
    • 四、脚本的应用场景与潜在风险
      • 应用场景:
      • 潜在风险与注意事项:
    • 五、改进建议与最佳实践
      • 改进版脚本示例:
    • 六、批处理脚本在DevOps中的应用
      • 七、安全建议
        • 八、结语

          在Windows系统管理中,批处理脚本(.bat文件)是一种强大而高效的工具,它能够自动化执行一系列命令,简化系统管理员的日常工作。本文将深入解析一个用于管理用户账户的批处理脚本,通过逐行翻译和注释,帮助读者理解其工作原理,并探讨其在系统安全管理中的实际应用。

          原文脚本:

          @echo off
          setlocal enabledelayedexpansion
          net user|find /v "命令成功完成" >tmp.txt
          echo.>tmp2.txt
          for /f "skip=4 tokens=1" %%i in (tmp.txt) do echo %%i >>tmp2.txt
          for /f "skip=4 tokens=2" %%i in (tmp.txt) do echo %%i >>tmp2.txt
          for /f "skip=4 tokens=3" %%i in (tmp.txt) do echo %%i >>tmp2.txt
          for /f "skip=1" %%i in (tmp2.txt) do (
          if not %%i==Administrator net user %%i /active:no
          )
          del tmp.txt
          del tmp2.txt
          echo 俇傖
          pause
          

          中文翻译:

          @echo off                       :: 关闭命令回显,使脚本运行时不显示执行的命令
          setlocal enabledelayedexpansion :: 启用延迟环境变量扩展
          net user|find /v "命令成功完成" >tmp.txt  :: 获取用户列表,过滤掉包含特定字符的行,结果保存到tmp.txt
          echo.>tmp2.txt                  :: 创建空文件tmp2.txt
          for /f "skip=4 tokens=1" %%i in (tmp.txt) do echo %%i >>tmp2.txt  :: 从第5行开始,提取每行第1列内容到tmp2.txt
          for /f "skip=4 tokens=2" %%i in (tmp.txt) do echo %%i >>tmp2.txt  :: 从第5行开始,提取每行第2列内容到tmp2.txt
          for /f "skip=4 tokens=3" %%i in (tmp.txt) do echo %%i >>tmp2.txt  :: 从第5行开始,提取每行第3列内容到tmp2.txt
          for /f "skip=1" %%i in (tmp2.txt) do (                          :: 从第2行开始读取tmp2.txt中的每一行
          if not %%i==Administrator net user %%i /active:no                :: 如果不是Administrator账户,则禁用该账户
          )
          del tmp.txt                     :: 删除临时文件tmp.txt
          del tmp2.txt                    :: 删除临时文件tmp2.txt
          echo 俇傖                       :: 输出特定字符(可能用于标识脚本执行完成)
          pause                           :: 暂停,等待用户按键继续
          

          setlocal enabledelayedexpansion是批处理脚本中一个重要的命令,它允许在代码块(如for循环、if语句)内部实时获取变量的更新值,而不是解析代码块时的初始值。

          net user是Windows系统中强大的用户管理命令,可以:

          • 查看所有用户账户:net user
          • 创建新用户:net user 用户名 密码 /add
          • 删除用户:net user 用户名 /delete
          • 禁用/启用用户:net user 用户名 /active:no/active:yes

          |是管道符号,将前一个命令的输出作为后一个命令的输入。find /v "字符串"用于过滤掉包含指定字符串的行,脚本中使用了看似乱码的字符串,可能是为了避免特定监控工具的检测。

          批处理的for /f命令非常强大,可以:

          • skip=n:跳过前n行
          • tokens=m:提取每行的第m列
          • 支持多个tokens:tokens=1,3,5tokens=1-3

          1. 系统安全加固:在部署新系统时,禁用不必要的默认账户
          2. 批量用户管理:在多用户环境中快速禁用多个账户
          3. 自动化维护:定期清理和禁用不活跃的用户账户

          1. 权限问题:执行此类脚本需要管理员权限
          2. 误操作风险:可能导致合法用户无法登录
          3. 安全风险:脚本中硬编码的过滤字符串可能被绕过
          4. 审计追踪:应记录所有账户变更操作

          @echo off
          :: ============================================
          :: 安全用户管理脚本
          :: 功能:禁用除指定管理员外的所有用户账户
          :: 作者:系统管理员
          :: 版本:2.0
          :: 日期:2024年
          :: ============================================
          
          setlocal enabledelayedexpansion
          
          :: 定义变量
          set LOG_FILE=user_management_%date:~0,4%%date:~5,2%%date:~8,2%.log
          set ADMIN_ACCOUNT=Administrator
          set ALLOWED_ACCOUNTS=Administrator,Guest
          
          :: 记录开始时间
          echo ========================================== >> %LOG_FILE%
          echo 脚本开始执行时间:%date% %time% >> %LOG_FILE%
          echo ========================================== >> %LOG_FILE%
          
          :: 获取当前用户列表
          echo 正在获取用户列表... >> %LOG_FILE%
          net user > tmp_users.txt
          
          :: 处理用户列表
          for /f "skip=4 tokens=1" %%i in (tmp_users.txt) do (
              set CURRENT_USER=%%i
              set IS_ALLOWED=0
              
              :: 检查是否为允许的账户
              for %%a in (%ALLOWED_ACCOUNTS%) do (
                  if "!CURRENT_USER!"=="%%a" set IS_ALLOWED=1
              )
              
              :: 禁用非允许账户
              if !IS_ALLOWED!==0 (
                  echo 正在禁用用户:!CURRENT_USER! >> %LOG_FILE%
                  net user "!CURRENT_USER!" /active:no
                  if errorlevel 1 (
                      echo 错误:禁用用户 !CURRENT_USER! 失败 >> %LOG_FILE%
                  ) else (
                      echo 成功:用户 !CURRENT_USER! 已被禁用 >> %LOG_FILE%
                  )
              ) else (
                  echo 跳过:用户 !CURRENT_USER! 在允许列表中 >> %LOG_FILE%
              )
          )
          
          :: 清理临时文件
          del tmp_users.txt
          
          :: 记录结束时间
          echo ========================================== >> %LOG_FILE%
          echo 脚本执行结束时间:%date% %time% >> %LOG_FILE%
          echo ========================================== >> %LOG_FILE%
          
          echo 用户管理操作已完成,详情请查看日志文件:%LOG_FILE%
          pause
          

          在现代IT运维中,批处理脚本仍然是重要的自动化工具:

          1. 基础设施即代码:通过脚本实现系统配置的版本控制
          2. 持续集成/部署:自动化构建和部署流程
          3. 监控告警:定期检查系统状态并触发告警
          4. 备份恢复:自动化数据备份和恢复操作

          1. 最小权限原则:仅为脚本分配必要的最小权限
          2. 输入验证:对所有外部输入进行严格验证
          3. 日志记录:详细记录所有操作供审计使用
          4. 定期审查:定期审查和更新脚本内容
          5. 代码签名:对重要脚本进行数字签名

          批处理脚本作为Windows系统管理的传统工具,虽然在现代IT环境中面临PowerShell等更强大工具的竞争,但其简单、高效的特点使其在某些场景下仍然不可替代。理解批处理脚本的工作原理和编写规范,对于系统管理员来说仍然是必备技能。通过本文的解析,希望读者能够掌握批处理脚本的基本知识,并能够在实际工作中安全、高效地使用这一工具。

          版权声明:本文仅供参考学习,实际生产环境中使用脚本前应进行充分测试,并遵循所在组织的安全策略和操作规程。任何不当使用造成的后果由使用者自行承担。

          以上就是Windows系统管理bat批处理脚本的示例代码的详细内容,更多关于Windows管理bat批处理脚本的资料请关注风君子博客其它相关文章!

          您可能感兴趣的文章:

          • 在Windows批处理(.bat)文件中获取拖入文件信息的各种方法
          • Windows批处理脚本(.bat)实现最小化运行的多种方案
          • 使用Windows批处理bat实现文件重命名加时间戳
          • Windows中使用BAT文件运行Java Main方法的完整指南
          • windows批处理bat脚本获取并且处理当前日期与时间信息

          站内搜索