none
Поиск пользователей домена по маске RRS feed

  • Вопрос

  • Помогите разработать скрипт на power shell.

    Задача: Найти и вывести в файл  пользователей домена из всех групп по определенной заданной маске.

    Например: Найти и вывести в файл всех пользователей домена "TEST.COM" имена учетных записей которых начинается с "Кар".

    19 апреля 2010 г. 9:28

Ответы

  • Пример скрипта:

     

    $str = "Иван*";
     
    $objDomain = New-Object System.DirectoryServices.DirectoryEntry;
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher;
    $objSearcher.SearchRoot = $objDomain;
    $objSearcher.Filter = ("(&(objectCategory=user)(sn=$str))"); # Search filter
     
    $colResults = $objSearcher.FindAll();


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    20 апреля 2010 г. 10:27
    Модератор
  • >Я так понимаю нужно создать строковый массив, в цикле записать туда $objItem.name. и потом уже массив вывести в файл?

    тут можно поступить по-другому: использовать не оператор цикла  в начале конвейра, но одноименный командлет в середине оного, тогда результат работы этого командлета можно трансферить в файл непосредственно в конвейере:

    colResults|foreach{$_.Properties.name} > c:\111.txt

     

    Upd поправил грамматику

    • Помечено в качестве ответа Vasily GusevModerator 22 апреля 2010 г. 6:32
    • Изменено s.h.s. _ 22 апреля 2010 г. 7:05
    21 апреля 2010 г. 8:17

