编写多服务账号状态检测脚本并输出结果用于邮件发送的问题
批量检查域服务账号激活状态的批处理脚本修复方案
核心错误修正点
你的脚本混用了Bash和Windows批处理语法,同时变量定义、循环逻辑存在问题,以下是修正后的完整解决方案:
正确的批处理脚本(纯文本CSV输出,适配邮件)
@echo off setlocal enabledelayedexpansion :: 定义需要检查的服务账号列表,用空格分隔 set "SVC_ACCOUNTS=svc1 svc2 svc3" :: 初始化输出内容(CSV格式,方便邮件展示或导出) set "OUTPUT=服务账号,激活状态\n" for %%s in (%SVC_ACCOUNTS%) do ( :: 默认标记为未激活 set "IS_ACTIVE=No" :: 执行域账号激活状态检查 net user "%%s" /Domain 2>NUL | find /I "Account active" | find /I "Yes" >NUL && set "IS_ACTIVE=Yes" :: 将当前账号结果追加到输出 set "OUTPUT=!OUTPUT!%%s,!IS_ACTIVE!\n" ) :: 打印结果,若需保存到文件可改为 > account_status.csv echo %OUTPUT% endlocal
脚本关键说明
setlocal enabledelayedexpansion:启用延迟扩展,解决循环内变量赋值/引用的失效问题SVC_ACCOUNTS:用空格分隔所有待检查账号,直接添加账号名即可扩展范围- 循环内通过
%%s引用当前遍历的账号,避免变量引用错误 - 生成的CSV格式内容可直接复制到邮件正文,或保存为文件作为邮件附件
进阶:生成HTML表格输出(更美观的邮件格式)
如果需要更规范的邮件展示效果,可修改脚本生成HTML表格:
@echo off setlocal enabledelayedexpansion set "SVC_ACCOUNTS=svc1 svc2 svc3" set "HTML_OUTPUT=<html><body><table border='1'><tr><th>服务账号</th><th>激活状态</th></tr>" for %%s in (%SVC_ACCOUNTS%) do ( set "IS_ACTIVE=No" net user "%%s" /Domain 2>NUL | find /I "Account active" | find /I "Yes" >NUL && set "IS_ACTIVE=Yes" set "HTML_OUTPUT=!HTML_OUTPUT!<tr><td>%%s</td><td>!IS_ACTIVE!</td></tr>" ) set "HTML_OUTPUT=!HTML_OUTPUT!</table></body></html>" echo %HTML_OUTPUT% > account_status.html endlocal
内容的提问来源于stack exchange,提问作者Zain
相关产品推荐
相关产品推荐

