Скрипт Powershell для получения всех групп, содержащих определенное имя - PullRequest
0 голосов
/ 16 марта 2019

Хорошо, я немного новичок в 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 голосов
/ 17 марта 2019

Приятно видеть, что вы придумали свой собственный ответ, но вы можете упростить это, просто используя ...

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, чтобы ограничить / избежать догадок, заблуждений, разочарований, вредных привычек, ошибок и т. Д., Которые вы собираетесь продолжить встретиться (даже самые опытные из нас это делают и учатся друг у друга). Мы предлагаем вам множество бесплатных / бесплатных ресурсов.

Live на YouTube , MVA , MSDN Channel9 для всех видео тренингов. Используйте инструменты, которые напишут для вас код, который вы сможете сохранить и настроить по мере необходимости позже. Особенно когда дело доходит до ADDS.

Центр администрирования Active Directory: начало работы

Центр администрирования Active Directory

Пошаговое руководство: использование средства просмотра истории PowerShell в Windows Server 2012 R2

Бесплатно Книги и Ссылки

0 голосов
/ 17 марта 2019

Используя информацию, предоставленную мне @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

        }
        }
        }
...