从多个AD帐户中仅删除“说明”的一部分?

时间:2019-06-19 13:09:51

标签: powershell active-directory

我需要批量更新大约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()
}

谢谢!

1 个答案:

答案 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 ”。 (多值属性除外,您可以在其中添加和删除值)

因此,您需要分多个步骤进行操作:

  1. 阅读当前描述。
  2. 在要替换的位置创建一个新字符串。
  3. 将描述设置为您在步骤2中创建的字符串。

这正是我的示例所做的,尽管我将步骤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(),因此您不会以前导或尾随空格结尾。