#python #powershell #csv #active-directory
#python #powershell #csv #active-directory
Вопрос:
эй, итак, я пытаюсь создать тот же скрипт из powershell на python, но я не могу сделать это правильно, может быть, вы сможете мне помочь, так что сценарий такой:
- открывает файл CSV с информацией о пользователях
- создайте пользователей для каждой строки в файле 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!"
-
Сохраните скрипт в файл с расширением .ps1, например, Import-ADUsers.ps1.
-
Измените сценарий, чтобы установить соответствующие значения для следующих переменных:
-
$ou: это различимое имя (DN) организационной единицы (OU), в которой вы хотите создать новых пользователей.
-
$csvFile: это путь к файлу CSV, который содержит пользовательские записи, которые вы хотите импортировать.
-
Убедитесь, что в файле CSV есть соответствующие столбцы, как указано в сценарии.
-
Откройте окно PowerShell и перейдите в каталог, в котором сохранен скрипт.
-
Запустите скрипт, используя следующую команду: .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!")
Этот скрипт выполняет следующие шаги:
- Устанавливает необходимые модули pyad и pandas на python с помощью команды pip.
- Импортирует модули pyad и pandas.
- Подключается к серверу AD, используя предоставленное доменное имя и учетные данные. Функция pyad.set_defaults() используется для установки имени пользователя и пароля по умолчанию для подключения. Pyad.adserver.Функция ADServer.from_domain_name() используется для создания объекта сервера рекламы на основе предоставленного доменного имени.
- Считывает файл CSV в фрейм данных Pandas с помощью функции pandas.read_csv().
- Выполняет итерацию по строкам фрейма данных с помощью функции df.iterrows(). Для каждой строки скрипт извлекает значения соответствующих столбцов (например, имя, фамилия, адрес электронной почты, пароль) и сохраняет их в переменных.
- Создает нового пользователя AD с помощью pyad.aduser.Метод ADUser.create(). В аргументе name указывается полное имя пользователя, в аргументе upn указывается основное имя пользователя (адрес электронной почты), а в аргументе password указывается пароль пользователя. Аргумент ou указывает различимое имя подразделения AD, в котором вы хотите создать пользователя.
- Устанавливает дополнительные атрибуты для пользователя с помощью `user.update_attribute()