Прочтите все строки для .txt powershell

У меня есть сценарий PowerShell, который, когда я его запускаю, создает локальный amdmistrator на выбранных мной компьютерах и дает мне еще один текстовый файл, в котором они были созданы.

Но из txt, где собирает хост, выбирает только последнюю строку, и я не знаю почему.

Спасибо за помощь

cls
$username = "username"
$password = "password"


$computernames = get-content "C:\serverlist.txt"
     foreach ($computername in $computernames) {
     get-adcomputer $computername | select DistinguishedName >    C:\serverlist2.txt
}

$users = $null
$computer = [ADSI]"WinNT://$computername"
Try {
     $users = $computer.psbase.children | select -expand name
     if ($users -like $username) {
         Write-Host "$username already exists"
     } Else {
  $user_obj = $computer.Create("user", "$username")
  $user_obj.SetPassword($password)
  $user_obj.SetInfo()

  $user_obj.Put("description", "$username")
  $user_obj.SetInfo()
  $user_obj.psbase.invokeset("AccountDisabled", "False")
  $user_obj.SetInfo()
  $users = $computer.psbase.children | select -expand name
  if ($users -like $username) {
     Write-Host "$username has been created on $($computer.name)"

  $group = [ADSI]("WinNT://"+$computername+"/administradores,group")
  $group.add("WinNT://"+$computername+"/"+$username+",user")
  } Else {
     Write-Host "$username has not been created on $($computer.name)"
  }
}
     } Catch {
     Write-Host "Error creating $username on $($computer.path):    $($Error[0].Exception.Message)"
}
0
задан 15 January 2018 в 01:38
1 ответ

Ваша ошибка возникла из-за того, что цикл foreach был закрыт до того, как вы обработали основное действие:

$computernames = get-content "C:\serverlist.txt"
     foreach ($computername in $computernames) {
     get-adcomputer $computername | select DistinguishedName >    C:\serverlist2.txt
} # <-- This is the error

И когда сценарий продолжит выполнение, прочтите только последнее значение $ computername .

Вы измените сценарий следующим образом:

cls
$username = "username"
$password = "password"

$computernames = get-content "C:\serverlist.txt"
foreach ($computername in $computernames) {
     get-adcomputer $computername | select DistinguishedName >    C:\serverlist2.txt

    $users = $null
    $computer = [ADSI]"WinNT://$computername"
    Try {
        $users = $computer.psbase.children | select -expand name
        if ($users -like $username) {
            Write-Host "$username already exists"
        } else {
            $user_obj = $computer.Create("user", "$username")
            $user_obj.SetPassword($password)
            $user_obj.SetInfo()
            $user_obj.Put("description", "$username")
            $user_obj.SetInfo()
            $user_obj.psbase.invokeset("AccountDisabled", "False")
            $user_obj.SetInfo()
            $users = $computer.psbase.children | select -expand name
            if ($users -like $username) {
                Write-Host "$username has been created on $($computer.name)"
                $group = [ADSI]("WinNT://"+$computername+"/administradores,group")
                $group.add("WinNT://"+$computername+"/"+$username+",user")
            } else {
                Write-Host "$username has not been created on $($computer.name)"
            }
        }
    } Catch {
        Write-Host "Error creating $username on $($computer.path):    $($Error[0].Exception.Message)"
    }
}

И исправите некоторые ошибки с отступом.

0
ответ дан 5 December 2019 в 06:50

Теги

Похожие вопросы