По поводу использования цикла powershell

Добрый день, помогите пожалуйста написать правильно цикл правильно или подскажите какой нибудь альтернативный способ использования циклов в командатлете New-ADUser
имею такой скрипт, который перебирает значения в эксель и добавляет юзера из списка.

Цикл почему то работает неправильно:

$Excel = New-Object -COM "Excel.Application"
$Excel.Visible = $false
$WorkBooks = $Excel.Workbooks.Open("C:\Users\admin\Desktop\promo_add.xlsx")
$WorkSheet = $WorkBooks.Sheets.Item("Sheet1")
#$collection = New-Object System.Collections.ArrayList
$name_us = $WorkSheet.Range("J5:J6").Value2
$name_emp = $WorkSheet.Range("H5:H6").Value2
$surn_emp = $WorkSheet.Range("I5:I6").Value2
$log_us = $WorkSheet.Range("L5:L6").Value2
$dolj = $WorkSheet.Range("P5:P6").Value2
$pr_name = $WorkSheet.Range("M5:M6").Value2
$user_path = $WorkSheet.Range("Q5:Q6").Value2
офис,OU=Компаньон,DC=dc,DC=kompanion,DC=kg"
$user_office = $WorkSheet.Range("N5:N6").Value2
$dep_us = $WorkSheet.Range("O5:O6").Value2
$group_stajer = $WorkSheet.Range("C36:C45").Value2
$excel.ActiveWorkbook.close()
$excel.Quit()
ForEach($name_us1 in $name_us){
ForEach($name_emp1 in $name_emp){
 ForEach($surn_emp1 in $surn_emp){
 ForEach($log_us1 in $log_us){ 
 ForEach($pr_name1 in $pr_name){
 ForEach($dep_us1 in $dep_us){
 ForEach($dolj1 in $dolj){
 ForEach($user_office1 in $user_office){
  ForEach($user_path1 in $user_path){
  
New-ADUser -Name $name_us1 -GivenName $name_emp1 -Surname $surn_emp1  -DisplayName $name_us1 -SamAccountName $log_us1 -UserPrincipalName $pr_name1 -Department $dep_us1 -Title $dolj1 -Company $user_office1 -Path $user_path1 -AccountPassword (ConvertTo-SecureString -AsPlainText “Qwerty123$” -Force ) -ChangePasswordAtLogon $True -Enabled $True 
}}}}}}}}}

почему то после запуска ругается что запись существует:

New-ADUser : Указанная учетная запись уже существует
C:\Users\admin\Desktop\add_promo.ps1:31 знак:1
+ New-ADUser -Name $name_us1 -GivenName $name_emp1 -Surname $surn_emp1  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceExists: (CN=Елена Яковле...kompanion,DC=kg:String) [New-ADUser], ADIdentityAlreadyExistsException
    + FullyQualifiedErrorId : ActiveDirectoryServer:1316,Microsoft.ActiveDirectory.Management.Commands.NewADUser
```
Как можно правильно написать скрипт без ошибок? Вариант с выгрузкой csv не подходит уже смотрел в инете так как отчет индивидуален и каждый раз корректировать заголовки тратится время 
к примеру то что по ссылке https://winitpro.ru/index.php/2018/03/02/new-aduser-sozdaem-polzovatelej-v-domene/

Так она (учетная запись) и существует видимо. Добавьте в свой цикл проверку на существующую запись и добавляйте в AD только то. что отсутствует.

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

Для начала в CSV сконвертируйте и работайте не с диапазонами а названиями полей

понятно, обошелся банальный конструкцией if… else, хотелось большего про тему использование циклов именно по моей задаче.

У Вас избыточный код. Вложенность, вложенностью погоняет)

В одном из циклов «наезжало» одно на другое возможно.

Ваше решение это было мое первое предложение.

Оптимизируйте код, уберите лишнее, сведите все к минимуму, сделайте csv и по аналогии его обработайте, кода получится в несколько раз меньше, тогда проблема возможно себя не проявит вовсе

ну это само собой вложенность за вложения так как командатлету требуется для их параметров, пытался прописать код как в аналогии то что по выше ссылке но как упомянул “для продуктивности нерентабельно” уж лучше графикой копи пастить там даже помоему быстрее получится. Может то что выше примером отписал есть какие то альтернативные пути использования цикла ну например прописать несколько параметров для foreach($a1 in $a -and $b1 in $b) тут пример конечно бред полный но мысль наверное поняли

Измените логику. Загрузите файл в переменную и перебирайте уже сам объект, примерно так:

$Csvfile = "C:\data\ADUsers.csv"
$Users = Import-Csv $Csvfile

Import-Module ActiveDirectory

# Loop object as each user
foreach ($User in $Users) {
    $GivenName = $User.'First name'
    $Surname = $User.'Last name'
....
   # Check is user exists
   $UserExists = Get-ADUser -Filter "SamAccountName -eq '$SamAccountName'" -ErrorAction SilentlyContinue
   if ($UserExists) {
        Write-Warning "User '$SamAccountName' already exists!"
        continue
    }
   # Create user object
    $NewUserParams = @{
        GivenName             = $GivenName
        Surname               = $Surname
...
  # Try to create user
   try {
        New-ADUser @NewUserParams
        Write-Host "User $SamAccountName created successfully." -ForegroundColor Cyan
    }
    catch {
     ...
    }
}