Powershell脚本可获取包含特定名称的所有组

时间:2019-03-16 19:32:12

标签: powershell active-directory directoryservices

好的,所以我对Powershell有点陌生,我正在尽力而为,但似乎无法做到这一点。

设置目录的方式是每个组织都有自己的“密码重置组”。我将基于事件日志条目“目录服务更改”运行计划的任务设置。脚本的工作是在组中查找成员,并将其密码重置为他们的employeeNumber,让用户在下次登录时更改密码,然后从组中删除该用户。我似乎在语法正确方面遇到问题。

Try {
$GroupDN = (Get-ADGroup -Filter {Name -like '*Password Reset Group*'}).DistinguishedName
}

Catch {
    Write-Host "Unable to locate group: $Group because ""$($Error[0])""" -ForegroundColor Red
    Exit
}
ForEach ($User in (Get-ADUser -Filter * -Properties MemberOf,employeeNumber))
{   If ($User.MemberOf -contains $GroupDN)
    {   $password = "$($_.employeeNumber)new!" | ConvertTo-SecureString -AsPlainText -Force
        Set-ADAccountPassword -Identity $User -NewPassword $password -Reset
        Remove-ADGroupMember -Identity "$GroupDN" -Members $User

        }
        }

2 个答案:

答案 0 :(得分:0)

使用@AdminOfThings提供给我的信息。我能够编写我想要的代码。花了很多时间在这里,但是这里是:

ForEach ($GroupDN in (Get-ADGroup -Filter {Name -like '*Password Reset Group*'}).DistinguishedName)
    { ForEach ($User in (Get-ADUser -Filter * -Properties MemberOf,employeeNumber))
{   If ($User.MemberOf -contains $GroupDN)
    {   $password = $User.employeeNumber | ConvertTo-SecureString -AsPlainText -Force
        Set-ADAccountPassword -Identity $User -NewPassword $password -Reset
        Set-ADUser -Identity $User -ChangePasswordAtLogon $true -PasswordNeverExpires $false
        Remove-ADGroupMember -Identity "$GroupDN" -Members $User -Confirm:$false

        }
        }
        }

答案 1 :(得分:0)

很高兴看到您提出了自己的答案,但是您可以通过使用...来简化此操作。

Get-ADPrincipalGroupMembership

# get function / cmdlet details
(Get-Command -Name Get-ADPrincipalGroupMembership ).Parameters
Get-help -Name Get-ADPrincipalGroupMembership  -Full
Get-help -Name Get-ADPrincipalGroupMembership  -Online
Get-help -Name Get-ADPrincipalGroupMembership  -Examples

# Example 2: Get group memberships for the Administrator

Get-ADPrincipalGroupMembership -Identity Administrator

...,其中列出了用户所属的所有组。

因此,您的调整可能就是这样...

Get-ADUser -Filter * | 
ForEach{ 
    # "`n--- Processing user $($PSItem.SamAccountName) ---`n"
    If ($TargetGroup = (Get-ADPrincipalGroupMembership -Identity $PSItem.SamAccountName) -match 'Password Reset Group')
    {
        $password = "$($PSItem.employeeNumber)new!" | 
        ConvertTo-SecureString -AsPlainText -Force

        Set-ADAccountPassword -Identity $PSItem.SamAccountName -NewPassword $password -Reset
        Remove-ADGroupMember -Identity $TargetGroup.SamAccountName -Members $PSItem.SameAccountName
    }
}

至于……

  

好的,所以我对Powershell有点陌生

…很好,但是您应该花一些时间在PowerShell上,以限制/避免猜测,误解,沮丧,不良习惯,错误等,这是您的明智之举,您将继续遇到(即使我们中最有经验的人也会这样做并互相学习)。我们拥有无数免费的免费资源供您利用。

YouTubeMVAMSDN Channel9上直播所有视频培训。 使用可以为您编写代码的工具,以后可以根据需要进行保存和调整。尤其是涉及到ADDS时。

Active Directory Administrative Center: Getting Started

Active Directory Administrative Center

Step-By-Step: Utilizing PowerShell History Viewer in Windows Server 2012 R2

免费的Booksreferences