Ошибка возникает из-за того, что вы не указали действительное значение 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
}
}
Надеюсь, это поможет