You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

替代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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:55:27