PowerShell Set-Aduser Credentials - как автоматизировать? - PullRequest
0 голосов
/ 19 июня 2020

для целей автоматизации - выполнение миграции из одной AD в другую - я хочу аутентифицировать свои действия сценария по отношению к серверам AD, к которым я подключаюсь для выполнения действия.

создание пользователя, например, через Powershell довольно прост:

PS C:\Users\myuser> Get-ADUser -Server "domain1.net" -Identity username-1 | Set-ADUser -Server \
"domain1.net" -SamAccountName usernam-1-mig -DisplayName usernam-1-mig -Surname usernam-1-mig \
-UserPrincipalName usernam-1-mig -GivenName usernam-1-mig -Credential AD\admin-user

Поскольку каждый раз, когда пользователь переименовывается, требуется логин, и поскольку я использую не только PowerShell, а python (да, потому что миграция связана не только с AD move, но много других действий), я хотел предоставить каждой команде powershell свое имя пользователя и пароль для аутентификации домена.

Я пробовал несколько подходов с других веб-сайтов, но не смог заставить их работать. PSCredentials, на который я смотрел, но тоже не мог понять.

Из python я вызываю команду powershell следующим образом

migration = subprocess.Popen(["powershell.exe", ps_rename_cmd ], stdout=subprocess.PIPE)
migration.wait()

ps_rename_cmd - это простая текстовая переменная с аналогичным содержимым из первый фрагмент кода

Заранее большое спасибо за вашу помощь

1 Ответ

0 голосов
/ 20 июня 2020

Хорошо, покопавшись в документации и благодаря отличной странице !, я смог понять это ...

Из PowerShell я узнал, что это отлично работает :

New-ADUser -Server "domain.net" -AccountPassword (ConvertTo-SecureString user_password \
-AsPlainText -Force) -EmailAddress "user1@domain.net" -Name "user1" -DisplayName "user1" \
-GivenName "user1" -Surname "user1" -UserPrincipalName "user1" -path \
"OU=COMPANY,OU=Applications,OU=Users,OU=DEPARTMENT,OU=Global,DC=department,DC=domain,\
DC=net" -PasswordNeverExpires $true -Confirm:$false -Credential (New-Object \
System.Management.Automation.PSCredential ("DOMAIN\admin-user",(ConvertTo-SecureString \
"password" -AsPlainText -Force)))

Важно, чтобы текст внутри переменных был хорошо отформатирован!

  1. создал строку для части Credential
ps_credentials = (f' (New-Object System.Management.Automation.PSCredential ("DOMAIN1\{auth_user}",(ConvertTo-SecureString "{auth_pw}" -AsPlainText -Force)))')
команда как строка, хорошо отформатированная! Переменная ps_credentials используется в brakets ()
ps_create_cmd = (f'New-ADUser -Server \"{domain_name}\" -Path \"{ou_destination}\" -AccountPassword ({sec_pw}) -EmailAddress {username}@domain.net -Name {username} -SamAccountName {username} -DisplayName {username} -Surname {username} -UserPrincipalName {username} -GivenName {username} -PasswordNeverExpires $true -Confirm:$false -Credential {ps_credentials}')
Выполнение такой команды powershell
create_user = subprocess.run(["powershell.exe", (f'{ps_create_cmd}')], capture_output=True, text=True)

Окно учетных данных, которое мешало мне автоматизировать все это, больше не появляется, и пользователь-администратор аутентифицируется на сервере AD для создания новой учетной записи. Of c это можно изменить для работы с любой командой, требующей -Credential.

Большое спасибо автору сайта duffney. Действительно хорошо, я надеюсь, что кому-то это пригодится в будущем. Ждем продуктивных дискуссий :)

...