#powershell
Вопрос:
Я пытаюсь запустить скрипт, который проверяет, находится ли пользователь в подразделении и добавлен ли в одноименную группу безопасности, если пользователь переходит в другое подразделение, его необходимо удалить из группы и добавить в новую группу
Я понимаю концепцию того, что мне нужно сделать, но я не могу ввести ее в PowerShell.
Пользователь будет перемещаться из подразделения в подразделение, и его необходимо будет удалить из текущей группы и добавить в Новое подразделение группы, и Группы безопасности будут называться одинаково:
Структура ПОДРАЗДЕЛЕНИЯ является
Комментарии:
1. Вам нужно предоставить свой сценарий, и тогда мы сможем вам помочь. Пожалуйста, отправьте через скрипт, который вы уже создали.
Ответ №1:
Вам необходимо использовать Compare-object
командлет.
Попробуйте это на некоторых тестовых подразделениях и тестовых учетных записях пользователей, чтобы быть в безопасности: (Обновите переменные в начале сценария, чтобы они соответствовали вашей среде…)
$VerbosePreference = "continue"
$UserOULocation = "OU=Test unit,OU=OU1,DC=Domain,DC=local" # please update
$DCServerName = "<servername>" # please update
$ADUsers = Get-ADUser -SearchBase $UserOULocation -filter * -Properties * -Server $DCServerName
$OUNames = Get-ADOrganizationalUnit -SearchBase $UserOULocation -Filter *
Foreach ($ADUser in $ADUsers)
{
$Groups = $ADUser.MemberOf | % {Get-ADGroup $_}
$CurrentOU = $ADUser.distinguishedname.Split(",")[1].replace("OU=","")
If ($Groups)
{
# You need to comapre the list of OUs to the groups that the account is a member of
$Comparing = Compare-Object $CurrentOU $Groups.name
foreach ($compare in $Comparing | Where-Object {$OUNames.name -contains $_.inputobject})
{
If ($Compare.SideIndicator -eq "<=")
{
$GroupName = $Compare.InputObject
Write-Verbose "Adding user $($aduser.name) to group $GroupName"
Add-ADGroupMember -Identity $Compare.InputObject -Members $ADUser.SamAccountName -Verbose
}
else
{
$GroupName = $Compare.InputObject
Write-Verbose "Removing user $($aduser.name) from group $GroupName "
Remove-ADGroupMember -Identity $GroupName -Members $ADUser.SamAccountName -Verbose
}
}
}
else
{
Write-Verbose "No - No groups found for user $($aduser.name)"
Write-Verbose "ACTION - Adding user to groups"
Add-ADGroupMember $CurrentOU -Members $ADUser.samaccountname
}
}
Комментарии:
1. Привет, большое тебе спасибо. Я проверю и обновлю вас
Ответ №2:
Если этот вопрос касается вашего желания переместить пользователя » X » в другое подразделение и, сделав это:
- удалите его из группы с тем же именем, что и подразделение, в котором он находится в настоящее время
- добавьте его в группу с тем же именем, что и подразделение, в которое он перемещен
Тогда вы могли бы сделать что-то вроде этого:
# change these to match your configuration
$userToMove = 'jdoe'
$destinationOU = 'OU=Accounting,DC=Europe,DC=Fabrikam,DC=com'
$user = Get-ADUser -Filter "SamAccountName -eq '$userToMove'" -ErrorAction -SilentlyContinue
if (!$user) { Write-Warning "User '$userToMove' does not exist" }
else {
# parse the OU from the users DistinguishedName property
$currentOU = [regex]::Match($user.DistinguishedName, '(?i)(?=OU=).*
Сведения о регулярном выражении, используемые при анализе подразделения из имени пользователя:
(?= Assert that the regex below can be matched, starting at this position (positive lookahead)
OU= Match the characters “OU=” literally
)
. Match any single character that is not a line break character
* Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
$ Assert position at the end of the string (or before the line break at the end of the string, if any)
).Value
# use the OU names to get the names for the groups
$currentGroup = (Get-ADOrganizationalUnit -Identity $currentOU).Name
$newGroup = (Get-ADOrganizationalUnit -Identity $destinationOU).Name
# if you need the DisplayNames instead,add parameter -Properties DisplayName
# and get the DisplayName property value. ie:
# $currentGroup = (Get-ADOrganizationalUnit -Identity $currentOU -Properties DisplayName).DisplayName
# $newGroup = (Get-ADOrganizationalUnit -Identity $destinationOU -Properties DisplayName).DisplayName
# remove the user from the group with the same name as the OU he's currently in
Remove-ADGroupMember -Identity $currentGroup -Members $user
# add the user to the new group
Add-ADGroupMember -Identity $newGroup -Members $user
# finally move the user to the new OU
$user | Move-ADObject -TargetPath $destinationOU
}
Сведения о регулярном выражении, используемые при анализе подразделения из имени пользователя: