前言背景说明:域内计算机资产盘点与 U 盘、光驱权限管控的实际需求方案概述:使用 PowerShell 调用 dsquery 获取域控计算机信息,并写入 SqlServer 数据库适用读者与环境:具备域管理员权限、熟悉 PowerShell 与 SqlServer 基础操作的运维人员执行流程概览在进入具体代码之前,先用一张流程图把脚本的主干串起来,便于理解各阶段之间的依赖关系与失败处理位置。flowchart TD A[开始] -- B[建立数据库连接] B -- C[清空目标表] C -- D[dsquery 查询 OU 计算机] D -- E{结果数量判断} E --|0 条| F[记录 WARN 日志并提示 OU 路径] E --|1 条| G[解析单条记录] E --|多条| H[循环解析每条记录] G -- I[参数化插入并记录日志] H -- I I -- J[统计成功与失败数] F -- J J -- K[finally 释放连接] K -- L[结束]各阶段的失败处理策略如下:建立数据库连接失败时记录 ERROR 日志并直接抛出,后续步骤不再执行;清空目标表失败同样视为致命异常,记录后中断,避免在脏数据上继续写入;dsquery 查询执行失败记录 ERROR 并中断,而查询结果为空只记录 WARN 并继续走到统计阶段;逐条插入时单条失败只累加失败计数并记录 ERROR,不中断循环,保证其余计算机仍能入库。无论流程在哪一步中断,finally都会释放SqlCommand与SqlConnection,并写入脚本结束日志。一、操作 SqlServer 数据库数据库连接配置:定义数据库名、目标表、服务器地址与账号密码变量建立连接与命令对象:通过 System.Data.SqlClient 创建 SqlConnection 与 SqlCommand执行增删改操作:使用 ExecuteNonQuery 并注意返回值接收,避免输出污染控制台二、配置导出的 OU 路径OU 路径格式说明:区分 OU= 与 CN= 的写法及 DC 层级含义多组织单元定义:分别定义 CLIENTSOU、Computers、U 盘专用与光驱专用 OU路径校验建议:使用 dsquery 或 AD 用户和计算机控制台确认路径有效性三、获取域控内计算机信息dsquery 基本用法:指定 OU 与 -limit 参数控制返回数量结果解析:按逗号与等号拆分提取计算机名与所属部门单条与多条结果处理:区分 count 为 0、1 和多个时的分支逻辑四、数据写入与导出效果清空历史数据:执行 delete 语句重置目标表逐条插入记录:拼接 pcname、department、ou、status、create_time 字段导出结果展示:数据库表中的最终数据效果截图说明五、完整源码与说明完整脚本:整合数据库、OU 路径与循环写入的完整 PowerShell 代码关键点注释:时间戳生成、状态字段含义与 SQL 拼接注意事项扩展思路:增加异常捕获、日志记录与定时任务调度总结方案价值:实现域内计算机资产自动采集与集中存储注意事项:SQL 拼接注入风险、权限最小化与数据定期更新参考资料Microsoft Docs:dsquery computer 命令参考Microsoft Docs:System.Data.SqlClient.SqlConnection 类说明PowerShell 官方文档:Get-Date 与字符串格式化目录操作SqlServer数据库配置导出的OU路径获取域控内计算机信息导出效果源码操作SqlServer数据库#配置导出的数据库的信息 $Database = 'ADExchange' $Table = 'ADPC_OUTPUT' $Server = '192.168.107.110' $UserName = 'sa' $Password = '123456'#powershell操作SqlServer数据库模块引用 $SqlConn = New-Object System.Data.SqlClient.SqlConnection $SqlConn.ConnectionString="Data Source=$Server;Initial Catalog=$Database;user id=$UserName;pwd=$Password" $SqlConn.Open() $SqlCmd = New-Object System.Data.SqlClient.SqlCommand $SqlCmd.Connection = $SqlConn配置导出的OU路径#组织机构路径 $OU_CLIENTSOU="OU=CLIENTSOU,DC=SAINTS,DC=COM" $OU_COM
阅读完成 · 觉得有帮助?