如何仅编辑多个用户的名字 (givenName) 并使用 csv 导入

How to edit only the Firstname (givenName) of multiple users and import with csv

如果我有一个用户列表,其中所有用户的 samAccountName 都是数字示例,745744、745746 等……。我一直在寻找可以完成以下任务的 powershell 脚本:

  1. 先在用户面前放一个不带引号的“XX”name/givenname
  2. 如果我有所有用户 samAccountName 的列表,请让脚本从 csv 文件导入用户列表。

在 excel 中只有一列的 samAccountName 足以用于 csv,还是我还需要在 csv 中包含所有用户 givenName?示例 A 列 samAccountName,B 列 Firstname??

例如 givenName 是 JOAQUIN,我需要名字是 XXJOAQUIN。我必须为大约 500 个用户执行此操作,而我们现在正在手动执行此操作,因此我唯一需要更改的是在用户 givenNames 之前添加“XX”……

先谢谢大家了。

如果您的 CSV 文件的第一列是 samAccountName,您可以这样做。

$Users = Import-CSV "Users.csv"
Foreach($User in $Users){

$ADUser = Get-ADUser $User.samAccountName

$ADUser.GivenName = "XX$($ADUser.GivenName)"

Set-ADUser -Instance $ADUser
}

如果你是搜索数字用户,你可以在文档中查找使用 Get-ADUser 来获取所有用户,并使用 foreach 循环来评估它是否是数字,并且设置账号。

如果您的 CSV 文件仅包含一个 header 和 samAccountName 后跟 samAccountNames,如下所示:

samAccountName
745744
745746

那你就可以用下面这段代码,把路径改成你用户的csv文件的路径。 这可以做得更短,并更好地使用管道来减少代码,但这会工作得很好。

$users = Import-Csv -Path .\users.csv 

foreach($user in $users) {
$obj = Get-ADUser -Identity $user.samAccountName
Set-ADUser -Identity $user.samAccountName -GivenName ("xx" + $obj.GivenName)
}

您还可以将输出直接从 Get-ADUser 传送到 Set-ADUser,如下所示:

$users = Import-Csv -Path .\users.csv 
foreach($user in $users) {
  Get-ADUser -Identity $user.SamAccountName | % {Set-ADUser -Identity $_.SamAccountName -GivenName ("xx" + $_.GivenName)}
}

另一种方式是:

$users = Import-Csv -Path .\users.csv 
foreach($user in $users) {
  Set-ADUser -Identity $user.SamAccountName -GivenName ("xx" + $(Get-ADuser -Identity $user.SamAccountName).GivenName)
}