none
Проблема с кодировкий при работе ps скрипта RRS feed

  • Вопрос

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

    Есть код

    $curDir = $MyInvocation.MyCommand.Definition | split-path -parent 
    $searchBase = "OU=ТК,DC=DOMAIN,DC=ru"
    $LDAPFilter = "(&(objectCategory=Person)(objectClass=User)(mail=*)(givenName=*)(sn=*)(!userAccountControl:1.2.840.113556.1.4.803:=2))" # незаблокированные юзеры с емейлом и заполненными именем-фамилией
    $tplFile = $curDir + "\addressbook.tpl" #файл с темплейтом
    $outFile = "c:\addr\index.html" # куда кладём сгенерённый файл.
    $UserCount = 0
    $dt=Get-Date -Format "yyyy-MM-dd HH:mm"
     
    $TextContent = ""
     
    import-module ActiveDirectory
     
    $users = Get-ADUser -LDAPFilter $LDAPFilter -SearchBase $searchBase -SearchScope Subtree -Properties cn, displayName, telephoneNumber, ipPhone, mail, Department, Title, Office
    foreach ($user in $users) {
    	$TextContent = $TextContent+"            <tr><td>"+$user.displayName+"</td><td>"+$user.telephoneNumber+"</td><td>"+$user.ipPhone+"</td><td><a href=`"mailto:"+$user.mail+"`">"+$user.mail+"</a></td><td>"+$user.Title+"</td><td>"+$user.Department+"</td><td>"+$user.Office+"</td></tr>`n"
    	$UserCount++
    }
     
    $tplText = Get-Content $tplFile -Encoding UTF8
    $tplText = $tplText -replace "__content__", $TextContent
    $tplText | Out-File $outFile -Encoding UTF8
     
    Write-Host "$dt - done. $UserCount экспортировано."

    Результатом которого будет получение списка пользователей в хтмл файл, через такой шаблон:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
      <meta charset="utf-8">
      <title>ООО "Рога и копыта</title>
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
      <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
      <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
     
      <link rel="stylesheet" href="https://cdn.datatables.net/1.10.12/css/jquery.dataTables.min.css">
      <link rel="stylesheet" href="https://cdn.datatables.net/fixedheader/3.1.2/css/fixedHeader.dataTables.min.css">
      <script src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
      <script src="https://cdn.datatables.net/fixedheader/3.1.2/js/dataTables.fixedHeader.min.js"></script>
      <style type="text/css">
        div.container {
            width: 95%;
          }
        div#addressbook_filter {
            float: left;
            text-align: left;
          }
      </style>
      <script>
        $(document).ready(function() {
            var table = $('#addressbook').DataTable( {
              paging: false,
              fixedHeader: {
                 header: true,
                 footer: false
               },
              language: {
                 info: "Показано _END_ записей",
                 infoFiltered: "(отфильтровано из _MAX_ записей)",
                 search: "Поиск: "
               }
            } );
        } );
      </script>
    </head>
     
    <body>
      <div class="container">
        <div class="table-responsive">
            <table class="display" id="addressbook" cellspacing="0" width="100%">
              <thead>
                <tr><th>ФИО</th><th>Телефон</th><th>добавочный</th><th>e-mail</th><th>Должность</th><th>Отдел</th><th>Кабинет</th></tr>
              </thead>
              <tbody>
    __content__
              </tbody>
            </table>
        </div>
      </div>
    </body>
    </html>

    Однако на выходе имею проблему с русскими буквами из шаблона, то что импортируется из AD, все отображается. (картинка)

    Если открыть полученный html файл, то вижу так: 

    <thead>
                <tr><th>���</th><th>�������</th><th>����������</th><th>e-mail</th><th>���������</th><th>�����</th><th>�������</th></tr>
              </thead>
              <tbody>
                <tr><td>Хохлова Елена Николаевна</td><td>150</td><td></td><td><a href="mailto:test@test.ru">test@test.ru</a></td>
    Получается что PS передает из шаблона неправильную кодировку в html файл, а экспортирует данные из ad верно.

    Подскажите, пож-ста, как нормализовать кодировки?


    • Изменено sergilyin 14 мая 2019 г. 13:34

Ответы

Все ответы

  • так поиграйтесь с пораметром encoding который вы уже нашли, он как раз и отвечает за кракозябры

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

    • Предложено в качестве ответа Vector BCOModerator 14 мая 2019 г. 15:32
    Модератор
  • суть в том что результат работы скрипта это хтмл файл. если его открыть блокнотом, то кракозябры будут. Что то передает в файл именно эти кракозябры а не кириллицу. Играться в файле - ни к чему не приведет, проверял..
  • Вопрос снят, перекодировал файл шаблона из win1251 в utf8
    • Изменено sergilyin 14 мая 2019 г. 14:08
    • Помечено в качестве ответа Vector BCOModerator 14 мая 2019 г. 15:32
  • Добрый день! 

    Есть код

     
    $tplText = Get-Content $tplFile -Encoding UTF8
    $tplText = $tplText -replace "__content__", $TextContent
    $tplText | Out-File $outFile -Encoding UTF8
     
    Write-Host "$dt - done. $UserCount экспортировано."
    вы по каким то соображениям используете uft8 (а не default, unicode или что либо еще) и именно эти 2 параметра вам стоит менять (обратите внимание на выделенный фрагмент)

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


    Модератор