none
форматирование вывода -powershell 2.0 RRS feed

  • Вопрос

  • Всем привет.

    Есть такой скриптик 

    Get-ADGroup -Filter {(GroupCategory -eq 'Distribution') -and (GroupScope -eq 'Universal')} -Properties Members | Select-Object DistinguishedName, members | Ft

    он выдает информацию о пользователях и группах в формате cn=..., ou=...

    Подскажите пожалуйста, как заставить его выдавать только cn и выводить список полностью ( сейчас обрезает его многоточием)?
    Спасибо

    2 июля 2010 г. 10:11

Ответы

  • Странно, а почему вы не написали этого в первом посте? :)

    get-adgroup -filter {Name -like "условие"} | foreach {write-host `nГруппа: $_.name; Get-ADGroupMember $_|select -expandproperty name}


    AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com
    • Помечено в качестве ответа Graill 3 июля 2010 г. 8:18
    2 июля 2010 г. 22:31
    Модератор

Все ответы

  • >Подскажите пожалуйста, как заставить его выдавать только cn

    Как-то так

    ...| Select-Object DistinguishedName, members | Ft

    заменить на

    ...| Select-Object @{N="GroupName";E={(GetADGroup $_.DistinguishedName).Name}}, @{N="MembersNames";E={$_.members -replace ",.+$" -replace "^CN="}}| ft -AutoSize

    Если по прежнему не будет помещаться на эране, то можно либо добавить параметр -Wrap к ft, либо, вообще, заменить ft на fl


    blog: http://shss.wordpress.com/
    • Предложено в качестве ответа s.h.s. _ 2 июля 2010 г. 12:47
    2 июля 2010 г. 12:16
  • Спасибо за ответ )

    Попробовал - он group name не пишет теперь совсем и вывод по-прежнему не помещается (

    уже пробовал ft -wrap, verbose и fl - все равно обрубает вывод многоточием

    2 июля 2010 г. 12:56
  • Вы хотите получить список членов групп? Для этого специальный командлет есть:

    get-adgroup -filter {условие} | Get-ADGroupMember | Sort -Unique | ft name

    Можно впрочем и через свойство, надо только понимать что там массив строк, и его нужно развернуть, а затем преобразовать в объекты AD, затем вывести их свойство Name. Это будет длиннее и менее красиво (Получаем объекты, получаем свойство объекта содержащее строки, получаем из этих строк объекты...):

    get-adgroup -filter {условие} -Properties members | select -ExpandProperty members | Get-ADObject | select -Unique | ft name

    Можно конечно использовать и регулярные выражения, это совсем некрасиво (тем более что никаких причин здесь этого делать нет), и не надежно:

    (get-adgroup -filter {условие} -Properties members | select -ExpandProperty members) -replace '^CN=([^,]+),.+$','$1' | sort -Unique


    AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com
    2 июля 2010 г. 15:13
    Модератор
  • >Попробовал - он group name не пишет теперь совсем

    Возможно потому, что я допустил небольшую опечатку (пропустил знак "тире") вместо @{N="GroupName";E={(GetADGroup... 

    должно быть @{N="GroupName";E={(Get-ADGroup...

    >и вывод по-прежнему не помещается

    здесь вам лучше прислушаться к совету Василия, ибо, как говорит всезнающий All - "Василий, вы, как всегда, правы" ;)


    blog: http://shss.wordpress.com/
    2 июля 2010 г. 17:27
  • Задачей скрипта должен быть вывод списка пользователей в группах, но так чтобы было понятно к какой группе они принадлежат. Т.е, желательно чтобы в начале списка пользователей выводилось имя соответствующей группы
    2 июля 2010 г. 20:53
  • Странно, а почему вы не написали этого в первом посте? :)

    get-adgroup -filter {Name -like "условие"} | foreach {write-host `nГруппа: $_.name; Get-ADGroupMember $_|select -expandproperty name}


    AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com
    • Помечено в качестве ответа Graill 3 июля 2010 г. 8:18
    2 июля 2010 г. 22:31
    Модератор
  • виноват, это я сглупил )

    за решение спасибо огромное - работает замечательно

    но остался еще такой вопрос - почему если добавить в конце скрипта |out-file, то он выводит в файл только список пользователей, без указания имени группы?

  • Потому что командлет write-host выводит текст на экран, и этот текст не передается по конвейеру дальше. Вы можете заменить его на write-output


    AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com
    Модератор