如何使用 Powershell 为组织单位中的所有用户替换描述文本
How to Replace Description Text for All Users in an Organizational Unit using Powershell
我已经使用 CSV 文件将大约 1700 多个用户添加到 Active Directory。我不小心尝试使用 \n
来分隔它们之间的一些属性。但它没有逃脱新线。而是按原样输入。
$Users = Import-Csv -Path "C:\UsersList.csv"
foreach ($User in $Users)
{
$Name = $User.Name
$AccountPassword = $User.AccountPassword
$City = $User.City
$Company = $User.Company
$GivenName = $User.GivenName
$SamAccountName = $User.SamAccountName
$Surname = $User.Surname
$UserPrincipalName = $User.UPN
$Displayname = $User.Name
$Description = "Desc1: " + $User.Desc1 + "\nDesc2: " + $User.Desc2 + "\nDesc3: " + $User.Desc3 + "\nDesc4: " + $User.Desc4
$Path = $User.Path
New-ADUser -Name "$Name" -DisplayName "$Displayname" -SamAccountName "$SamAccountName" -UserPrincipalName "$UserPrincipalName" -GivenName "$GivenName" -Surname "$Surname" -Description "$Description" -AccountPassword (ConvertTo-SecureString $AccountPassword -AsPlainText -Force) -Enabled $true -Path "$Path" -ChangePasswordAtLogon $true
}
现在我想为所有用户更改描述中的那些“\n”。
我可以让用户使用
Get-ADUser -Filter {description -like "\n"}
我需要一个使用 .Replace("\n"," - ")
的命令。我不知道如何使用它来达到我的目标。
使用Set-ADUser
:
Get-ADUser -Filter {description -like "*\n*"} -Properties Description |
ForEach-Object {
$newDescription = $_.Description.Replace('\n', ' - ')
Set-ADUser -Identity $_ -Description $newDescription
}
请注意,对于 -like
运算符,您需要在 \n
之前和之后添加通配符,否则您只会获得描述仅包含 \n
而没有任何内容的用户别的。您还需要告诉 Get-ADUser
包含 属性 Description
,因为它不在默认返回的属性中。
您可以执行 Foreach-Object 循环以使用您的过滤器查找所有描述并将其通过管道传递给 Set-Aduser。
$Description = "-Desc1: " + $User.Desc1 + "-Desc2: " + $User.Desc2 + "-Desc3: " + $User.Desc3 + "-Desc4: " + $User.Desc4
foreach ($User in (Get-ADUser -Filter {description -like "*\n*"}) )
{
$User.SamAccountName | Set-ADUser -Description $Description
}
从 CSV 更新用户
foreach ($User in $users )
{
$User.SamAccountName | Set-ADUser -Description $user.Description
}
我已经使用 CSV 文件将大约 1700 多个用户添加到 Active Directory。我不小心尝试使用 \n
来分隔它们之间的一些属性。但它没有逃脱新线。而是按原样输入。
$Users = Import-Csv -Path "C:\UsersList.csv"
foreach ($User in $Users)
{
$Name = $User.Name
$AccountPassword = $User.AccountPassword
$City = $User.City
$Company = $User.Company
$GivenName = $User.GivenName
$SamAccountName = $User.SamAccountName
$Surname = $User.Surname
$UserPrincipalName = $User.UPN
$Displayname = $User.Name
$Description = "Desc1: " + $User.Desc1 + "\nDesc2: " + $User.Desc2 + "\nDesc3: " + $User.Desc3 + "\nDesc4: " + $User.Desc4
$Path = $User.Path
New-ADUser -Name "$Name" -DisplayName "$Displayname" -SamAccountName "$SamAccountName" -UserPrincipalName "$UserPrincipalName" -GivenName "$GivenName" -Surname "$Surname" -Description "$Description" -AccountPassword (ConvertTo-SecureString $AccountPassword -AsPlainText -Force) -Enabled $true -Path "$Path" -ChangePasswordAtLogon $true
}
现在我想为所有用户更改描述中的那些“\n”。
我可以让用户使用
Get-ADUser -Filter {description -like "\n"}
我需要一个使用 .Replace("\n"," - ")
的命令。我不知道如何使用它来达到我的目标。
使用Set-ADUser
:
Get-ADUser -Filter {description -like "*\n*"} -Properties Description |
ForEach-Object {
$newDescription = $_.Description.Replace('\n', ' - ')
Set-ADUser -Identity $_ -Description $newDescription
}
请注意,对于 -like
运算符,您需要在 \n
之前和之后添加通配符,否则您只会获得描述仅包含 \n
而没有任何内容的用户别的。您还需要告诉 Get-ADUser
包含 属性 Description
,因为它不在默认返回的属性中。
您可以执行 Foreach-Object 循环以使用您的过滤器查找所有描述并将其通过管道传递给 Set-Aduser。
$Description = "-Desc1: " + $User.Desc1 + "-Desc2: " + $User.Desc2 + "-Desc3: " + $User.Desc3 + "-Desc4: " + $User.Desc4
foreach ($User in (Get-ADUser -Filter {description -like "*\n*"}) )
{
$User.SamAccountName | Set-ADUser -Description $Description
}
从 CSV 更新用户
foreach ($User in $users )
{
$User.SamAccountName | Set-ADUser -Description $user.Description
}