前言
嘿,朋友们!如果你在活动目录(AD)的用户和组管理中感到迷茫,别担心!在这个快速变化的时代,PowerShell 就是你的得力助手,能够轻松处理这些繁琐的管理任务。
在这篇文章中,我们将只需几行命令,就能轻松增、删、查、改 AD 用户,省去像侦探一样追查的烦恼。同时,通过脚本化的方式,你还可以实现批量操作,减少人为错误,提高管理的灵活性和可靠性。
1.查询域用户
# 查询账户信息
PS C:\> Get-ADUser -Identity baiyang001
DistinguishedName : CN=白阳baiyang001,OU=Users,OU=BaiYang,DC=baiyang,DC=com
Enabled : True
GivenName :
Name : 白阳baiyang001
ObjectClass : user
ObjectGUID : 5f10d8d9-a4ad-44f1-8d63-6535279ab703
SamAccountName : baiyang001
SID : S-1-5-21-1483408722-1403447730-390134965-1182
Surname : 白阳
UserPrincipalName : baiyang001@baiyang.com
# 添加显示更多属性
PS C:\> Get-ADUser -Identity baiyang001 -Properties 'Displayname','SamAccountName','mail'
DisplayName : 白阳 BaiYang
DistinguishedName : CN=白阳baiyang001,OU=Users,OU=BaiYang,DC=baiyang,DC=com
Enabled : True
GivenName :
mail : baiyang001@baiyang.org
Name : 白阳baiyang001
ObjectClass : user
ObjectGUID : 5f10d8d9-a4ad-44f1-8d63-6535279ab703
SamAccountName : baiyang001
SID : S-1-5-21-1483408722-1403447730-390134965-1182
Surname : 白阳
UserPrincipalName : baiyang001@baiyang.com
2. 新增域用户
# 指定登录名、对象名称CN、OU、姓、显示名称、密码、启用用户
New-ADUser -Surname "白阳" -SamAccountName "baiyang001" -Name "白阳baiyang001" -DisplayName "白阳" -UserPrincipalName "baiyang001@baiyang.org" -Accountpassword (ConvertTo-SecureString -AsPlainText "Passw0rd2025" -Force) -Enabled $true -Path "OU=Users,OU=Baiyang,DC=baiyang,DC=org"
参数说明:
- SamAccountName: 登录名,必需,最大长度为256个字符。为了与较旧的操作系统兼容,请创建一个不超过 20 个字符的 SAM 帐户名称
- Name:对象名称(name)
- Surname: 姓(sn)
- Title: 职务(title)
- DisplayName:显示名称
- UserPrincipalName: 指定用户主体名称 (UPN),格式为 。 UPN 是管理员分配的友好名称,它比系统使用的 LDAP 可分辨名称短,更易于记忆。 UPN 独立于用户对象的可分辨名称,因此可以移动或重命名用户对象,而不会影响用户登录名。
- AccountPassword: 为帐户指定新的密码值。此值存储为加密字符串,受密码策略限制。如果密码不符合策略时,用户帐户会被禁用,但仍将创建账户。(账户禁用状态,并且下次登录时必须更改密码)
-ChangePasswordAtLogon <Boolean> 下次登录时是否必须更改密码。
-PasswordNeverExpires <Boolean> 指定帐户的密码是否永不过期。
注意,设置了密码永不过期,则不能再设置下次登录时必须更改密码。
- Enabled $true : 开启用户
- Path "OU=Users,DC=yourdomain,DC=com": 指定在其中创建新对象的 OU
3. 修改域用户信息
# 1.修改AD用户【中心】、【部门】、【职位】
Set-ADUser -Identity "baiyang001" -Company "技术研发中心" -Department "IT架构部" -Title "IT专员"
# 2.设置用户【办公地点】、【电话号码】
Set-ADUser -Identity "baiyang001" -Office "东部办公室" -OfficePhone "0123456789"
# 3.清空描述
Set-ADUser -Identity "baiyang001" -Office $Null -OfficePhone $Null
4. 移动域用户OU
# 1.获取用户完整的DN名称
$user_dn = (Get-ADUser -Identity "baiyang001").DistinguishedName
#> CN=白阳baiyang001,OU=Users,OU=BaiYang,DC=baiyang,DC=com
# 2.移动AD用户对象到新的OU
Move-ADObject -Identity $user_dn -TargetPath "OU=Users,DC=baiyang,DC=org"
- 使用AD对象移动命令,
Identity
接受的对象必须是DN(Distinguished Name
)或者一个ADObject
- 结果:用户原OU:
"OU=Users,OU=BaiYang,DC=baiyang,DC=org"
, 新OU:"OU=Users,DC=baiyang,DC=org"
,即移动到上一级OU。
如果你的环境中OU比较结构化,也可以单独提取OU名称在脚本中使用。
# 提取用户的OU, 方式一
((Get-ADUser -Identity "baiyang001").DistinguishedName -Split "," |select -Index 2).Substring(3)
# 提取用户的OU, 方式二
$user_ou_name = ($user -Split "," | select -Index 2).Substring(3)
5. 修改域用户密码
# 1.更改用户密码,需要使用旧密码(验证)
Set-ADAccountPassword -Identity "baiyang001" -OldPassword (ConvertTo-SecureString -AsPlainText "Passw0rd2025" -Force) -NewPassword (ConvertTo-SecureString -AsPlainText "Passw0rd2025new" -Force)
# 2.直接重置帐户的密码, 使用此参数时,必须设置 NewPassword 参数,无需指定 OldPassword 参数。
Set-ADAccountPassword -Identity "baiyang001" -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "Passw0rd2025new" -Force)
6. 禁用域用户
# 1.禁用
Disable-ADAccount -Identity "baiyang001"
# 2.禁用并添加描述标记
Set-ADUser -Identity "baiyang001" -Description "离职被禁用" -Enabled $false
7. 启用域用户
# 1.启用
Enable-ADAccount -Identity "baiyang001"
# 2.启用并清空标记
Set-ADUser -Identity "baiyang001" -Description $null -Enabled $true
8. 删除域用户
# 1.删除用户
Remove-ADUser -Identity "baiyang002" -Confirm:$false
# 2.递归删除用户对象(包括子树)
Get-ADUser -Identity "baiyang002" | foreach { Remove-ADObject -Identity $_.ObjectGUID -Recursive -Confirm:$false}
9. PowerShell 批量操作域用户
示例1: 创建10个GGPT开头的(GGPT000-GGPT010)域用户,指定OU路径、设置统一密码,启用用户,设置描述
001..011 | foreach {
New-ADUser -Surname "GGPT$_" -SamAccountName "GGPT$_" -Name "GGPT$_" -DisplayName "GGPT$_" -UserPrincipalName "GGPT$_@sfytest.org" -Accountpassword (ConvertTo-SecureString -AsPlainText "Passw0rd2025new" -Force) -Enabled $true -Path "OU=Users,OU=BaiYang,DC=baiyang,DC=org" -Description "电商渠道部申请"
}
示例2: 通过CSV文件批量开通域用户
Import-Csv -Path .\addusers.csv | ForEach-Object {
try {
# 创建新用户
# -Surname $_.name `姓
# -GivenName $_.GivenName `名字
New-ADUser `
-UserPrincipalName "$($_.identity)@baiyang.org" `
-Name "$($_.name)$($_.identity)" `
-Surname $_.name `
-SamAccountName $_.identity `
-DisplayName $_.displayname `
-Accountpassword (ConvertTo-SecureString -AsPlainText "Passw0rd2025new" -Force) `
-Path "OU=Users,OU=BaiYang,DC=baiyang,DC=org" `
-Company $_.company -Departmen $_.department -Title $_.title `
-Enabled $true
Write-Host "创建用户: $($_.name)$($_.identity)"
} catch {
Write-Host "用户创建失败: $($_.identity) - $($_.Exception.Message)"
}
}
- 注意:此代码我已经格式化适合在ps1脚本中运行的,如果你要运行使用请自行修改。
addusers.csv
文件内容如下:
identity,name,displayname,title,department,company
user001,陈小明,陈小明user001,工程师,商务部,技术中心
user002,张三,张三user002,产品设计师,产品设计部,设计中心
user003,韩信,韩信user003,人力经理,企业文化部,人力资源中心
示例3: 批量重置域用户密码
# 要操作的域用户对象,可自行增加
$Users = @("baiyang002","baiyang003","baiyang004")
# 重置密码
foreach ($user in $Users) {Set-ADAccountPassword $user -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "Passw0rd2025new" -Force)}
示例4: 批量修改域用户的对象名称
# 获取域用户的DN名称
$Users = (Get-ADUser -Identity $_.SamAccountName).DistinguishedName
# 域用户对象改名
foreach($user in $users){
Rename-ADObject -Identity $user -NewName $newUserObjectName
}