Все ответы

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

    Если у Вас есть Exchange 2007, то в командной строке  Exchange, можно получить всех пользователей у кого есть мейлбокс, таким образом:

    Get-Mailbox Кар*

    19 апреля 2010 г. 10:36
  • если у вас нет Exch ;), то, например, так: Get-QADUser Кар*

    19 апреля 2010 г. 10:51
  • Мне, к примеру, не удалось в своё время воспользоваться такой командой, т.к. политиками компании не разрешено доставлять на сервера аплеты сторонних разработчиков =( .
    19 апреля 2010 г. 11:14
  • Мне, к примеру, не удалось в своё время воспользоваться такой командой, т.к. политиками компании не разрешено доставлять на сервера аплеты сторонних разработчиков =( .


    Сочувствую. Но этот "скрипт" можно запустить не только на сервере, но и на рабочей станции (надеюсь, на раб станции вам разрешено что-то доустанавливать?).

    Если все-таки хотите обойтись без 3d-софта, то см. сюда, например: http://www.microsoft.com/technet/scriptcenter/topics/winpsh/searchad.mspx

    19 апреля 2010 г. 11:38
  • спасибо за помощь и за ссылку. Буду разбираться. Хочется обойтись без аплетов сторонних производителей
    19 апреля 2010 г. 12:03
  • А вот интересно-net.framework 3.5 и командлеты от quest обязательно ставить на контроллеры домена(или можно-на один любой),

    если поставить все это на рабочую станцию и как-то оттуда рулить-подскажите?

    Попробовал -супер просто вещь-но как-то боязно на KD тянуть все вышеперечисленное

     

    19 апреля 2010 г. 21:06
  • > если поставить все это на рабочую станцию и как-то оттуда рулить-подскажите?

    так же как и с любого другого компьютера в домене. Совершенно не важно, исполняет ли он роль DC или нет.

     

    20 апреля 2010 г. 5:08
  • Пример скрипта:

     

    $str = "Иван*";
     
    $objDomain = New-Object System.DirectoryServices.DirectoryEntry;
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher;
    $objSearcher.SearchRoot = $objDomain;
    $objSearcher.Filter = ("(&(objectCategory=user)(sn=$str))"); # Search filter
     
    $colResults = $objSearcher.FindAll();


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    20 апреля 2010 г. 10:27
    Модератор
  • спасибо за скрипт. Пятый день изучаю powershell. В голове немного стало прояснятся что к чему.

    единственное что

    строчку  $objSearcher.Filter = ("(&(objectCategory=user)(sn=$str))")

    поменял на  $objSearcher.Filter = ("(&(objectCategory=user)(userPrincipalName=$str))")

    21 апреля 2010 г. 5:08
  • Тогда возьмите на заметку блог Василия Гусева  http://xaegr.wordpress.com/


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    21 апреля 2010 г. 7:04
    Модератор
  • Для вывода в файл дописал:

    foreach ($objResult in colResults)

               {$objItem = $objResult.Properties

               $objItem.name > c:\111.txt}

    Но выводит только последнюю запись

    Я так понимаю нужно создать строковый массив, в цикле записать туда $objItem.name. и потом уже массив вывести в файл?

    21 апреля 2010 г. 7:11
  • Тогда возьмите на заметку блог Василия Гусева  http://xaegr.wordpress.com/


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    Спасибо, поизучаю
    21 апреля 2010 г. 7:25
  • >Я так понимаю нужно создать строковый массив, в цикле записать туда $objItem.name. и потом уже массив вывести в файл?

    тут можно поступить по-другому: использовать не оператор цикла  в начале конвейра, но одноименный командлет в середине оного, тогда результат работы этого командлета можно трансферить в файл непосредственно в конвейере:

    colResults|foreach{$_.Properties.name} > c:\111.txt

     

    Upd поправил грамматику

    • Помечено в качестве ответа Vasily GusevModerator 22 апреля 2010 г. 6:32
    • Изменено s.h.s. _ 22 апреля 2010 г. 7:05
    21 апреля 2010 г. 8:17
  • >Я так понимаю нужно создать строковый массив, в цикле записать туда $objItem.name. и потом уже массив вывести в файл?

    тут можно поступить по-другому: использовать не оператор цикла  в начале конвейtра, но одноименный командлет в середине оного, тогда результат работы этого окомандлета можно трансферить в файл непосредственно в конвейере:

    colResults|foreach{$_.Properties.name} > c:\111.txt

    спасибо ваш вариант лучше
    21 апреля 2010 г. 9:00
  • Хорошо. В файла всех пользователей я вывел.

    Но я не  пойму. Что за формат файла формируется?

    Допустим ищу пользователей по маске "Medve". Формируется файл

    Если просматривать файл в farе клавишей F4. То покажет примерно так

     _ M e d v e d

    M e d v e d e v a

    M e d v e d e v i c h

    Между буквами пробелы

    А если искать пользователей с рускими именами

    То вообще какие-то кракозябли непонятные.

    Каким то образом это можно исправить?

    Дело в том что эти данные мне нужно будет прочитать программой написанной на С++.

     

     

    25 апреля 2010 г. 13:55
  • это Unicode

    Если хотите задать какую-то другую кодировку, то вместо знака перенаправления ввода/вывода (">"), нужно использовать командлет Out-file

    например так:

    colResults|foreach{$_.Properties.name} | Out-file c:\111.txt -encoding Default

    25 апреля 2010 г. 14:20
  • это Unicode

    Если хотите задать какую-то другую кодировку, то вместо знака перенаправления ввода/вывода (">"), нужно использовать командлет Out-file

    например так:

    colResults|foreach{$_.Properties.name} | Out-file c:\111.txt -encoding Default

    спасибо, начал читать синтаксис команды out-file. Завтраю попробую применить
    25 апреля 2010 г. 18:22
  • В переменной укажи путь к своему контейнеру

    У меня такой

     

     

     

     

    $mydomain = "OU= Свои данные1,OU=Свои данные2,DC=Свои данные 3,DC=Свои данные 4"

    get-QADUser -SearchRoot $mydomain -DisplayName  Кар* | ft DisplayName

    • Предложено в качестве ответа TOleg 24 июня 2010 г. 3:09
    24 июня 2010 г. 3:07