Добавление групповых политик для нового пользователя AD

#powershell #winforms #if-statement

Вопрос:

Есть ли способ добавить групповые политики для нового пользователя AD в том же сценарии? Когда я добавляю функцию создания нового пользователя к кнопке, кажется, что новый пользователь появляется только в конце сценария, когда я пытаюсь добавить групповую политику в переменную $userName, она не может найти пользователя в объявлении. Могу ли я создать нового пользователя до завершения сценария? По какой-то причине мне также нужно снова объявить переменную.

 function Creation {
    
    $firstName = $textbox_FirstName.Text
    $middleName = $textbox_MiddleName.Text
    $lastName = $textbox_Surname.Text
    $jobCode = $textbox_JobCode.Text
    $Password = $textbox_Password.Text | ConvertTo-SecureString -AsPlainText -Force
    
    if ($dropdown_FirstOU.Text -eq "Aberdeen") {
        $OU = "OU=Aberdeen,OU=UK,DC=Kuehne-Nagel,DC=local"
    } elseif ($dropdown_FirstOU.Text -eq "Kingpin") {
        $OU = "OU=Kingpin,OU=UK,DC=Kuehne-Nagel,DC=local"
    }
    
    if (($dropdown_FirstOU.Text -eq "Banbury") -and ($dropdown_SecondOU.Text -eq "Business Development")) {
        $OU = "OU=Business Development,OU=Banbury,OU=UK,DC=Kuehne-Nagel,DC=local"
    } elseif (($dropdown_FirstOU.Text -eq "Banbury") -and ($dropdown_SecondOU.Text -eq "CTI/Property")) {
        $OU = "OU=CTI / Property,OU=Banbury,OU=UK,DC=Kuehne-Nagel,DC=local"
    }

    if (($dropdown_FirstOU.Text -eq "London") -and ($dropdown_SecondOU.Text -eq "Heathrow03") -and ($dropdown_ThirdOU.Text -eq "Heathrow03")) {
        $OU = "OU=Heathrow03,OU=Heathrow03,OU=London,OU=UK,DC=Kuehne-Nagel,DC=local"
    }

    $Telephone = $textbox_Telephone.Text
    
    if ($textbox_MiddleName.Text -eq "") {
        $displayName = "$lastName, $firstName"
        $userName = "$firstName.$lastName"
    } else {
        $displayName = "$lastName, $firstName $middleName"
        $userName = "$firstName.$middleName.$lastName"
    }

    New-ADUser -Name "$userName" -GivenName "$firstName" -Surname "$lastName" -Initials "$middleName" -officephone "$Telephone" -samAccountName "$userName" -AccountPassword $Password -Enabled $True -DisplayName "$displayName / Kuehne   Nagel / $jobCode" -userPrincipalName "$userName@kuehne-nagel.local" -Path "$OU"
    Set-ADUser -Identity $userName -ChangePasswordAtLogon $true
}

function Template {

    $firstName = $textbox_FirstName.Text
    $middleName = $textbox_MiddleName.Text
    $lastName = $textbox_Surname.Text

    if ($textbox_MiddleName.Text -eq "") {
        $displayName = "$lastName, $firstName"
        $userName = "$firstName.$lastName"
    } else {
        $displayName = "$lastName, $firstName $middleName"
        $userName = "$firstName.$middleName.$lastName"
    }

    if ($RadioButton_IFF.Checked) {
        Add-ADGroupMember -Identity "Test1" -Members $UserName
    }
}
 

Ответ №1:

После создания пользователя ( New-ADUser ) вам нужно будет извлечь ADUser объект, чтобы использовать его.

Пример:

 New-ADUser -Name "$userName" -GivenName "$firstName" -Surname "$lastName" -Initials "$middleName" -officephone "$Telephone" -samAccountName "$userName" -AccountPassword $Password -Enabled $True -DisplayName "$displayName / Kuehne   Nagel / $jobCode" -userPrincipalName "$userName@kuehne-nagel.local" -Path "$OU"
$UserName = Get-ADUser $userName
 

Затем вы можете использовать $userName с командами Set-ADUser и. Add-ADGroupMember

Честно говоря, было бы проще использовать одну функцию и включить в нее свое состояние.

Пример:

 function Creation {

$firstName = $textbox_FirstName.Text
$middleName = $textbox_MiddleName.Text
$lastName = $textbox_Surname.Text
$jobCode = $textbox_JobCode.Text
$Password = $textbox_Password.Text | ConvertTo-SecureString -AsPlainText -Force

if ($dropdown_FirstOU.Text -eq "Aberdeen") {
    $OU = "OU=Aberdeen,OU=UK,DC=Kuehne-Nagel,DC=local"
} elseif ($dropdown_FirstOU.Text -eq "Kingpin") {
    $OU = "OU=Kingpin,OU=UK,DC=Kuehne-Nagel,DC=local"
}

if (($dropdown_FirstOU.Text -eq "Banbury") -and ($dropdown_SecondOU.Text -eq "Business Development")) {
    $OU = "OU=Business Development,OU=Banbury,OU=UK,DC=Kuehne-Nagel,DC=local"
} elseif (($dropdown_FirstOU.Text -eq "Banbury") -and ($dropdown_SecondOU.Text -eq "CTI/Property")) {
    $OU = "OU=CTI / Property,OU=Banbury,OU=UK,DC=Kuehne-Nagel,DC=local"
}

if (($dropdown_FirstOU.Text -eq "London") -and ($dropdown_SecondOU.Text -eq "Heathrow03") -and ($dropdown_ThirdOU.Text -eq "Heathrow03")) {
    $OU = "OU=Heathrow03,OU=Heathrow03,OU=London,OU=UK,DC=Kuehne-Nagel,DC=local"
}

$Telephone = $textbox_Telephone.Text

if ($textbox_MiddleName.Text -eq "") {
    $displayName = "$lastName, $firstName"
    $userName = "$firstName.$lastName"
} else {
    $displayName = "$lastName, $firstName $middleName"
    $userName = "$firstName.$middleName.$lastName"
}

New-ADUser -Name "$userName" -GivenName "$firstName" -Surname "$lastName" -Initials "$middleName" -officephone "$Telephone" -samAccountName "$userName" -AccountPassword $Password -Enabled $True -DisplayName "$displayName / Kuehne   Nagel / $jobCode" -userPrincipalName "$userName@kuehne-nagel.local" -Path "$OU"
#new Part
$UserName = Get-ADUser $userName
$userName | Set-ADUser -ChangePasswordAtLogon $True
if ($RadioButton_IFF.Checked) {
        Add-ADGroupMember -Identity "Test1" -Members $UserName
    }

}
 

Комментарии:

1. Добавить-ADGroupMember : Не удается найти объект с идентификатором: ‘Гарри. Тест» под: «DC=Кене-Нагель,DC=местный». В C:UsersAdministratorDocuments Новый пользователь.ps1:58 символ:9 Добавить-Участник группы -Идентификатор «Test1» -Участники $Имя пользователя

2. По тому, как построены эти функции, вам нужно будет добавить их в обе. Потому $UserName что переменная будет содержаться в функции. Честно говоря, вам, вероятно, следует сделать эту функцию одной

3. Мне было интересно, должна ли это быть одна функция, позвольте мне попробовать, но я думаю, что у нее будет та же ошибка с невозможностью найти пользователя. Я попытался добавить паузу, но это не помогло.

4. Я обновил ответ, включив в него слегка измененную вашу функцию.

5. Вы можете просто захватить только что созданного пользователя, как $user = New-ADUser ... . После этого не нужно использовать Get-ADUser.