Задать вопрос
@Funksama
Начинающий системный администратор

Не выводятся значения пользователей AD через powershell, в чем причина?

Пишу скрипт для выгрузки данных из 1С ЗУП в csv файл, из него берется уникальное значение ИНН и сопоставляется с графой в AD : описание. далее скрипт подставляет нужные мне значение в AD из файлы csv, чтобы было понятно что он навертел решено было сделать логирование в txt файл через команду ADD-content, важно было знать какое значение было до изменения и какое оно стало, после запуска скрипта корректно отображались только 2 значение, givenname и surname, остальные сделаны по аналогии.

Скрипт:

# Логирование начала выполнения скрипта
Add-Content -Path "C:\share\script_log.txt" -Value "$(Get-Date): Скрипт запущен"	
	Import-Module ActiveDirectory
	#Скачиваем csv файл c url адреса в указанный путь	
Invoke-WebRequest -Uri "http://100.10.20.20/zup/fizikcsv" -OutFile "C:\fizik.csv"
	#Импортируем csv таблицу с кодировкой UTF8 и указанием разделителя ,
$users = Import-CSV -Path C:\fizik.csv -Delimiter "," -Encoding UTF8
	#Цикл присвоенного значения row среди юзеров в таблице
foreach ($row in $users) {
$userDescription = $row."ИНН"
	#Фильтруем пользаков по схожему описанию в AD

$User = Get-ADUser -Filter {Description -eq $userDescription}
	#Изменяем указанные поля полями из csv файлы , присваиваем значения через $row.значение_из_таблицы
if ($User) {
  $User.Title = ($Title )	
  Add-Content -Path "C:\share\script_log.txt" -Value "$(Get-Date): Обновление пользователя $($User.SamAccountName)"
  Set-ADUser -Identity $User -DisplayName $row.ФИО -Company $row.Организация -Title $row.Должность -Office $row.Статус -Department $row.Подразделение -Givenname $row.FirstName -Surname $row.LastName
  Add-Content -Path "C:\share\script_log.txt" -Value "$(Get-Date): Изменены данные у пользователя $($User.SamAccountName). Изменения: 
- DisplayName: $($user.DisplayName) -> $($row.ФИО)
- Company: $($oldCompany) -> $($row.Организация)
- Title: $($User.Title) -> $($row.Должность)
- Office: $($user.Office) -> $($row.Статус)
- Department: $($Department) -> $($row.Подразделение)
- Givenname: $($User.GivenName) -> $($row.FirstName)
- Surname: $($User.Surname) -> $($row.LastName)"

	
Rename-ADObject -Identity $User -NewName $row.ФИО
	#Присвоили полю office значение из таблицы csv и провели по нему блокировку в случае со сходством 
$Office = $row."Статус"
   if ($Office -eq "Увольнение")  {
	Add-Content -Path "C:\share\script_log.txt" -Value "$(Get-Date): Блокировка пользователя $($User.SamAccountName)"
   Disable-ADAccount -Identity $User}
   
}
}
	Add-Content -Path "C:\share\script_log.txt" -Value "$(Get-Date): Скрипт выполнен"

Файл Лога:

12/08/2023 10:42:35: Скрипт запущен
12/08/2023 10:42:36: Обновление пользователя 
12/08/2023 10:42:36: Изменены данные у пользователя . Изменения: 
- DisplayName:  -> Аббясова Д
- Company:  -> ИП Аф А.А.
- Title:  -> Директор
- Office:  -> Работа
- Department:  -> ИТ
- Givenname: <b>Дарья</b> -> Darya
- Surname: <b>Аббясова</b> -> Abbyasova
12/08/2023 10:42:36: Обновление пользователя

Эти значение при выводе всех переменных пользователя через команду отображаются корректно:

Get-ADUser -identity a.sinic -Properties *
CanonicalName                        : admintest.com/testusers/Аббясова Дарья Ахметовна
Certificates                         : {}
City                                 :
CN                                   : Аббясова Д
codePage                             : 0
Company                              : ИП Аф А.А.
CompoundIdentitySupported            : {}
Country                              :
countryCode                          : 0
Created                              : 30.11.2023 12:10:39
...
DisplayName                          : Аббясова Д
...

Но если я пытаюсь отдельно вывести одно значение displayname то выходит пустота , как и в логах, а givenname отображается корректно:

PS C:\Windows\system32>  $user = Get-ADUser -identity "i.tsebrenko"
PS C:\Windows\system32> Write-Host $user.DisplayName

PS C:\Windows\system32> Write-Host $user.GivenName
Ilya
PS C:\Windows\system32> $user.DisplayName
PS C:\Windows\system32> $user.GivenName
Ilya
PS C:\Windows\system32> Write-Output $user.DisplayName
PS C:\Windows\system32> Write-Output $user.GivenName
Ilya
PS C:\Windows\system32>

В чем проблема?
  • Вопрос задан
  • 233 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@MaxKozlov Куратор тега PowerShell
Проблема в том, что
$user = Get-ADUser -identity "i.tsebrenko"
Возвращает только стандартные поля
DistinguishedName
Enabled
GivenName
Name
ObjectClass
ObjectGUID
SamAccountName
SID
Surname
UserPrincipalName


Если вы хотите посмотреть именно DisplayName, надо его специально просить
$user = Get-ADUser -identity "i.tsebrenko" -Property DisplayName
Write-Host $user.DisplayName


Кстати, если вот такая фильтрация вам внезапно вернёт двоих, скрипт упадёт
#Фильтруем пользаков по схожему описанию в AD
$User = Get-ADUser -Filter {Description -eq $userDescription}
#Изменяем указанные поля полями из csv файлы , присваиваем значения через $row.значение_из_таблицы
if ($User) {

Тут надо этот момент отдельно обрабатывать. Мало ли, кто-то руками description поправит
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы