Удалить только часть «Описания» из нескольких учетных записей AD?

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

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

Есть ли быстрый и простой способ сделать это?

Обновлено: Прошу прощения, в спешке забыл код, который у меня есть. Очень много обучения на лету здесь.

Import-Modudule ActiveDirectory
Import-CSV -Path "csvlocation.csv" | ForEach-Object {Set-ADUser -Identity $_.'User-Name' -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()
}

Спасибо!

Добро пожаловать в Stack Overflow. Пожалуйста, возьмите тур, а также прочитайте Как спросить. Stack Overflow не является бесплатным сервисом для написания скриптов. Ожидаются ваши собственные исследования и попытки кода. Отредактируйте вопрос, чтобы включить свой код в пример Минимальный, полный и проверяемый.

Theo 19.06.2019 15:10

@Theo Спасибо за уведомление. Я обновился в меру своих возможностей.

griffen62 19.06.2019 17:16

@boxdog извините, я не показал свою работу! дайте мне знать, достаточно ли того, что я добавил, или нет. Все еще изучаю сообщество здесь.

griffen62 19.06.2019 17:18
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
714
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Итак, вам нужно сделать это в несколько шагов:

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

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

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

Call security before re-enabling this account. 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(), чтобы у вас не было начальных или конечных пробелов.

Ах! значительно ближе к тому, что мне нужно. И ваше предположение верно. Единственная проблема в том, что я пытаюсь заменить только часть описания, а не все. Например: В настоящее время=Позвоните в службу безопасности перед повторным включением этой учетной записи. Аналитик отдела кадров Remove=Позвоните в службу безопасности перед повторным включением этой учетной записи. Результат=Аналитик отдела кадров

griffen62 19.06.2019 18:48

Я обновил свой ответ. Возможно, я неправильно понял то, что вы сказали в своем комментарии, но в любом случае там больше информации. Вы можете изменить значения, которые вы передаете .Replace(), по мере необходимости.

Gabriel Luci 19.06.2019 19:10

Не знаю почему, но обновление в AD заняло целую вечность, и я думаю, что мое нетерпение взяло верх надо мной. Я немного изменил ваш код, чтобы точно отразить то, чего мы пытаемся достичь. Тем не менее - спасибо за всю вашу помощь!!

griffen62 19.06.2019 20:37

Другие вопросы по теме