Перейти к основному контенту
Центр разработки для Windows

 none
Странное поведение Get-ADUser в блоке Foreach RRS feed

  • Вопрос

  • Добрый день, коллеги!

    Есть текстовый файл, в котором на каждой строке ФИО пользователя. Необходимо из конкретного OU в AD найти пользователей и вывести их SamAccountName.

    Казалось бы все просто... пишем маленький простой скрипт и должны получить желаемое... однако нет :(

    $ListPath = "c:\111\2020_09.txt"
    $OUMain='OU="Disabled Users",OU=SERVICE,DC=lake,DC=lan'
    
    if (Test-Path $ListPath)
    { cls 
      $ListU = get-content $ListPath
      foreach ( $Item in $ListU )
      { Write-Host $Item
        $MBsan = Get-ADUser -SearchBase $OUMain -Filter { DisplayName -like $Item }
        Write-Host $MBsan.SamAccountName
      }
    }
    else
    { write-host "Не найден файл! $ListPath" -ForegroundColor Magenta
    }
    

    В результате выполнения видим только строку из $Item а переменная $MBsan пуста.

    Однако если тут же просто выполнить команду

    $MBsan = Get-ADUser -SearchBase $OUMain -Filter { DisplayName -like "Пупкин Василий Сидорович" }

    то получим искомые данные по этому пользователю.

    Не могу побороть эту непонятку. Поиск дает массу вариантов, но не работает ни один.

    Подскажите куда копать плиз!?

    16 января 2020 г. 10:42

Ответы

  • День добрый

    Попробуйте так:

    $MBsan = Get-ADUser -SearchBase $OUMain -Filter "DisplayName -like '$Item'"

    возможно дело в кодировке.
    Что выводит:

    (Get-Content "c:\111\2020_09.txt")[1]
    

    Если "кракозябры", то смотрите какая кодировка в файле... задать кодировку можно так:

    (Get-Content "c:\111\2020_09.txt" -Encoding UTF8)[1]
    

    или проблема в пробелах в конце строки, тогда поможет 

    $Item.Trim()


    Грамотная постановка вопроса - уже 50% решения.
    SCCM User Group Russia на FaceBook и в Telegram

    • Помечено в качестве ответа RAMzez_ 16 января 2020 г. 12:20
    16 января 2020 г. 11:22
  • Пока ждал ответ здесь, сам нашел решение.

    Проблема в том, что при чтении из тхт по какой то причине берутся строки фиксированной длинны. В результате в переменной куча пробелов в конце строки.

    Решено через Trim()

    Спасибо всем ответившим!

    • Помечено в качестве ответа RAMzez_ 16 января 2020 г. 12:26
    16 января 2020 г. 12:26

Все ответы

  • Добрый день,

    С кодировкой файла где имена пользователей не напутали? Ваш скрипт работоспособен.

    16 января 2020 г. 10:59
  • День добрый

    Попробуйте так:

    $MBsan = Get-ADUser -SearchBase $OUMain -Filter "DisplayName -like '$Item'"

    возможно дело в кодировке.
    Что выводит:

    (Get-Content "c:\111\2020_09.txt")[1]
    

    Если "кракозябры", то смотрите какая кодировка в файле... задать кодировку можно так:

    (Get-Content "c:\111\2020_09.txt" -Encoding UTF8)[1]
    

    или проблема в пробелах в конце строки, тогда поможет 

    $Item.Trim()


    Грамотная постановка вопроса - уже 50% решения.
    SCCM User Group Russia на FaceBook и в Telegram

    • Помечено в качестве ответа RAMzez_ 16 января 2020 г. 12:20
    16 января 2020 г. 11:22
  • $ListPath = "c:\111\2020_09.txt"
    $OUMain='OU="Disabled Users",OU=SERVICE,DC=lake,DC=lan'
    
    if (Test-Path $ListPath)
    { cls 
      $users = Get-ADUser -SearchBase $OUMain
      $ListU = get-content $ListPath
      foreach ( $Item in $ListU )
      { Write-Host $Item
        $MBsan = $users | where { $_.DisplayName -match $Item }
        Write-Host $MBsan.SamAccountName
      }
    }
    else
    { write-host "Не найден файл! $ListPath" -ForegroundColor Magenta
    }


    The opinion expressed by me is not an official position of Microsoft

    16 января 2020 г. 11:49
    Модератор
  • Пока ждал ответ здесь, сам нашел решение.

    Проблема в том, что при чтении из тхт по какой то причине берутся строки фиксированной длинны. В результате в переменной куча пробелов в конце строки.

    Решено через Trim()

    Спасибо всем ответившим!

    • Помечено в качестве ответа RAMzez_ 16 января 2020 г. 12:26
    16 января 2020 г. 12:26