#powershell
#powershell
Вопрос:
У меня есть CSV-файл, содержащий список пользователей (samaccountname) в столбце A. В дополнительных столбцах у меня есть дополнительные значения атрибутов, которые я хотел бы установить для каждого из этих пользователей:
«ОФИС» в столбце B, «Отдел» в столбце C и компания в столбце D:
Пожалуйста, помогите собрать правильный синтаксис Powershell.
До сих пор я пробовал следующее:
Import-Module Activedirectory
$Attribcsv=Import-csv "D:powershellADuserinformationSetUserAttributes.csv"
ForEach ($User in $Attribcsv)
{
Set-ADUser $User.samaccountname -department $._Department
}
С другим csv с двумя столбцами: sAMAcountName, Отдел
Но я получил сообщение об ошибке:
Комментарии:
1. Пожалуйста, покажите, что вы пробовали
2. отредактировано с помощью кода, который я пробовал.
Ответ №1:
Вы можете попробовать следующим образом (сначала получить пользователя, используя его имя учетной записи SAM с Get-ADUser
помощью, а затем передать Set-ADUser
, чтобы установить атрибут):
Import-Module Activedirectory
$Attribcsv=Import-csv "D:powershellADuserinformationSetUserAttributes.csv"
ForEach ($User in $Attribcsv)
{
Get-ADUser -Identity $User.Users | Set-ADUser -department $._Department
}
Комментарии:
1. Привет, Хасан, я получаю точно такую же ошибку, о которой я упоминал, когда пробовал это сделать. «» Get-ADUser : не удается проверить аргумент для параметра «Identity». Аргумент равен null. Укажите допустимое значение для аргумента, а затем попробуйте выполнить команду еще раз «.»
2. Если столбец «Пользователи» — это имя вашей учетной записи SAM, попробуйте изменить
3. Пробовал также редактировать, та же ошибка. это очень странно, что я получаю эту ошибку и при использовании других csv / PowerShell, которые я использую.
4. Хорошо, я справился с этим, в CSV была проблема, я снова открыл ее и исправил. теперь у меня возникла другая проблема. для значения отдела у меня было другое значение, поэтому значение, которое я пытаюсь заменить этим значением, используя синтаксис now, не работает, есть ли синтаксис, который можно использовать для замены текущих значений?
Ответ №2:
Немного поздно для вечеринки, но лично я бы не стал использовать этот -Identity
параметр здесь, потому что, если во входном CSV есть опечатки, скрипт вылетит.
Более щадящий вариант — использовать -Filter
так:
Import-Module Activedirectory -ErrorAction SilentlyContinue
$AttribCsv = Import-csv "D:powershellADuserinformationSetUserAttributes.csv" | ForEach-Object {
$accountName = $_.Users # make sure the header for this column is correct here!
# now try and find a valid user object using Filter
$user = Get-ADUser -Filter "SamAccountName -eq '$accountName'" -Properties Office, Company, Department -ErrorAction SilentlyContinue
if ($user) {
$user | Set-ADUser -Department $_.Department -Company $_.Company -Office $_.Office
# or use -Replace:
# $user | Set-ADUser -Replace @{Department = $_.Department; Company = $_.Company; Office = $_.Office}
}
else {
Write-Warning "User with SamAccountName '$accountName' not found.."
}
}
Имейте в виду, что если какое-либо из свойств имеет нулевое или пустое значение Set-ADUser
, командлет вернет ошибку.
Проверьте свой входной CSV для этого.