首页 > 系统相关 >当使用 PowerShell 管理 Active Directory(AD)域用户时,以下是一些初级的示例和操作:PowerShell 在进行 AD 域用户管理时的强大功能和灵活性。PowerShel

当使用 PowerShell 管理 Active Directory(AD)域用户时,以下是一些初级的示例和操作:PowerShell 在进行 AD 域用户管理时的强大功能和灵活性。PowerShel

时间:2024-07-04 19:20:44浏览次数:1  
标签:powershellCopy Code SamAccountName 用户 johndoe user Active PowerShell AD

使用 PowerShell 管理 Active Directory(AD)域用户时,以下是一些常见的命令和示例:

1. 新增域用户

powershellCopy Code
New-ADUser -Name "John Doe" -GivenName "John" -Surname "Doe" -SamAccountName "johndoe" -UserPrincipalName "[email protected]" -EmailAddress "[email protected]" -AccountPassword (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force) -Enabled $true -PassThru

这条命令创建了一个名为"John Doe"的新用户,并分配了账户名、用户主体名称(UPN)、电子邮件地址和密码。-Enabled $true 确保新用户账户启用。

2. 设置用户属性

powershellCopy Code
Set-ADUser -Identity "johndoe" -Office "Headquarters" -Description "Marketing Manager" -Department "Marketing"

这条命令设置了账户为 "johndoe" 的用户的办公室、描述和部门属性。

3. 禁用用户账户

powershellCopy Code
Disable-ADAccount -Identity "johndoe"

这条命令禁用了账户为 "johndoe" 的用户账户。

4. 启用用户账户

powershellCopy Code
Enable-ADAccount -Identity "johndoe"

这条命令启用了先前禁用的账户 "johndoe"。

5. 重置用户密码

powershellCopy Code
Set-ADAccountPassword -Identity "johndoe" -NewPassword (ConvertTo-SecureString "NewP@ssw0rd" -AsPlainText -Force) -Reset

这条命令重置了账户 "johndoe" 的密码为 "NewP@ssw0rd"。

6. 移动用户到其他组织单元(OU)

powershellCopy Code
Get-ADUser -Identity "johndoe" | Move-ADObject -TargetPath "OU=Sales,OU=Users,DC=domain,DC=com"

这条命令将账户 "johndoe" 移动到域中的 "Sales" 组织单元(OU)。

7. 删除用户账户

powershellCopy Code
Remove-ADUser -Identity "johndoe" -Confirm:$false

这条命令删除了账户 "johndoe" 的用户账户,-Confirm:$false 参数确保在删除前不需要确认。

这些命令涵盖了基本的用户管理任务。根据具体需求,你可以结合使用这些命令来管理和维护你的 Active Directory 用户账户。

当涉及到使用 PowerShell 进行更进一步的 AD 域用户管理时,可以涉及到更复杂的任务和技术。以下是一些更高级和实用的示例:

8. 批量创建用户

powershellCopy Code
# 创建用户列表
$userList = @(
    @{ Name = "John Doe"; SamAccountName = "johndoe"; UserPrincipalName = "[email protected]"; EmailAddress = "[email protected]"; Password = "P@ssw0rd" },
    @{ Name = "Jane Smith"; SamAccountName = "janesmith"; UserPrincipalName = "[email protected]"; EmailAddress = "[email protected]"; Password = "P@ssw0rd" }
)

# 批量创建用户
foreach ($user in $userList) {
    $securePassword = ConvertTo-SecureString $user.Password -AsPlainText -Force
    New-ADUser -Name $user.Name -SamAccountName $user.SamAccountName -UserPrincipalName $user.UserPrincipalName -EmailAddress $user.EmailAddress -AccountPassword $securePassword -Enabled $true
}

这段代码展示了如何通过循环批量创建多个用户。你可以根据需求在 $userList 中添加更多用户信息。

9. 导出用户信息到CSV文件

powershellCopy Code
Get-ADUser -Filter * -Property Name, SamAccountName, EmailAddress |
    Select-Object Name, SamAccountName, EmailAddress |
    Export-Csv -Path "C:\UsersExport.csv" -NoTypeInformation

这段代码从 AD 中获取所有用户的姓名、账户名和电子邮件地址,并将结果导出到 CSV 文件中。

