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

如何编写PowerShell脚本禁用单台设备的Windows域用户账户(离线场景)

解决离线设备上限制域用户登录的问题

离线状态下无法直接修改域用户的账户启用/禁用状态(该属性由域控制器统一管理),但可以通过本地配置阻止目标域用户登录设备,实现类似“禁用”的效果。以下是两种可行的PowerShell方案:

方案1:通过本地用户权限分配拒绝登录

通过修改本地安全策略的“拒绝本地登录”权限,直接限制目标域用户的本地登录权限,该方法不受缓存凭据更新影响,可靠性更高:

# 需以管理员身份运行,先启用SeSecurityPrivilege权限以修改安全设置
$currentIdentity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$securityPrivilege = $currentIdentity.Privileges | Where-Object {$_.Privilege -eq "SeSecurityPrivilege"}
if (-not $securityPrivilege.IsEnabled) {
    $processToken = [System.Diagnostics.Process]::GetCurrentProcess().Token
    $privilegeSet = New-Object System.Security.Principal.WindowsPrivilegeSet
    $privilegeSet.AddPrivilege("SeSecurityPrivilege")
    $processToken.EnablePrivileges($privilegeSet)
}

# 定义目标域用户,格式为"域名\用户名"
$targetUser = "DOMAIN\TargetUserName"
# 获取用户SID
$userSid = (New-Object System.Security.Principal.NTAccount($targetUser)).Translate([System.Security.Principal.SecurityIdentifier]).Value

# 修改注册表添加用户到“拒绝本地登录”列表
$regPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\SeDenyInteractiveLogonRight"
$existingEntries = Get-ItemProperty -Path $regPath -Name "SeDenyInteractiveLogonRight" -ErrorAction SilentlyContinue

if ($existingEntries) {
    # 避免重复添加
    if ($userSid -notin $existingEntries.SeDenyInteractiveLogonRight) {
        $updatedEntries = $existingEntries.SeDenyInteractiveLogonRight + $userSid
        Set-ItemProperty -Path $regPath -Name "SeDenyInteractiveLogonRight" -Value $updatedEntries
    }
} else {
    New-ItemProperty -Path $regPath -Name "SeDenyInteractiveLogonRight" -Value @($userSid) -PropertyType MultiString
}

# 刷新组策略使设置立即生效
gpupdate /force

方案2:修改本地缓存的域用户属性

部分离线设备会在本地SAM数据库中缓存域用户的信息,可通过ADSI修改缓存用户的登录权限标志:

$targetUser = "DOMAIN\TargetUserName"
$localComputer = [ADSI]"WinNT://$env:COMPUTERNAME,computer"
# 查找本地缓存的目标域用户(仅匹配用户名部分)
$cachedUser = $localComputer.psbase.Children | Where-Object {
    $_.Name -eq $targetUser.Split("\")[1] -and $_.Class -eq "User"
}

if ($cachedUser) {
    # 设置UF_ACCOUNT_DISABLE标志(0x0002),保留原有属性位
    $currentFlags = $cachedUser.UserFlags.Value
    $cachedUser.UserFlags.Value = $currentFlags -bor 0x0002
    $cachedUser.SetInfo()
    Write-Host "已限制域用户 $targetUser 本地登录"
} else {
    Write-Host "未找到该域用户的本地缓存记录"
}

关键说明

  • 两种方案均需管理员权限执行。
  • 方案1通过系统权限限制实现,不受域用户后续联网同步影响;方案2仅修改本地缓存属性,若用户联网登录,域控制器会覆盖本地设置。
  • 离线状态下无法真正“禁用”域用户账户(该操作必须连接域控制器执行),上述方法仅实现本地登录限制。

内容的提问来源于stack exchange,提问作者Cameron Toy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:05:24