如何在Active Directory指定OU的所有计算机上执行PowerShell脚本
批量在AD特定OU计算机上执行PowerShell脚本方案
问题背景
需要在AD特定OU(OU=Location,OU=Corporate,DC=corp,DC=corporation,DC=com)内的所有计算机上执行创建快捷方式的PowerShell脚本,无组策略权限,希望通过PowerShell AD命令实现批量执行。
前提条件
- 执行账号需拥有目标计算机的本地管理员权限
- 目标计算机已启用WinRM(Windows远程管理服务,域环境通常默认开启)
具体步骤
1. 获取目标OU内的在线计算机列表
使用Get-ADComputer筛选目标OU下的计算机,并通过Test-Connection验证在线状态:
# 获取目标OU内的在线计算机名称 $computers = Get-ADComputer -SearchBase "OU=Location,OU=Corporate,DC=corp,DC=corporation,DC=com" -Filter * | Where-Object { Test-Connection $_.Name -Count 1 -Quiet } | Select-Object -ExpandProperty Name
2. 封装执行脚本(修正原脚本问题)
原脚本存在变量大小写不一致、路径兼容性问题,修正后封装为脚本块:
$scriptBlock = { # 替换为远程计算机可访问的路径(建议用UNC共享路径) $SourceFilePath = "\\corp.corporation.com\shared\your-target-app.exe" # 建议使用公共桌面,避免用户目录权限限制 $ShortcutPath = "C:\Users\Public\Desktop\nameofplace.lnk" $WScriptObj = New-Object -ComObject WScript.Shell $shortcut = $WScriptObj.CreateShortcut($ShortcutPath) $shortcut.TargetPath = $SourceFilePath $shortcut.WindowStyle = 1 $shortcut.Hotkey = "CTRL+SHIFT+T" $shortcut.Save() }
注意:原脚本中
$ShortCut.Hotkey的大小写需统一为$shortcut.Hotkey,避免变量未定义错误;SourceFilePath若为本地路径仅在你的机器有效,需替换为远程机器可访问的UNC路径或本地已存在的路径。
3. 远程批量执行脚本
遍历计算机列表,通过Invoke-Command远程执行脚本:
foreach ($computer in $computers) { try { Invoke-Command -ComputerName $computer -ScriptBlock $scriptBlock -ErrorAction Stop Write-Host "✅ 脚本在 $computer 上执行成功" } catch { Write-Host "❌ 脚本在 $computer 上执行失败: $_" } }
额外处理
若目标计算机未开启WinRM,可尝试执行以下命令开启(需本地管理员权限):
Invoke-Command -ComputerName $computer -ScriptBlock { Enable-PSRemoting -Force } -ErrorAction Stop
提示:若域组策略禁用WinRM,此命令可能无法生效。
内容的提问来源于stack exchange,提问作者dopaper
相关产品推荐
相关产品推荐

