Скрипт Powershell для добавления пользователей Active Directory в группы - PullRequest
0 голосов
/ 16 января 2019

Эй, ребята, немного рассол с этим сценарием.

Import-Module ActiveDirectory

$list = Import-csv "\\ca23fs1\IT\Scripts\Active Directory\New-Hire\Account Setup\Users-Groups.csv"
    ForEach ($item in $list) {
            $users = $item.Username
            $groups = $item.Group
        Add-ADPrincipalGroupMembership -Identity $users -MemberOf $groups -Whatif |
        Set-ADUser $users -HomeDirectory "Path" -Homedrive H -WhatIf
        }

При запуске $list я получаю вывод из файла CSV, но при запуске $users или $groups ничего не появляется, поэтому я думаю, что что-то упало в моемсинтаксис, который должен получать данные из заголовков «Имя пользователя» и «Группа» в CSV и передавать их в цикл.

Вот как выглядит мой CSV:

CSV

И вот ошибка:

Error

Любая помощь будет принята с благодарностью.

* edit

Думал, что это может быть CSV, поэтому я сделал его из txt-файла примерно так:

Username,Group
User1,group1
,group2
,group3
,group4
,group5

Все еще не работает :(

Я думаю, что это может быть потому, что я использую пустые столбцы. Собираюсь попробовать отдельные файлы CSV для пользователей и групп.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Ошибка возникает из-за того, что вы не указали действительное значение Identity для пользователя или, возможно, даже из-за того, что не указали действительное значение MemberOf.

Согласно документам , оба параметра хотят, чтобы с ними работали DistinguishedName, ObjectGUID, SID или SamAccountName. По умолчанию этот командлет не создает никаких выходных данных, если вы не используете параметр -PassThru.

В вашем случае, я думаю, вы пытаетесь использовать SamAccountName, и это должно работать просто отлично. Однако проблема здесь заключается в том, что вы используете файл CSV.

При сохранении Excel в виде CSV-файла можно ожидать, что результатом будет файл значений, разделенных запятыми , как следует из названия CSV.
К сожалению, Excel использует текущую системную локаль для определения используемого разделителя. Например, на моем голландском компьютере в качестве разделителя будет использоваться точка с запятой ;.

Если вы не проверите это, командлет Import-Csv без параметра -Delimiter примет запятую . Итак, после экспорта из Excel откройте файл csv с помощью Блокнота или любого другого текстового редактора, чтобы увидеть, что создано и какой символ-разделитель фактически используется. Вы также можете преодолеть эту проблему, используя переключатель -UseCulture в командлете Import-Csv, но это будет иметь смысл только в том случае, если вы экспортируете из Excel и импортируете в PowerShell на том же компьютере (или, по крайней мере, тот, который использует ту же самую культуру) )

У вас ДОЛЖЕН быть действительный файл CSV, что-то вроде этого:

"UserName","Group"
"user1","group1"
"user2","group1"
"user3","group1"

Поскольку созданный вручную файл CSV содержит пустые значения для столбца UserName, неудивительно, что вы получаете сообщение об ошибке.

Затем, с еще несколькими изменениями в вашем коде, это должно сработать:

Import-Module ActiveDirectory

# assuming the CSV uses commas as delimiter character. Otherwise, specify -Delimiter parameter
$list = Import-csv "\\ca23fs1\IT\Scripts\Active Directory\New-Hire\Account Setup\Users-Groups.csv"
foreach ($item in $list) {
    # if you are not sure the CSV actually contains valid data to work with, check it here first:
    if ([string]::IsNullOrWhiteSpace($item.UserName) -or [string]::IsNullOrWhiteSpace($item.Group)) {
        Write-Warning "Empty entry found in the CSV file"
    }
    else {
        Add-ADPrincipalGroupMembership -Identity $item.UserName -MemberOf $item.Group -Whatif
        # The DriveLetter must be a single, uppercase letter and the colon is required.
        Set-ADUser -Identity $item.UserName -HomeDirectory "Path" -HomeDrive 'H:' -WhatIf
    }
}

Надеюсь, это поможет

0 голосов
/ 16 января 2019

$ элемент не заполнен. Вы утверждаете, что $ users = $ item.username, но $ item в этот момент равен нулю.

Попробуйте это:

$list = Import-csv "PATH"

ForEach ($item in $list) {
$users = $item.Username
$groups = $item.Group


Add-ADPrincipalGroupMembership -Identity $users -MemberOf $groups -Whatif |
Set-ADUser $users -HomeDirectory "Path" -Homedrive H -WhatIf
}

Это в основном говорит: Для каждого элемента в списке используйте синтаксис .username и .group, чтобы заполнить переменную users и groups. Затем выполните команды Add и Set. Помните, что это цикл, который запускается один раз для каждого элемента $ в списке $.

Тестовый код:

$list = Import-csv "PATH"

ForEach ($item in $list) {
$user = $item.Username
$group = $item.Group
Write-Host "$user is in $group"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...