替代ADSI添加用户到管理员组的兼容PowerShell作业方案求助
解决PowerShell作业中添加用户到管理员组的问题
原使用ADSI的代码在PowerShell作业中无法运行,尝试Add-ADGroupMember命令时出现以下错误:
add-adgroupmember : Cannot find an object with identity: '' under: ''
以下是几种可行的解决方案:
一、兼容PowerShell作业的ADSI写法
ADSI本身可以在作业中运行,问题通常出在参数传递环节,调整后的可运行脚本如下:
# 定义作业执行的脚本块,接收目标计算机名、用户名两个参数 $jobScript = { param($ComputerSN, $UserName) # 连接目标计算机的本地管理员组 $adminGroup = [ADSI]"WinNT://$ComputerSN/Administrators,group" # 连接域用户(这里的USA是域名) $user = [ADSI]"WinNT://USA/$UserName,user" try { $adminGroup.Add($user.Path) return "用户 $UserName 已成功添加到 $ComputerSN 的管理员组" } catch { return "添加失败: $_" } } # 替换为实际的目标计算机名和用户名 $targetComputer = "你的目标计算机名" $targetUser = "要添加的用户名" # 启动后台作业 $addUserJob = Start-Job -ScriptBlock $jobScript -ArgumentList $targetComputer, $targetUser # 显示动态进度条,直到作业完成 while ($addUserJob.State -eq 'Running') { Write-Progress -Activity "正在添加用户到管理员组" -Status "处理中,请稍候..." -PercentComplete (-1) Start-Sleep -Seconds 1 } # 获取作业执行结果并清理作业 Receive-Job $addUserJob Remove-Job $addUserJob
注意:启动作业时必须通过-ArgumentList传递参数,确保作业环境能获取到正确的计算机名和用户名。
二、正确使用Add-ADGroupMember(仅适用于域组)
Add-ADGroupMember是Active Directory模块的命令,只能操作域组,不能直接修改本地计算机的管理员组。正确的用法示例:
# 添加域用户到域管理员组(用组名和用户的域账号) Add-ADGroupMember -Identity "Domain Admins" -Members "USA\$UserName" # 也可以用组或用户的DistinguishedName、SID等标识 Add-ADGroupMember -Identity "CN=Domain Admins,CN=Users,DC=usa,DC=com" -Members "CN=张三,CN=Users,DC=usa,DC=com"
之前的错误是因为没有传递有效的组或用户标识,确保参数中填入实际存在的组名/用户名。
三、更兼容的本地组操作方法:net localgroup命令
如果ADSI在作业中仍有兼容性问题,可以使用net localgroup命令,它在PowerShell作业中稳定性更好:
$jobScript = { param($ComputerSN, $UserName) # 构造命令:本地计算机直接执行,远程计算机需开启admin共享 if ($ComputerSN -eq $env:COMPUTERNAME) { $cmd = "net localgroup Administrators USA\$UserName /add /domain" } else { $cmd = "net \\$ComputerSN localgroup Administrators USA\$UserName /add /domain" } Invoke-Expression $cmd # 根据退出码判断结果 if ($LASTEXITCODE -eq 0) { return "用户添加成功" } else { return "添加失败,退出代码: $LASTEXITCODE" } } # 启动作业并显示进度条 $addUserJob = Start-Job -ScriptBlock $jobScript -ArgumentList $targetComputer, $targetUser while ($addUserJob.State -eq 'Running') { Write-Progress -Activity "执行本地组添加操作" -Status "处理中..." -PercentComplete (-1) Start-Sleep -Seconds 1 } Receive-Job $addUserJob Remove-Job $addUserJob
内容的提问来源于stack exchange,提问作者ThePostMan
相关产品推荐
相关产品推荐

