Скрипт Powershell для добавления пользователей Active Directory в группы

Простой совет: простое пространство (или невидимый специальный символ) в вашем скрипте, прямо перед самым первым тегом <?php, может вызвать это! Особенно, когда вы работаете в команде, а кто-то использует «слабую» IDE или перепутал файлы со странными текстовыми редакторами.

Я видел эти вещи;)

1
задан Zeplike 17 January 2019 в 22:28
поделиться

2 ответа

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

Согласно документам , оба параметра хотят, чтобы с ними работали DistinguishedName, ObjectGUID, a 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
ответ дан Theo 17 January 2019 в 22:28
поделиться

$ item не заполнен. Вы утверждаете, что $ 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"
}
0
ответ дан Clev 17 January 2019 в 22:28
поделиться
Другие вопросы по тегам:

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