10. 批量重置密码并发送通知邮件

powershellCopy Code
# 导入用户列表
$userList = Import-Csv -Path "C:\UsersToReset.csv"

foreach ($user in $userList) {
    $newPassword = "NewP@ssw0rd"  # 可以生成随机密码
    $securePassword = ConvertTo-SecureString $newPassword -AsPlainText -Force
    Set-ADAccountPassword -Identity $user.SamAccountName -NewPassword $securePassword -Reset

    # 发送重置密码通知邮件
    $emailBody = "Dear $($user.Name),`n`nYour password has been reset to: $newPassword`nPlease change it after login.`n`nRegards,`nIT Support"
    Send-MailMessage -To $user.EmailAddress -From "[email protected]" -Subject "Password Reset" -Body $emailBody -SmtpServer "smtp.domain.com"
}

这段代码从 CSV 文件中导入用户列表,为每个用户重置密码,并发送包含新密码的通知邮件。

11. 查找长时间未使用的用户账户

powershellCopy Code
$90DaysAgo = (Get-Date).AddDays(-90)
Get-ADUser -Filter {LastLogonDate -lt $90DaysAgo} -Properties LastLogonDate |
    Select-Object Name, SamAccountName, LastLogonDate |
    Export-Csv -Path "C:\UnusedUsers.csv" -NoTypeInformation

这段代码查找超过90天未登录的用户账户,并将结果导出到 CSV 文件中。

12. 将用户添加到组

powershellCopy Code
Add-ADGroupMember -Identity "SalesGroup" -Members "johndoe", "janesmith"

这条命令将用户 "johndoe" 和 "janesmith" 添加到名为 "SalesGroup" 的 AD 组中。

通过这些示例,你可以利用 PowerShell 强大的功能来进行更复杂和精细化的 AD 域用户管理操作。根据具体情况,可以进一步扩展和调整这些示例,以满足组织的需求和管理任务。

13. 批量禁用长时间未使用的用户账户

powershellCopy Code
$90DaysAgo = (Get-Date).AddDays(-90)
$usersToDisable = Get-ADUser -Filter {LastLogonDate -lt $90DaysAgo} -Properties LastLogonDate

foreach ($user in $usersToDisable) {
    Disable-ADAccount -Identity $user.SamAccountName
    Write-Host "Disabled account: $($user.SamAccountName)"
}

这段代码查找超过90天未登录的用户账户,并禁用这些账户。可以通过适当的审查和后续处理,例如移动到特定的 OU 或者发送通知给用户,以完成禁用操作。

14. 批量重置密码并要求用户更改密码

powershellCopy Code
# 导入用户列表
$userList = Import-Csv -Path "C:\UsersToReset.csv"

foreach ($user in $userList) {
    $newPassword = "NewP@ssw0rd"  # 可以生成随机密码
    $securePassword = ConvertTo-SecureString $newPassword -AsPlainText -Force
    Set-ADAccountPassword -Identity $user.SamAccountName -NewPassword $securePassword -Reset

    # 要求用户更改密码
    Set-ADUser -Identity $user.SamAccountName -ChangePasswordAtLogon $true

    # 发送重置密码通知邮件
    $emailBody = "Dear $($user.Name),`n`nYour password has been reset to: $newPassword`nPlease change it after login.`n`nRegards,`nIT Support"
    Send-MailMessage -To $user.EmailAddress -From "[email protected]" -Subject "Password Reset" -Body $emailBody -SmtpServer "smtp.domain.com"
}

这段代码不仅重置用户密码并发送通知邮件,还设置了用户在下次登录时需要更改密码。这是提高账户安全性的一种方法。

15. 批量修改用户属性

powershellCopy Code
# 导入用户列表
$userList = Import-Csv -Path "C:\UsersToUpdate.csv"

foreach ($user in $userList) {
    Set-ADUser -Identity $user.SamAccountName -EmailAddress $user.NewEmailAddress -Office $user.NewOffice
    Write-Host "Updated properties for $($user.SamAccountName)"
}

这段代码从 CSV 文件中导入用户列表,并批量更新用户的电子邮件地址和办公室属性。根据需要可以修改其他属性。

