Удалить только часть «Описание» из нескольких учетных записей AD? - PullRequest
0 голосов
/ 19 июня 2019

Мне нужно массово обновить около 1000 пользователей (содержится в CSV) и удалить только часть описания из их профиля AD, не удаляя все описание.Например, мне нужно удалить «Безопасность вызова перед повторным включением этой учетной записи» из полного описания, которое также включает информацию о задании пользователей.

Что-то вроде - Описание: [ Позвоните в службу безопасности перед повторным включением этой учетной записи. Human Resource Analyst]

Существует ли быстрый и простой способ сделать это?

РЕДАКТИРОВАТЬ: Мои извинения, в спешке забыл код, который я в настоящее время.Очень много учусь на лету здесь.

Import-Modudule ActiveDirectory
Import-CSV -Path "csvlocation.csv" | ForEach-Object {Set-ADUser -Identity $_.'User-Name' -Description }

В этой части "-Description" я застреваю.Я знаю, что мне нужно предоставить две строки, одну найти, другую заменить.Однако я не знаю, какой правильный параметр или командлет (снова учимся на лету, извиняюсь за терминологию) в этой ситуации.

ЗАКЛЮЧИТЕЛЬНОЕ РЕШЕНИЕ:

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 голосов
/ 19 июня 2019

Я предполагаю, что ваш 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 «пожалуйста, замените этот на этот в этом атрибуте».Вы можете только сказать Active Directory «установить этот атрибут на this ».(исключение составляют атрибуты с несколькими значениями, где вы можете добавлять и удалять значения)

Таким образом, вы должны сделать это в несколько шагов:

  1. Прочитать текущее описание.
  2. Создайте новую строку, в которой вы заменили то, что хотите заменить.
  3. Установите описание для строки, созданной на шаге 2.

Это именно то, что делает мой пример,хотя я соединил шаги 2 и 3 в одну строку (если попытаться, вы можете поместить все это в одну строку).

Я могу разбить код на несколько строк, чтобы вы лучше видели, что происходит.Давайте представим, что чье-то описание гласит:

Позвоните в службу безопасности перед повторным включением этой учетной записи.Human Resource Analyst

Вы хотите удалить «Вызовите безопасность перед повторным включением этой учетной записи».(Извините, я включил часть «Human Resource Analyst» ранее, я редактировал это - я думаю, что вы хотите сохранить это, верно?) Но давайте посмотрим, что происходит:

$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() чтобы вы не заканчивали начальные или конечные пробелы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...