none
PShell Создание форматированного htm. RRS feed

  • Вопрос

  • Доброго всем. Есть задача, собирать с AD данные и генерировать html-страницу. Все задумано для автоматизации телефонного справочника. Страничка простая, название OU в котором он находится и дальше табличный список содержащий строку ФИО, Должность, телефон, имейл. Вот всю голову сломали, как к этому подойти? Вывести табличку типа такой проблем нет )))

    $Header = @"
    <style>
    TABLE {border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse;}
    TH {border-width: 1px; padding: 3px; border-style: solid; border-color: black; background-color: #6495ED;}
    TD {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}
    </style>
    "@
    Get-ADUser -filter * -searchbase "OU=firmaUsers,DC=firma,DC=local" -properties name,title,telephonenumber,mail,manager | Where {$_.telephonenumber -ne $null -and $_.SamAccountName -notlike "*svc*"}| ConvertTo-Html -Property name,title,telephonenumber,mail -Head $Header | Out-File -FilePath c:\Telefone.html

    Нужен типа такого ))))  То есть поле "Администрация должно быть OU, в котором находится непосредственно USER. Не прошу сам скрипт, я не программист и мозг у меня не пашет так как надо )) Мне бы, кто понимает, написали бы план по русски. Надо сделать сначала ЭТО, потом ЭТО, затем пойти в этом направлении.


    25 сентября 2019 г. 15:04

Ответы

Все ответы

  • тут можно посмотреть пример

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

    25 сентября 2019 г. 15:20
    Модератор
  • Да мне бы идею как реализовать разделение. Вот как на скрине "Администрация".. Как сделать такие группы и поместить туда записи. Цикл что ли какой делать надо? 

    26 сентября 2019 г. 6:42
  • Да мне бы идею как реализовать разделение. Вот как на скрине "Администрация".. Как сделать такие группы и поместить туда записи. Цикл что ли какой делать надо? 

    План:

    1 получаете 1 пользюка у которого есть все необходимые поля

    2 смотрите какие поля вам необходимы (большинсво вы нашли, за исключением DistinguishedName в котором и записано расположение пользюка)

    перед  форматирование в виде html делаете

    ... | Select @{n = 'OU'; e ={($_.DistinguishedName -Split ',' -replace 'OU=')[1]}}, Name, Title...

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

    Привел бы больше примеров но не совсем понимаю в каком конкретном месте у вас затык


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

    26 сентября 2019 г. 6:55
    Модератор
  • То есть нужно циклом загонять данные в переменную и потом ее уже выгружать в html? Ну я так и думал. Ладно буду думать как это делается.. А то запросов на телефонную книгу в сети много, но ничего подобного нет.
    26 сентября 2019 г. 7:49
  • покажите код (желательно не ваеюнлайнер, а в читаемом виде) и вывод какой вы получаете + дорисуйте (на скрине) где у вас проблема и как это должно выглядеть в идеальном мире

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

    26 сентября 2019 г. 7:57
    Модератор
  • # выбор подразделений
    $OU = Get-ADOrganizationalUnit -SearchBase "OU=firmaUsers, DC=firma, DC=local" -SearchScope OneLevel -Filter * | where {($_.name -NotLike "*временные*") -and ($_.name -NotLike "*разобрать*") -and ($_.name -notlike "*уволен*")}
    $OUnames = $OU | select -ExpandProperty Name
    
    # для каждого подразделения выводится его имя, затем выводится список пользователей в корне
    # вычисляются подразделения
    # и для каждого выводится его имя и список пользователей включая подразделы
    
    "{0,-50}{1,-100}{2,-10}" -f "ФИО","Должность","Телефон"
    
    
    foreach ($SubOU in $OU) {
        Write-Output $SubOU.Name
        Write-Host ""
        $usernames1 = $SubOU | ForEach-Object { Get-ADUser -SearchBase $_.DistinguishedName -SearchScope OneLevel -Filter {(GivenName -ne 'Null') -and (OfficePhone -ne 'Null') -and (Enabled -eq 'True')} -Properties Name,Title,officePhone } # | select DisplayName
        $usernames1 | %{ "{0,-50}{1,-70}{2,-10}" -f $_.Name,$_.Title,$_.OfficePhone }
        $SubOUnames = $SubOU | Foreach-Object { Get-ADOrganizationalUnit -SearchBase $_.DistinguishedName -SearchScope OneLevel -Filter * } # | select -ExpandProperty Name
        foreach ($SubOUname in $SubOUnames) {
            Write-Host ""
            Write-Output "       "$SubOUname.Name
            Write-Host ""
            $usernames2 = $SubOUName | foreach-object { Get-ADUser -SearchBase $_.DistinguishedName -Filter {(GivenName -ne 'Null') -and (OfficePhone -ne 'Null') -and (Enabled -eq 'True')} -Properties Name,Title,officePhone} # | select DisplayName
            $usernames2 | %{ "{0,-50}{1,-70}{2,-10}" -f $_.Name,$_.Title,$_.OfficePhone }
            Write-Host ""
        } 
    } 

    Вот что получилось собрать пока. В Окне PShell оно выглядить по сути как надо. 

    Теперь надо сделать из этого HTML похожий на это.

    26 сентября 2019 г. 10:09
  • Все. Плюнули на pshell, решили взять готовый проэкт на PHP, поправив под себя немного. 
    • Помечено в качестве ответа Avksentyev Sergey 30 сентября 2019 г. 7:34
    30 сентября 2019 г. 7:34