16. 根据部门批量操作用户

powershellCopy Code
# 获取指定部门的用户
$usersInHR = Get-ADUser -Filter {Department -eq "HR"}

foreach ($user in $usersInHR) {
    # 执行相关操作,例如重置密码、发送通知等
    Set-ADAccountPassword -Identity $user.SamAccountName -Reset -NewPassword (ConvertTo-SecureString "NewP@ssw0rd" -AsPlainText -Force)
    Send-MailMessage -To $user.EmailAddress -From "[email protected]" -Subject "Password Reset" -Body "Your password has been reset." -SmtpServer "smtp.domain.com"
}

这段代码演示了如何根据部门对用户进行批量操作。在实际场景中,可以根据不同部门的需求执行不同的管理任务。

通过这些示例,你可以看到 PowerShell 在进行 AD 域用户管理时的强大功能和灵活性。根据具体的管理需求和组织结构,可以进一步定制和优化这些脚本,以满足实际业务的需求。

当使用 PowerShell 管理 Active Directory(AD)域用户时,以下是一些初级的示例和操作:

1. 获取用户信息

可以使用 Get-ADUser 命令来获取 AD 中用户的信息,例如获取所有用户的基本信息:

powershellCopy Code
Get-ADUser -Filter * -Properties *

这会列出所有用户的详细属性信息。

2. 查找特定用户

如果要查找特定的用户,可以使用 -Filter 参数结合属性条件来筛选:

powershellCopy Code
Get-ADUser -Filter {Surname -eq "Smith"}

这会查找姓氏为 "Smith" 的用户。

3. 创建新用户

要创建新用户,可以使用 New-ADUser 命令。以下是一个简单的示例:

powershellCopy Code
New-ADUser -Name "John Doe" -GivenName "John" -Surname "Doe" -SamAccountName "johndoe" -UserPrincipalName "[email protected]" -Path "OU=Users,DC=domain,DC=com" -AccountPassword (ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force) -Enabled $true

这会在指定的 OU 中创建一个新用户。

4. 禁用用户账户

要禁用用户账户,可以使用 Disable-ADAccount 命令:

powershellCopy Code
Disable-ADAccount -Identity "johndoe"

这会禁用名为 "johndoe" 的用户账户。

5. 重置用户密码

要重置用户密码,可以使用 Set-ADAccountPassword 命令:

powershellCopy Code
Set-ADAccountPassword -Identity "johndoe" -NewPassword (ConvertTo-SecureString "NewP@ssw0rd" -AsPlainText -Force) -Reset

这会重置用户 "johndoe" 的密码为 "NewP@ssw0rd" 并要求用户在下次登录时更改密码。

6. 修改用户属性

可以使用 Set-ADUser 命令来修改用户的各种属性,例如电子邮件地址、办公室位置等:

powershellCopy Code
Set-ADUser -Identity "johndoe" -EmailAddress "[email protected]" -Office "Room 101"

这会更新用户 "johndoe" 的电子邮件地址和办公室位置。

7. 移动用户到不同的 OU

要移动用户到不同的组织单位(OU),可以使用 Move-ADObject 命令:

powershellCopy Code
Move-ADObject -Identity "CN=johndoe,OU=Users,DC=domain,DC=com" -TargetPath "OU=Managers,DC=domain,DC=com"

这会将用户 "johndoe" 移动到名为 "Managers" 的 OU 中。

8. 删除用户账户

要删除用户账户,可以使用 Remove-ADUser 命令。删除前请谨慎操作:

powershellCopy Code
Remove-ADUser -Identity "johndoe" -Confirm:$false

这会永久删除用户 "johndoe" 的账户。

这些示例展示了 PowerShell 在管理 AD 域用户时的基本操作。根据具体需求,可以结合这些命令进行更复杂的操作和自动化任务。确保在操作前备份重要的信息,并小心谨慎地执行任何对生产环境的更改。


当涉及到中级级别的 Active Directory 域用户管理时,以下是一些更复杂和实用的 PowerShell 示例:

1. 批量创建用户

假设你需要批量创建多个用户账户,可以使用循环结构和数组来批量执行 New-ADUser

