импорт данных из csv и создание списка пользователей Active Directory

#python #powershell #csv #active-directory

#python #powershell #csv #active-directory

Вопрос:

эй, итак, я пытаюсь создать тот же скрипт из powershell на python, но я не могу сделать это правильно, может быть, вы сможете мне помочь, так что сценарий такой:

  1. открывает файл CSV с информацией о пользователях
  2. создайте пользователей для каждой строки в файле csv

csv выглядит следующим образом:

введите описание изображения здесь

сценарии powershell работают нормально, выглядит следующим образом:

 # import module
Import-Module ActiveDirectory
# create new password
$securedpassword = ConvertTo-SecureString "abc-123" -AsPlainText -Force
#import csv

$filepath = Read-Host -Prompt "please enter csv path"

#import the file into a variable

$users = Import-Csv $filepath

# loop all rows to gather information
foreach ($user in $users) {

# gather user information
$fname = $user.'first name'
$lname = $user.'last name'
$oupath = $user.'ou'
#creat new ad user from csv file
New-ADUser -name "$fname $lname" -GivenName $fname -Surname $lname -UserPrincipalName "$fname.$lname" -Path $oupath -AccountPassword $securedpassword -ChangePasswordAtLogon $true -Enabled $true
# echo output
echo "account created for $fname $lname in $oupath"
}
  

и в Python вот так:

 #import csv and active directory module

import csv
from pyad import *

def createuserfromcsv():
    #takes full file path for test: c:newusers.csv
    file = input('please type your file path   file: ')
    
    data = open(file,encoding="utf-8")
    
    csv_data = csv.reader(data)
    
    data_lines = list(csv_data)

    pyad.set_defaults(ldap_server="DC-01-Training.Udemy.training",username="Administrator",password="abc-123")



    for line in data_lines[1:]:
        user = line[0]
    for line in data_lines[1:]:
        oupath = line[2]
ou = pyad.adcontainer.ADContainer.from_dn(oupath)
new_user = pyad.aduser.ADUser.create(user,ou,password="abc-123")


print(user)
print(oupath)
  

как я могу это исправить?

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

1. почему каждая строка в вашем CSV заключена в квадратные скобки???

2. нет, это электронная таблица, которую вы видите, это результат: печать (data_lines)

3. Итак, то, что вы нам показываете, вообще не является файлом CSV.. Пожалуйста, отредактируйте свой вопрос и введите ДЕЙСТВИТЕЛЬНЫЕ данные csv.

4. хорошо, теперь я добавил изображение исходного файла CSV

Ответ №1:

хорошо, я сделал это, работает как с функцией, так и без нее:

 import csv
from pyad import *
def createuserfromcsv():
    #takes full file path
    file = input('please type your file path   file: ')
    data = open(file,encoding="utf-8")
    csv_data = csv.reader(data)
    data_lines = list(csv_data)
    #load admin information
    pyad.set_defaults(ldap_server="DC-01-Training.Udemy.training",username="Administrator",password="abc-123")

    for line in data_lines[1:]:
        user = line[0]
        oupath = line[2]
        ou = pyad.adcontainer.ADContainer.from_dn(oupath)
        pyad.aduser.ADUser.create(user,ou,password="abc-123")
  

