如何从Event Log 4741提取计算机名,实现新建计算机自动移至指定OU
自动将新创建的计算机移动到指定OU(通过Event ID 4741触发)
你遇到的核心问题是Get-EventLog无法直接解析4741事件里的计算机账户信息,因为它对安全日志的扩展字段支持有限。改用Get-WinEvent就能正确提取事件中的计算机名,下面是完整的解决步骤:
1. 从4741事件中提取计算机账户信息
4741事件(计算机账户创建)的关键数据存在事件的Properties集合里,其中第一个元素(索引0)就是新创建计算机的SamAccountName(格式为计算机名$)。用以下命令可以提取:
# 获取最新的4741事件 $event = Get-WinEvent -LogName Security -FilterXPath "*[System[EventID=4741]]" -MaxEvents 1 # 提取带$后缀的计算机账户名 $computerSamAccount = $event.Properties[0].Value # 可选:去掉$后缀得到纯计算机名 $computerName = $computerSamAccount -replace '\$$', ''
2. 修改自动执行的移动脚本
把你原来的示例脚本改成动态获取计算机名的版本,这里推荐直接用SamAccountName查询AD(避免和用户账户重名):
# 获取触发任务的4741事件 $event = Get-WinEvent -LogName Security -FilterXPath "*[System[EventID=4741]]" -MaxEvents 1 $computerSamAccount = $event.Properties[0].Value # 匹配规则(注意末尾的$,对应计算机账户的SamAccountName格式) if ($computerSamAccount -match '^ORD\d{3}\$$') { # 移动到目标OU Get-ADComputer -Identity $computerSamAccount | Move-ADObject -TargetPath "OU=X,DC=X,DC=X" }
3. 计划任务配置注意事项
- 触发条件:设置为「安全日志中记录了事件ID 4741」
- 执行账户:必须拥有以下权限:读取安全日志、读取AD计算机对象、修改AD对象的OU属性
- 环境依赖:确保执行脚本的主机已安装RSAT-AD-PowerShell模块(否则
Get-ADComputer命令无法运行)
补充说明
你之前用Get-EventLog查不到SamAccountName是因为该cmdlet仅解析了事件的基础字段,没有处理安全日志的扩展事件数据。Get-WinEvent会保留事件的原始属性集合,所以能正确提取到所需的账户信息。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