powershellCopy Code
# 定义新用户的详细信息数组
$userDetails = @(
    @{ Name = "John Doe"; GivenName = "John"; Surname = "Doe"; SamAccountName = "johndoe"; UserPrincipalName = "[email protected]"; Path = "OU=Users,DC=domain,DC=com"; Password = "P@ssw0rd1!"; Enabled = $true },
    @{ Name = "Jane Smith"; GivenName = "Jane"; Surname = "Smith"; SamAccountName = "janesmith"; UserPrincipalName = "[email protected]"; Path = "OU=Users,DC=domain,DC=com"; Password = "P@ssw0rd2!"; Enabled = $true }
)

# 循环创建用户
foreach ($user in $userDetails) {
    New-ADUser -Name $user.Name -GivenName $user.GivenName -Surname $user.Surname -SamAccountName $user.SamAccountName `
        -UserPrincipalName $user.UserPrincipalName -Path $user.Path -AccountPassword (ConvertTo-SecureString $user.Password -AsPlainText -Force) `
        -Enabled $user.Enabled
}

这将创建名为 "John Doe" 和 "Jane Smith" 的用户账户,并将它们放置在指定的 OU 中。

2. 批量禁用用户账户

如果需要禁用一组用户账户,可以使用 Disable-ADAccount 命令和循环结构。

powershellCopy Code
# 定义要禁用的用户账户的 SamAccountName 数组
$usersToDisable = @("johndoe", "janesmith", "alicebrown")

# 循环禁用用户账户
foreach ($user in $usersToDisable) {
    Disable-ADAccount -Identity $user
}

这会禁用名为 "johndoe"、"janesmith" 和 "alicebrown" 的用户账户。

3. 批量重置用户密码并发送通知

假设需要批量重置用户密码并通过邮件通知他们,可以结合 Set-ADAccountPassword 和发送邮件的功能。

powershellCopy Code
# 定义用户账户和新密码的关联数组
$usersPasswords = @(
    @{ SamAccountName = "johndoe"; NewPassword = "NewP@ssw0rd1!" },
    @{ SamAccountName = "janesmith"; NewPassword = "NewP@ssw0rd2!" },
    @{ SamAccountName = "alicebrown"; NewPassword = "NewP@ssw0rd3!" }
)

# 循环重置密码并发送邮件通知
foreach ($user in $usersPasswords) {
    Set-ADAccountPassword -Identity $user.SamAccountName -NewPassword (ConvertTo-SecureString $user.NewPassword -AsPlainText -Force) -Reset

    # 发送邮件通知
    Send-MailMessage -To "$($user.SamAccountName)@domain.com" -From "[email protected]" -Subject "Password Reset Notification" -Body "Your password has been reset. Please use your new password to log in." -SmtpServer "smtp.domain.com"
}

这会重置用户 "johndoe"、"janesmith" 和 "alicebrown" 的密码,并向他们发送包含新密码的邮件通知。

4. 批量修改用户属性

如果需要批量修改用户的某些属性,可以使用 Set-ADUser 和循环结构。

powershellCopy Code
# 定义要修改的用户属性的关联数组
$usersAttributes = @(
    @{ SamAccountName = "johndoe"; Office = "Room 101"; Department = "IT" },
    @{ SamAccountName = "janesmith"; Office = "Room 202"; Department = "HR" },
    @{ SamAccountName = "alicebrown"; Office = "Room 303"; Department = "Finance" }
)

# 循环修改用户属性
foreach ($user in $usersAttributes) {
    Set-ADUser -Identity $user.SamAccountName -Office $user.Office -Department $user.Department
}

这会修改用户 "johndoe"、"janesmith" 和 "alicebrown" 的办公室和部门属性。

这些示例展示了如何使用 PowerShell 在 Active Directory 中进行批量操作和管理,适用于更复杂的管理需求。记得在执行任何重要操作前进行适当的测试,并确保遵循最佳实践以确保安全和可靠性。


当涉及到高级的 Active Directory 域用户管理时,PowerShell 提供了丰富的功能和灵活性。以下是几个高级示例,涵盖了从批量操作到用户权限管理的不同方面:

1. 批量导入用户信息并创建用户账户

假设你有一个 CSV 文件,其中包含要创建的用户信息,可以使用 PowerShell 导入 CSV 并批量创建用户账户。