Ответ №2:

     # Step 1: Import the ActiveDirectory module and connect to the AD server
    
    Import-Module ActiveDirectory
    
    $ad_user = "user@example.com"
    $ad_password = "password" | ConvertTo-SecureString -AsPlainText -Force
    $ad_credential = New-Object System.Management.Automation.PSCredential -ArgumentList $ad_user, $ad_password
    $ad_domain = "example.com"
    
    Connect-AzureAD -Credential $ad_credential -TenantId $ad_domain
    
    # Step 2: Read the CSV file into a variable as an array of objects
    
    $records = Import-Csv -Path "records.csv"
    
    # Step 3: Iterate over the array of objects and create AD users
    
    foreach ($record in $records) {
      $first_name = $record.first_name
      $last_name = $record.last_name
      $email = $record.email
      $password = $record.password
      
      # Create the AD user
      New-AzureADUser -AccountEnabled $true -DisplayName "$first_name $last_name" -PasswordProfile @{ Password = $password; ForceChangePasswordNextSignIn = $false } -UserPrincipalName $email -GivenName $first_name -Surname $last_name -MailNickname $email
      
      # Set additional attributes for the user
      Set-AzureADUser -ObjectId (Get-AzureADUser -Filter "UserPrincipalName eq '$email'").ObjectId -MobilePhone $record.mobile_phone -StreetAddress $record.street_address -City $record.city -State $record.state -PostalCode $record.postal_code -Country $record.country
    }
    
    # Step 4: Save the changes to the AD server
    
    Save-AzureAD
    
    Write-Host "Import completed successfully!"
  
  1. Сохраните скрипт в файл с расширением .ps1, например, Import-ADUsers.ps1.

  2. Измените сценарий, чтобы установить соответствующие значения для следующих переменных:

  3. $ou: это различимое имя (DN) организационной единицы (OU), в которой вы хотите создать новых пользователей.

  4. $csvFile: это путь к файлу CSV, который содержит пользовательские записи, которые вы хотите импортировать.

  5. Убедитесь, что в файле CSV есть соответствующие столбцы, как указано в сценарии.

  6. Откройте окно PowerShell и перейдите в каталог, в котором сохранен скрипт.

  7. Запустите скрипт, используя следующую команду: .Import-ADUsers.ps1 Скрипт прочитает файл CSV, создаст новый объект user для каждой записи в файле и установит указанные атрибуты для каждого пользователя.

    Обратите внимание, что на вашем компьютере должен быть установлен модуль Active Directory, и вам нужно будет запустить скрипт с правами администратора.

Ответ №3:

 # Step 1: Install the required python modules

!pip install pyad
!pip install pandas

# Step 2: Import the necessary modules in your script

import pyad
import pandas as pd

# Step 3: Connect to the AD server

ad_user = "user@example.com"
ad_password = "password"
ad_domain = "example.com"

pyad.set_defaults(username=ad_user, password=ad_password)
ad_server = pyad.adserver.ADServer.from_domain_name(ad_domain)

# Step 4: Read the CSV file into a Pandas DataFrame

df = pd.read_csv("records.csv")

# Step 5: Iterate over the rows of the DataFrame and create AD users

ou = "OU=Users,DC=example,DC=com"  # The distinguished name of the AD organizational unit where you want to create the users

for index, row in df.iterrows():
  first_name = row["first_name"]
  last_name = row["last_name"]
  email = row["email"]
  password = row["password"]
  
  # Create the AD user
  user = pyad.aduser.ADUser.create(name=f"{first_name} {last_name}", upn=email, password=password, ou=ou)
  
  # Set additional attributes for the user
  user.update_attribute("givenName", first_name)
  user.update_attribute("sn", last_name)
  user.update_attribute("mail", email)

# Step 6: Save the changes to the AD server

ad_server.commit()

print("Import completed successfully!")
  

Этот скрипт выполняет следующие шаги:

  1. Устанавливает необходимые модули pyad и pandas на python с помощью команды pip.
  2. Импортирует модули pyad и pandas.
  3. Подключается к серверу AD, используя предоставленное доменное имя и учетные данные. Функция pyad.set_defaults() используется для установки имени пользователя и пароля по умолчанию для подключения. Pyad.adserver.Функция ADServer.from_domain_name() используется для создания объекта сервера рекламы на основе предоставленного доменного имени.
  4. Считывает файл CSV в фрейм данных Pandas с помощью функции pandas.read_csv().
  5. Выполняет итерацию по строкам фрейма данных с помощью функции df.iterrows(). Для каждой строки скрипт извлекает значения соответствующих столбцов (например, имя, фамилия, адрес электронной почты, пароль) и сохраняет их в переменных.
  6. Создает нового пользователя AD с помощью pyad.aduser.Метод ADUser.create(). В аргументе name указывается полное имя пользователя, в аргументе upn указывается основное имя пользователя (адрес электронной почты), а в аргументе password указывается пароль пользователя. Аргумент ou указывает различимое имя подразделения AD, в котором вы хотите создать пользователя.
  7. Устанавливает дополнительные атрибуты для пользователя с помощью `user.update_attribute()