Пишу скрипт для выгрузки данных из 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>
В чем проблема?