powershellCopy Code
# 导入 CSV 文件(示例文件包含 Name, GivenName, Surname, SamAccountName, UserPrincipalName, Password 字段)
$userData = Import-Csv -Path "C:\Path\to\users.csv"

# 循环创建用户
foreach ($user in $userData) {
    New-ADUser -Name $user.Name -GivenName $user.GivenName -Surname $user.Surname -SamAccountName $user.SamAccountName `
        -UserPrincipalName $user.UserPrincipalName -Path "OU=Users,DC=domain,DC=com" `
        -AccountPassword (ConvertTo-SecureString $user.Password -AsPlainText -Force) -Enabled $true
}

这个示例假设 CSV 文件中包含 Name, GivenName, Surname, SamAccountName, UserPrincipalName 和 Password 字段,用于创建用户账户。

2. 批量添加用户到安全组

如果需要将一组用户添加到特定的安全组中,可以使用 PowerShell 批量执行。

powershellCopy Code
# 定义要添加到安全组的用户账户的 SamAccountName 数组
$usersToAdd = @("johndoe", "janesmith", "alicebrown")

# 循环将用户添加到安全组
foreach ($user in $usersToAdd) {
    Add-ADGroupMember -Identity "GroupName" -Members $user
}

这会将 "johndoe"、"janesmith" 和 "alicebrown" 用户添加到名为 "GroupName" 的安全组中。

3. 批量设置用户的属性和权限

如果需要同时设置用户的属性和权限,例如设置主文件夹路径和分配文件夹权限,可以结合 Set-ADUser 和文件系统的权限设置。

powershellCopy Code
# 设置主文件夹路径的模板
$homeDirectoryTemplate = "\\fileserver\users\$($_.SamAccountName)"

# 定义要设置的用户属性的关联数组
$usersAttributes = @(
    @{ SamAccountName = "johndoe"; HomeDirectory = "$homeDirectoryTemplate\johndoe"; Description = "IT Administrator" },
    @{ SamAccountName = "janesmith"; HomeDirectory = "$homeDirectoryTemplate\janesmith"; Description = "HR Manager" },
    @{ SamAccountName = "alicebrown"; HomeDirectory = "$homeDirectoryTemplate\alicebrown"; Description = "Finance Director" }
)

# 循环设置用户属性
foreach ($user in $usersAttributes) {
    Set-ADUser -Identity $user.SamAccountName -HomeDirectory $user.HomeDirectory -Description $user.Description

    # 设置文件夹权限示例(这里假设使用 Set-Acl 设置文件夹权限)
    $folderPath = $user.HomeDirectory
    $acl = Get-Acl $folderPath
    $permission = "domain\$($user.SamAccountName)","FullControl","ContainerInherit,ObjectInherit","None","Allow"
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
    $acl.SetAccessRule($accessRule)
    Set-Acl $folderPath $acl
}

这个示例演示了如何设置用户的主文件夹路径,并使用 Set-Acl 设置文件夹权限以允许用户访问其个人文件夹。

4. 批量重置密码并强制用户下次登录时更改密码

在安全性要求较高的环境中,可能需要定期更改用户密码并要求用户下次登录时进行密码更改。可以使用以下方法:

powershellCopy Code
# 定义要重置密码的用户账户的 SamAccountName 数组
$usersToResetPassword = @("johndoe", "janesmith", "alicebrown")

# 循环重置密码并设置用户需要强制更改密码
foreach ($user in $usersToResetPassword) {
    $newPassword = ConvertTo-SecureString -AsPlainText "NewP@ssw0rd!" -Force
    Set-ADAccountPassword -Identity $user -NewPassword $newPassword -Reset
    Set-ADUser -Identity $user -ChangePasswordAtLogon $true
}

这会重置密码为 "NewP@ssw0rd!",并设置用户在下次登录时需要强制更改密码。

这些示例涵盖了从批量创建用户到设置用户权限和安全组成员的多个方面,适用于需要高级用户管理功能的场景。记得在实际操作中谨慎测试,并根据组织的安全政策进行调整和应用。


当涉及到专家级别的 Active Directory 域用户管理时,PowerShell 提供了广泛的功能和灵活性。以下是几个高级示例,涵盖了从用户创建到权限管理的多个方面:

1. 批量创建用户并设置详细属性

假设你有一个需要创建多个用户账户的需求,并且需要设置详细的用户属性。

powershellCopy Code
# 定义要创建的用户信息数组
$usersToCreate = @(
    @{ Name = "John Doe"; GivenName = "John"; Surname = "Doe"; SamAccountName = "johndoe"; UserPrincipalName = "[email protected]"; Password = "P@ssw0rd1!" },
    @{ Name = "Jane Smith"; GivenName = "Jane"; Surname = "Smith"; SamAccountName = "janesmith"; UserPrincipalName = "[email protected]"; Password = "P@ssw0rd2!" }
    # 添加更多用户的信息...
)

# 循环创建用户
foreach ($user in $usersToCreate) {
    New-ADUser -Name $user.Name -GivenName $user.GivenName -Surname $user.Surname -SamAccountName $user.SamAccountName `
        -UserPrincipalName $user.UserPrincipalName -Path "OU=Users,DC=domain,DC=com" `
        -AccountPassword (ConvertTo-SecureString $user.Password -AsPlainText -Force) -Enabled $true
}

这段代码会创建名为 "John Doe" 和 "Jane Smith" 的用户账户,并设置他们的基本属性和密码。

2. 批量添加用户到多个安全组

如果需要将一组用户批量添加到多个安全组中,可以使用以下方法:

powershellCopy Code
# 定义要添加的用户账户的 SamAccountName 数组
$usersToAdd = @("johndoe", "janesmith")

# 定义要添加到的安全组数组
$groupsToAddTo = @("Group1", "Group2", "Group3")

# 循环将用户添加到每个安全组
foreach ($group in $groupsToAddTo) {
    foreach ($user in $usersToAdd) {
        Add-ADGroupMember -Identity $group -Members $user
    }
}

这会将 "johndoe" 和 "janesmith" 用户添加到 "Group1", "Group2" 和 "Group3" 这三个安全组中。

3. 批量设置用户属性和权限

有时需要同时设置用户的属性和文件系统权限,这里演示如何批量设置用户的主文件夹路径和设置文件夹权限:

powershellCopy Code
# 设置主文件夹路径的模板
$homeDirectoryTemplate = "\\fileserver\users\$($_.SamAccountName)"

# 定义要设置的用户属性的关联数组
$usersAttributes = @(
    @{ SamAccountName = "johndoe"; HomeDirectory = "$homeDirectoryTemplate\johndoe"; Description = "IT Administrator" },
    @{ SamAccountName = "janesmith"; HomeDirectory = "$homeDirectoryTemplate\janesmith"; Description = "HR Manager" }
    # 添加更多用户的信息...
)

# 循环设置用户属性和文件夹权限
foreach ($user in $usersAttributes) {
    Set-ADUser -Identity $user.SamAccountName -HomeDirectory $user.HomeDirectory -Description $user.Description

    # 设置文件夹权限示例(这里假设使用 Set-Acl 设置文件夹权限)
    $folderPath = $user.HomeDirectory
    $acl = Get-Acl $folderPath
    $permission = "domain\$($user.SamAccountName)","FullControl","ContainerInherit,ObjectInherit","None","Allow"
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
    $acl.SetAccessRule($accessRule)
    Set-Acl $folderPath $acl
}

这段代码会设置 "johndoe" 和 "janesmith" 的主文件夹路径,并为每个用户设置文件夹的完全控制权限。

4. 批量重置密码并强制用户下次登录时更改密码

如果需要定期更改用户密码并要求用户下次登录时更改密码,可以使用以下示例:

powershellCopy Code
# 定义要重置密码的用户账户的 SamAccountName 数组
$usersToResetPassword = @("johndoe", "janesmith")

# 循环重置密码并设置用户需要强制更改密码
foreach ($user in $usersToResetPassword) {
    $newPassword = ConvertTo-SecureString -AsPlainText "NewP@ssw0rd!" -Force
    Set-ADAccountPassword -Identity $user -NewPassword $newPassword -Reset
    Set-ADUser -Identity $user -ChangePasswordAtLogon $true
}

