Неизвестное значение в пользовательском объекте PowerShell

Я новичок в PowerShell и Active Directory. Я взял из Интернета сценарий PowerShell, намереваясь получить всех пользователей AD типа «Пользователи» (в Организации) и все его группы AD, частью которых он является. Я перебираю пользователей AD во внешнем цикле со свойством «Имя» в качестве фильтра и его группой AD во вложенном цикле (код ниже).

Class CustomAdInfo 
{
    $UserName
    $Group
    $Email
}
$users_with_starting_letter = @('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z')
foreach ( $node in $users_with_starting_letter )
{
 $filter = 'Name -like "' + $node + '*"'
 $customObjects = 
    foreach($user in $filter)
    {
        $adUserObj = Get-ADUser -Filter $user -properties SamAccountName,memberOf,EmailAddress -ResultPageSize 256 -SearchBase "CN=Users,DC=ab,DC=cd"
        $groups = $adUserObj.MemberOf | Get-ADgroup
        foreach($group in $groups)
        {
            New-Object -TypeName CustomAdInfo -Property @{
                UserName = $adUserObj.SamAccountName
                Group = $group
                Email = $adUserObj.EmailAddress
                
            }
        }
    }
    $customObjects | Select-Object -Property Username,group,Email | Export-Csv 'C:\Users\Members_and_Groups.csv' -Append
}

Результат (здесь показаны некоторые образцы), который я получил:

"System.Object[]","CN=group1,CN=Users,DC=ab,DC=cd","System.Object[]"
"System.Object[]","CN=group2,CN=Users,DC=ab,DC=cd","System.Object[]"

Ожидается SamAccountName и EmailAddress пользователя AD в столбцах 1 и 3 соответственно, но получено неизвестное значение «System.Object[]». Что мне не хватает?

Спасибо большое за ответ!!

У вас действительно есть @{ в следующей строке или он находится в той же строке, что и -Property? Если да, то это опечатка: @{ должен находиться в той же строке, что и оператор New-Object. PowerShell не очень подходит для стиля кодирования Allman, поэтому я бы не советовал использовать его для этого языка.

Santiago Squarzon 17.07.2024 22:23

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

mklement0 17.07.2024 23:16

Другой вариант заключается в том, что $filter = 'Name -like "' + $node + '*"' соответствует нескольким учетным записям пользователей, и в этом случае UserName = $adUserObj.SamAccountName будет возвращать массив значений свойств (найдите «перечисление доступа к членам Powershell», чтобы узнать, как это работает), который сериализуется в строку System.Object[].

mclayton 18.07.2024 09:03

Спасибо за ответ @SantiagoSquarzon. В реальном сценарии PowerShell, который я выполняю, он находится в той же строке New-Object. Это я опечатку на форуме допустил, сейчас исправил.

Sandeep Kumar 18.07.2024 11:16

Спасибо @mclayton. Я найду «перечисление доступа к членам Powershell» и попробую еще раз.

Sandeep Kumar 18.07.2024 11: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
5
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Проблема с вашим кодом связана с отсутствием цикла в $adUserObj, вы фильтруете всех пользователей, начинающихся с буквы, т. е.: Name -like 'a*', такой фильтр наверняка вернет более одного пользователя.

Чтобы исправить это, а также сделать ваш код более читабельным, я бы предложил сначала создать фильтры, а затем опрашивать пользователей.

Class CustomAdInfo {
    $UserName
    $Group
    $Email
}

[char[]] ([char] 'a'..[char] 'z') | ForEach-Object {
    $getADUserSplat = @{
        Filter         = "Name -like '$_*'"
        Properties     = 'SamAccountName', 'memberOf', 'EmailAddress'
        ResultPageSize = 256
        SearchBase     = 'CN=Users,DC=ab,DC=cd'
    }
    foreach ($user in Get-ADUser @getADUserSplat) {
        foreach ($group in $user.MemberOf | Get-ADGroup) {
            [CustomAdInfo]@{
                UserName = $user.SamAccountName
                Group    = $group.Name # <= You need to choose an attribute here
                Email    = $user.EmailAddress
            }
        }
    }
} | Export-Csv 'C:\Users\Members_and_Groups.csv'

@SandeepKumar попробуй обновление

Santiago Squarzon 21.07.2024 18:16

@SandeepKumar задай новый вопрос, я тебе покажу. Это ответ на ваш первоначальный вопрос

Santiago Squarzon 21.07.2024 19:26

Большое спасибо @Santiago Squarzon за ответ!! Ты мой спаситель!! Я тестировал приведенный выше скрипт PowerShell, диапазон, указанный выше [char] 'a'..[char] 'z', фактически возвращает значения ASCII диапазона. Поэтому я изменил диапазон на [char[]]([char]'y'..[char]'z'), который принимал только значения символов.

Sandeep Kumar 21.07.2024 20:19

На самом деле у нас есть выражения для нескольких свойств. Существующий код как $ad_users = Get-ADUser -Filter $Filter -Property EmployeeID,Manager,uht-IdentityManagement-AccountType -ResultPageSize 256 -SearchBase "CN=Users,DC=ab,DC=cd"$ad_users | Select-Object -Property EmployeeID,@{Name = "Manager";Expression = {$_.Manager -replace '^CN=|,.*$'}},@{Name = "uht_IdentityManagement_AccountType";Ex‌​pression = {$_."uht-Id‌​entityManagement-Acc‌​ountType"}} Как использовать эти выражения в приведенном выше коде, т. е. при присвоении значений свойствам класса? Что-то вроде Manager=$user.Manager.replace_junk_characters

Sandeep Kumar 21.07.2024 20:30

@SandeepKumar задайте новый вопрос. Это ответ на заданный вопрос

Santiago Squarzon 21.07.2024 22:22

Конечно @Santiago Squarzon!!

Sandeep Kumar 22.07.2024 16:05

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