如何使用Powershell根据员工ID修改Active Directory用户属性?
问题描述:
我想通过EmployeeID
更新用户AD属性,而不是他们的SAMAccountName
。我试过使用Set-ADUser
,但它不起作用,因为我给出的列表不包含帐户sAMAccountName
,因为它来自无法访问此信息的HR。如何使用Powershell根据员工ID修改Active Directory用户属性?
有没有办法通过其唯一的employeeID
更新AD用户属性?
我的源数据.csv文件包含此:
EmployeeID;company;department;title;country;postalCode;city;streetAddress;manager 2828;TEST1;TEST2;TestXENUser;DE;12345;MUE;Miller Street 6;chrtest
我的剧本是这样的:
$Users = Import-CSV C:\05042017\data.csv
$Users | ForEach-Object {
$EmpID = $_.EmployeeID
Get-ADUser -Filter "*" -Property EmployeeID | Where {$_.EmployeeID -eq $EmpID} | Set-ADUser -company $EmployeeID.company -department $EmployeeID.department –title $EmployeeID.title –country $EmployeeID.country –postalCode $EmployeeID.postalCode –city $EmployeeID.city –streetAddress $EmployeeID.streetAddress –manager $EmployeeID.manager -WhatIf
}
我不认为我已经作出后的连接属性Set-ADUser
命令正确。我自己测试了一些东西,但我似乎无法得到它的工作。
如何告诉Set-ADUser
命令从.csv文件获取属性? 我在过去的工作,但它是这样的:ForEach $user in $Users
而不是:ForEach-Object
。
答
您只需要通过使用get-aduser
并根据EmployeeID过滤结果,然后将其传送到set-aduser
来获得代表AD中用户的对象。例如:
Get-ADUser -Filter "employeeid -eq '$EmpID'" | Set-ADUser <-Attribute> <Value> -WhatIf
显然,你需要确定属性和值,当你很高兴它在做什么,你指望它有什么去除-whatif
开关。
基于包含您的CSV文件:
雇员;公司;部;标题;国家;邮政编码;市;街道地址;经理
你可以做这样的事情:
$Users = Import-CSV C:\05042017\data.csv -Delimiter ';'
ForEach ($User in $Users) {
Get-ADUser -Filter "employeeid -eq '$($User.EmployeeID)'" | Set-ADUser -company $User.company -department $User.department –title $User.title –country $User.country –postalCode $User.postalCode –city $User.city –streetAddress $User.streetAddress –manager $User.manager -WhatIf
}
在上面的例子中,我们使用一个ForEach
循环程序,处理CSV文件中的每一行(我们将在以$Users
已经加载),并创建值为$User
的对象。然后我们可以在Set-ADUser
中引用$ User的属性(使用。符号)来获取我们需要的属性的值。
我发布了我的问题的更新。 – IcyPunch
您应该编辑您的问题并将其添加到那里,而不是将其作为答案发布。我会根据新信息修改我的答案,我认为'ForEach'循环会更简单/更清晰。 –
我已经修改了我的答案,使用基于您提供的CSV头的'ForEach'。我还通过匹配'-filter'参数而不是使用'where'来简化我们获取用户的方式。 –