这段代码会将 "johndoe" 和 "janesmith" 的密码重置为 "NewP@ssw0rd!",并设置用户在下次登录时需要强制更改密码。

这些示例展示了如何利用 PowerShell 的强大功能进行高级的 Active Directory 域用户管理,可以根据具体需求进行进一步定制和扩展。


当涉及到顶尖级的 Active Directory 域用户管理实例时,PowerShell 提供了极其强大和灵活的功能,以下是一些高级示例:

1. 自动化新员工入职流程

假设有一个需求,需要自动化新员工入职的整个流程,包括创建用户账户、分配组织单位(OU)、设置属性、分配权限等。

powershellCopy Code
# 定义新员工信息
$newEmployee = @{
    Name = "Emma Johnson"
    GivenName = "Emma"
    Surname = "Johnson"
    SamAccountName = "emmaj"
    UserPrincipalName = "[email protected]"
    Password = "Welcome@123!"
    Department = "IT"
    Title = "Systems Engineer"
}

# 创建用户账户
New-ADUser -Name $newEmployee.Name -GivenName $newEmployee.GivenName -Surname $newEmployee.Surname `
    -SamAccountName $newEmployee.SamAccountName -UserPrincipalName $newEmployee.UserPrincipalName `
    -AccountPassword (ConvertTo-SecureString $newEmployee.Password -AsPlainText -Force) `
    -Path "OU=Users,OU=IT,DC=domain,DC=com" -Enabled $true

# 设置属性
Set-ADUser -Identity $newEmployee.SamAccountName -Department $newEmployee.Department -Title $newEmployee.Title

# 分配权限(示例:给予访问特定文件夹的权限)
$folderPath = "\\fileserver\IT\Shared"
$permission = "domain\$($newEmployee.SamAccountName)","Modify","ContainerInherit,ObjectInherit","None","Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
$acl = Get-Acl $folderPath
$acl.SetAccessRule($accessRule)
Set-Acl $folderPath $acl

这个示例演示了如何使用 PowerShell 自动化新员工的创建、属性设置和权限分配。

2. 员工离职自动化处理

另一个高级示例是自动化员工离职时的处理流程,包括禁用账户、移动到离职员工 OU、解除组成员关系等操作。

powershellCopy Code
# 禁用账户和移动到离职员工 OU
Disable-ADAccount -Identity "emmaj"
Move-ADObject -Identity "CN=Emma Johnson,OU=Users,OU=IT,DC=domain,DC=com" -TargetPath "OU=Departed Employees,DC=domain,DC=com"

# 从组中移除
Get-ADUser "emmaj" | ForEach-Object {
    Get-ADPrincipalGroupMembership $_ | Where-Object { $_.Name -ne "Domain Users" } | ForEach-Object {
        Remove-ADGroupMember -Identity $_ -Members $_.SamAccountName -Confirm:$false
    }
}

这段代码展示了离职员工的账户禁用、移动到特定 OU 和从组中移除的自动化处理。

3. 定期账户审计和密码重置

定期进行账户审计和密码重置是 IT 安全管理中的重要任务。以下示例展示了如何批量重置过期密码并通知用户更改密码:

powershellCopy Code
# 查找超过90天未更改密码的用户并重置密码
$usersToReset = Search-ADAccount -PasswordExpired -UsersOnly -SearchBase "OU=Users,DC=domain,DC=com" | Select-Object SamAccountName
foreach ($user in $usersToReset) {
    $newPassword = ConvertTo-SecureString -AsPlainText "TempP@ssw0rd!" -Force
    Set-ADAccountPassword -Identity $user.SamAccountName -NewPassword $newPassword -Reset
    Set-ADUser -Identity $user.SamAccountName -ChangePasswordAtLogon $true
    # 发送电子邮件通知用户更改密码
    Send-MailMessage -To $user.UserPrincipalName -From "[email protected]" -Subject "Password Reset Required" -Body "Your password has been reset. Please log in and change your password."
}

这个示例展示了如何使用 PowerShell 找到并重置过期密码的用户,并通过电子邮件通知用户。

这些示例突显了 PowerShell 在自动化和管理 Active Directory 域用户方面的强大能力,能够高效处理复杂的管理任务和安全操作。


 

标签:powershellCopy,Code,SamAccountName,用户,johndoe,user,Active,PowerShell,AD
From: https://www.cnblogs.com/suv789/p/18284489

相关文章

  • CAD图纸加密软件哪个好用:八款顶尖CAD图纸加密软件大盘点!
     在工程设计领域,CAD图纸是设计师们的智慧结晶,承载着项目的核心技术和创新思路。然而,随着信息时代的到来,图纸的安全问题日益凸显。如何有效保护CAD图纸不被非法复制、篡改或泄露,成为了每个企业和设计师必须面对的重要课题。 今天为大家盘点八款顶尖CAD图纸加密软件,助您守......
  • “Java多线程编程:从Thread到Runnable再到Callable的深入探索“
    1什么是进程?通俗地解释为:计算机中正在执行的一个程序实例。进程它是系统分配资源的基本单位。想象一下,你的电脑就像是一个大工厂,而每一个进程就像是这个工厂里的一条生产线或者一个工作小组,它们各自独立地运行着不同的任务,但同时又受到整个工厂(即操作系统)的管理和调度。......
  • 当你不小心使用了 git reset --hard HEAD^
    会话总结1.使用gitreset--hardHEAD^后如何恢复撤销的gitcommit提交知识点:gitreset--hardHEAD^会回退到前一个提交,并删除工作目录中的更改。通过gitreflog查看操作历史记录,找到被回退的提交哈希值。使用gitreset--hard<commit_hash>恢复到特定的提交。......
  • 微信SDK与Unity的Addressables发生引用冲突的解决办法
    当我使用Unity的Addressables和微信的minigame-SDK时,会发生一个CS0433的报错,如下图所示: 关于CS0433错误,微软的官方文档中是这么描述的: 因此,根据报错信息,我揣测是Unity的Compat与mscorlib发生了重复,所以将mscorlib.dll文件全部删除了,但是问题没有得到解决,后面在一个大佬的帮......
  • QThread::run函数的使用(涉及到QThread::run, Qthread::start,protected,virtual虚函数,o
    RobotCommuServer.h#ifndefROBOTCOMMUSERVER_H#defineROBOTCOMMUSERVER_H#include<QThread>classRobotCommuServer:publicQThread{Q_OBJECTpublic:explicitRobotCommuServer(QObject*parent=nullptr);~RobotCommuServer();void......
  • Yi.Admin+Blazor上手教程系列3-新项目的一些基本设置
    1、修改swg的组名配置ApplicationService//动态ApiConfigure<AbpAspNetCoreMvcOptions>(options=>{options.ConventionalControllers.Create(typeof(YiAbpApplicationModule).Assembly,options=>options.RemoteServiceName="default");......
  • Python教程:os.popen(cmd).read()查看后台进程并杀进程
    一、os.popen()方法1.使用语法os.popen()方法用于从一个命令打开一个管道。os.popen(cmd).read()获取执行后结果。os.popen(command[,mode[,bufsize]])#使用的命令#模式权限:默认'r'或者'w'#文件需要的缓冲大小0无缓冲1行缓冲其他数值以字节为单位负值使用系统......
  • hadoop添加磁盘扩容
    磁盘准备定位新磁盘使用lsblk或者sudofdisk-l命令来查看系统上已连接的磁盘,并找到你想要挂载的新磁盘的设备名称,比如/dev/sda2。lsblksudofdisk-l格式化新磁盘假设新磁盘的设备名是/dev/sda2,使用以下命令将其格式化为ext4文件系统:sudomkfs.ext4/dev/sda2......
  • PTrade量化软件常见问题整理系列1
    一、get_fundamentals获取无数据返回。    get_fundamentals(g.stock_list,'profit_ability','roic',context.previous_date)返回nan。解决方案:1、返回同样的列表,获取valuation表,数据返回正常;2、建议在研究内执行get_fundamentals('00065*.SZ','profit_ability',......
  • PTrade量化软件常见问题整理系列2
    一、研究界面使用get_fundamentals函数报错:error_info:获取token失败?    研究界面使用get_fundamentals函数报错:error_info:获取token失败?1、测试版本202202.01.052,升级202202.01.051版本后,为了解决不同机器请求openapi时使用不同token导致token失效而频繁切换token,做......