创建 OU 将用户添加到 AD,创建组并将用户添加到组 PowerShell

创建 OU 将用户添加到 AD,创建组并将用户添加到组 PowerShell

我正在尝试编写一个脚本,但它在创建所有 OU 后就停止工作了。所有 OU 都创建得很完美,只是没有创建用户和组,这反过来又没有将用户添加到指定的组中。

我尝试自己解决这个问题,但似乎找不到脚本中的缺陷。

# import required modules
Import-Module ActiveDirectory

# Set Password
$password = ConvertTo-SecureString "W@chtw00rd" -AsPlainText -Force

#Set FilePath
$filepath = "C:\Users\Administrator\Desktop\Lijst met Medewerkers FitNu.csv"

# Import file into variable
$users = Import-Csv $filepath

# Loop through rows, set variables and make new users 
ForEach ($user in $users) {
    
    $fname = $user.'Voornaam'
    $surname = $user.'Achternaam'
    $jtitle = $user.'Functie'
    $officephone = $user.'Telefoon'
    $office = $user.'Locatie'
    $department = $user.'Afdeling'
    $OUpath = $user.'Organizational Unit'
    $title = $user.'Functie'
    $location = $user.'Locatie'

# Make OU's
    New-ADOrganizationalUnit -Name "Asgard" -Path "DC=Asgard,DC=com" -ProtectedFromAccidentalDeletion $false
    New-ADOrganizationalUnit -Name "$location" -Path "OU=Asgard,DC=Asgard,DC=com" -ProtectedFromAccidentalDeletion $false
    New-ADOrganizationalUnit -Name "$department" -Path "OU=$location,OU=Asgard,DC=Asgard,DC=com" -ProtectedFromAccidentalDeletion $false
    New-ADOrganizationalUnit -Name "DomainLocal" -Path "OU=$location,OU=Asgard,DC=Asgard,DC=com" -ProtectedFromAccidentalDeletion $false

# Make Users
    New-ADUser -Name "$fname" -GivenName "$fname" -UserPrincipalName "$fname $surname" -Surname "$surname" -Path "OU=$location,OU=$department,OU=Asgard,DC=Asgard,DC=com" -ProfilePath "\\Thor\UserProfiles\$fname" -Homedrive "D" -Homedirectory "\\Thor\UserData\$fname" -AccountPassword $password -OfficePhone "+31$officephone" -Office "$office" -Department "$department" -Title "$title" -PasswordNeverExpires $True -ChangePasswordAtLogon $False -Enabled $True

# Make Groups
    $globalgroup = "GG_"+"$department"+"_"+"$location[0]"
    New-ADGroup -Name $globalgroup -GroupCategory Security -GroupScope Global -Path "OU=$location,OU=$department,OU=Asgard,DC=Asgard,DC=com"

    $domaingroupr = "DL_"+"$department"+"_"+"$location[0]"+"_R"
    New-ADGroup -Name $domaingroupr -Groupcategory Security -GroupScope DomainLocal -Path "OU=$location,OU=DomainLocal,DC=Asgard,DC=com"

    $domaingrouprw = "DL_"+"$deparment"+"_"+"$location[0]"+"_RW"
    New-ADGroup -Name $domaingrouprw -Groupcategory Security -Groupscope DomainLocal -Path "OU=$location,OU=DomainLocal,DC=Asgard,DC=com"

# Add Users to group
    Add-ADGroupMember -Identity $globalgroup -Members $user

}

答案1

你的问题在这里:

-UserPrincipalName "$fname $surname"

用户主体名称应为username@domain,因此不能包含空格。由于无效,因此显示未找到身份。我在脚本的任何地方都看不到任何用户名构造,所以这是您的下一步。虽然可能只可以在此处设置用户名,但请确保它不包含空格。句点是可以接受的,但最好是用户名@域。

-UserPrincipalName指定格式为 的用户主体名称 (UPN) <user>@<DNS-domain-name>。UPN 是由管理员分配的友好名称,比系统使用的 LDAP 可分辨名称更短且更容易记住。UPN 独立于用户对象的可分辨名称,因此可以移动或重命名用户对象而不会影响用户登录名。使用 UPN 登录时,用户不再需要从登录对话框的列表中选择域。
来源:https://docs.microsoft.com/en-us/.../new-aduser?view=windowsserver2019-ps

答案2

以值(数组)Add-AdGroupMember作为其参数。这些值必须是-Member用户DistinguishedName、、或对象。ObjectGUIDObjectSIDSamAccountNameMicrosoft.ActiveDirectory.Management.ADUser

你正在向它提供$userCSV 中的对象,其中包含没有任何这些属性。实现方法是将 cmdlet 的结果捕获New-ADUser到变量中,并将该对象(或上面提到的该对象中的一个属性)用作参数-Member

此外,我强烈建议使用 Splatting 参数,这样您就不必创建那些很容易出错的可怕的长代码行。

尝试:

$userParams = @{
    # you forgot this one
    SamAccountName        = $user.Achternaam
    # and UserPrincipalName must have format: username@domain name (UPN suffix)
    UserPrincipalName     = '{0}@asgard.com' -f $user.Achternaam
    Name                  = '{0} {1}' -f $user.Voornaam, $user.Achternaam
    GivenName             = $user.Voornaam
    Surname               = $user.Achternaam
    AccountPassword       = $password
    ProfilePath           = '\\Thor\UserProfiles\{0}' -f $user.Achternaam
    Path                  = 'OU={0},OU={1},OU=Asgard,DC=Asgard,DC=com' -f $user.Locatie, $user.Afdeling
    Homedrive             = 'D'
    Homedirectory         = '\\Thor\UserData\{0}' -f $user.Achternaam
    OfficePhone           = '+31{0}'-f $user.Telefoon
    Office                = $user.Locatie
    Department            = $user.Afdeling
    Title                 = $user.Functie
    PasswordNeverExpires  = $True
    ChangePasswordAtLogon = $False
    Enabled               = $True
}

$ADUser = New-ADUser @userParams -PassThru  # use PassThru to capture the newly created user

现在您有一个 ADUser 对象,您可以在 Add-ADGroupMember 行上使用它:

Add-ADGroupMember -Identity $globalgroup -Members $ADUser

PS 还建议首先检查域中是否已存在具有该 SamAccountName 的用户,如果是,则输出警告并跳过该用户。为此使用:

foreach ($user in $users) {
    $ADUSer = Get-ADUser -Filter "SamAccountName -eq '$($user.Achternaam)'" -ErrorAction SilentlyContinue
    if ($ADUser) {
        Write-Warning "A user '$($user.Achternaam)' already exists in the domain"
        continue  # skip this user and proceed with the next one
    }

    # here the rest of the code
}

哦,是的,失败的原因New-ADUser是:

  • 您没有指定(必填)SamAccountName
  • UserPrincipalName 在语法上是错误的(参见内联注释)

相关内容