我需要批量更新大约1000个用户(包含在CSV中),并从其AD配置文件中仅删除部分说明,而不会删除整个说明。例如,我需要从完整描述中删除“重新启用此帐户之前的呼叫安全性”,该描述还包括用户的职位信息。
类似的内容-说明:[在重新启用此帐户之前先呼叫安全性。人力资源分析师]
是否有一种快速简便的方法?
编辑: 我很抱歉,我匆忙忘了我目前拥有的代码。这里有很多实时学习的知识。
Import-Modudule ActiveDirectory
Import-CSV -Path "csvlocation.csv" | ForEach-Object {Set-ADUser -Identity $_.'User-Name' -Description }
“-描述”部分就是我遇到的问题。我知道我需要提供两个字符串,一个用于查找,一个用于替换。但是,我不知道在这种情况下合适的参数或Commandlet(再次学习,即刻为术语表示歉意)。
最终解决方案:
Import-Module ActiveDirectory
$Avar = 'Call security before re-enabling this account.'
$Bvar = ' '
Import-Csv -Path "C:\users..." | ForEach-Object{
$user = Get-ADUser $_.'User-Name' -Properties Description
Set-ADUser $user -Description $user.Description.Replace($Avar, $Bvar).Trim()
}
谢谢!
答案 0 :(得分:0)
我将假定您的CSV文件不包含当前描述。这意味着您首先必须检索描述,然后再将其重新设置。像这样:
Import-CSV -Path "csvlocation.csv" | ForEach-Object {
$user = Get-ADUser $_.'User-Name' -Properties Description
Set-ADUser $user -Description $user.Description.Replace("Call security before re-enabling this account.", "").Trim()
}
更新:从技术上讲,您不能仅替换部分说明。换句话说,您不能告诉Active Directory“请在此属性中用 this 替换 this ”。您只能告诉Active Directory“将此属性设置为 this ”。 (多值属性除外,您可以在其中添加和删除值)
因此,您需要分多个步骤进行操作:
这正是我的示例所做的,尽管我将步骤2和3合并为一行(如果尝试,甚至可以将整个过程放在一行中)。
我可以将代码分解为更多行,以便您可以更好地了解正在发生的事情。假设有人的描述是这样的:
在重新启用此帐户之前,请致电安全性。人力资源分析师
您要删除“重新启用此帐户之前的呼叫安全性”。 (对不起,我之前包括“人力资源分析师”部分,我对此进行了编辑-我认为您想保留它,对吧?)但是,让我们看看会发生什么:
$user = Get-ADUser $_.'User-Name' -Properties Description
$currentDescription = $user.Description
#$currentDescription equals "Call security before re-enabling this account. Human Resource Analyst"
$newDescription = $currentDescription.Replace("Call security before re-enabling this account.", "").Trim()
#newDescription = "Human Resource Analyst"
Set-ADUser $user -Description $newDescription
#The description is now "Human Resource Analyst"
我还添加了.Trim()
,因此您不会以前导或尾随空格结尾。