编写PowerShell脚本实现远程Windows设备本地管理员检测与结果上报
远程本地管理员账户检测脚本实现思路
远程检测模块设计
- 连接方式优先采用CIM会话:通过
New-CimSession建立和目标远程设备的加密连接,相比传统WMI调用稳定性更高、权限校验开销更小,适合批量远程查询场景 - 检测逻辑避开易受系统语言、自定义配置影响的硬编码匹配:内置本地管理员账户的唯一固定标识是用户SID后缀为
-500,查询时直接从目标设备的Win32_UserAccount类中筛选LocalAccount = True且SID.EndsWith("-500")的条目,只要查询结果非空,就判定该账户存在——不受账户被重命名、状态被修改的影响,检测准确率更高 - 增加全链路异常捕获:把目标机器网络不通、WinRM服务未启用、执行账号权限不足等连接/查询类错误,统一纳入检测结果字段,避免脚本无提示中断
结果上报与通知模块设计
- ManageEngine Desktop Central上报适配:
- 利用目标设备已安装的Desktop Central本地Agent能力上报检测结果,脚本直接调用Agent自带的命令行提交接口,把结构化的检测结果(设备标识、内置管理员存在状态、检测时间、异常信息)按要求的字段格式推送即可,不需要在脚本内硬编码服务端地址、认证密钥,降低凭证泄露风险
- 邮件通知兜底逻辑:
- 用PowerShell原生的
Send-MailMessage组件对接内部SMTP服务器发信,不需要引入第三方依赖 - 通知内容按风险等级区分:检测到内置管理员账户存在为高优先级告警,附上目标设备名、账户当前状态;远程连接失败为中优先级告警,附上具体报错原因,方便运维快速定位
- 用PowerShell原生的
落地注意事项
- 执行权限校验:运行脚本的账号必须对目标远程设备有管理员级别的远程访问权限,否则会被WinRM拦截连接请求,无法获取本地账户的查询结果
- 执行策略适配:脚本开头增加进程级的执行策略配置
Set-ExecutionPolicy -Scope Process Bypass,避免本地默认执行策略拦截脚本运行 - 结果本地缓存:每台设备的检测结果先临时写入本地CSV文件留存,等上报、通知流程全部跑完再清理临时文件,避免上报链路异常导致检测结果丢失
内容的提问来源于stack exchange,提问作者Siva Adhiban
相关产品推荐
相关产品推荐

