Я думаю, что вам следует больше обращаться к руководству по стилю PowerShell, это облегчает чтение и изменение скрипта в будущем. Также вы должны использовать намного больше ошибок в вашем скрипте.
например, добавление обработки ошибок и упрощение:
foreach($Group in $Groups){
try{
Add-ADPrincipalGroupMembership -Identity $username -MemberOf $Group
Write-Host "Successfully added groupmembership for '$username' to '$group'" -ForegroundColor Green
}catch{
Write-Host "Failed to add groupmembership for '$username' to '$group'" -ForegroundColor Red
}
}
И для следующего также определенно советуем использовать try / catch, потому что сценарий останавливается, если, например, значение 1 неверно.
try{
New-ADUser -Name $Displayname -GivenName $voornaam -Surname $achternaam -DisplayName $Displayname -SamAccountName $username -UserPrincipalName $UserPrincipalName -HomeDrive $homefolderdrive -HomeDirectory $homefolder -ProfilePath $profilefolder -Path $OU -AccountPassword $SecurePass -PasswordNeverExpires $true -Enabled $True
}catch{
Write-Host "Failed to create AD user '$Displayname'" -ForegroundColor Red
}
Что вы можете сделать, чтобы предотвратить пустые значения для CMDlet New-ADUser, например:
foreach($user in $users){
$params = @{}
if($user.Voornaam){
$params += @{
givenName = $user.Voornaam
}
}
if($user.Achternaam){
$params += @{
surName = $user.Achternaam
}
}
try{
New-ADUser @params
}catch{
Write-Host "Failed to create AD user '$($user.displayName)'" -ForegroundColor Red
}
}
Таким образом, вы делаете это намного проще! Надеюсь, это поможет.
Удачи