Remote Desktop 2019 — профили и миграция


В начале февраля выбрал для пробы один узел терминальной фермы на Windows Server 2012 R2 и запустил обновление до Windows Server 2019. Февраль на исходе, я в отпуске, катюсь на горных лыжах, а миграция всё ещё идёт: на ферме всего навсего пара тысяч с хвостиком профилей.

В общем, это совсем не рабочий сценарий.

Единственный вариант ускорить процесс это удалить все профили перед миграцией. Это можно сделать простым скриптом, который использует WMI Win32_UserProfile. После обновления профилей миграция пролетит быстро.

Что если профили содержат важную информацию и вам нужно всё же перенести её в новые профили? Тут вам придётся разработать план работ, который отражает вашу конкретную конфигурацию. Ничего универсального не существует (если только что-то коммерческое).

Если у вас терминальная ферма и профили лежат на шаре, то удаление вышеупомянутым скриптом затронет только локальные копии, на шаре информация сохранится.

Если профили только локальные (один сервер), то придется сделать их копию.

Если у вас была настроена переадресация папок профиля спомощью групповых политик, то после создания новых профилей переадресация восстановится, и пользователи увидят свои файлы. Это удобно для упрощения миграции.

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

Кстати, профили теперь имеют суффикс V6. Да, Windows 10 начала с V5, а теперь уже V6. Какая-то бесконечная миграция профилей.

Подробная история профилей Windows https://www.ivanti.com/blog/a-brief-history-of-windows-profiles

Официальная статья на эту тему https://support.microsoft.com/en-us/help/3056198/roaming-user-profiles-versioning-in-windows-10-and-windows-server

Реклама

Remote Desktop 2019 – Проблема с перемещаемыми профилями


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

Как это проявляется:

— при завершении сеанса пользователи стали получать сообщение, что их профиль не до конца синхронизирован

— в логах появились сообщения User Profile General с номером Event Id 1509 и Winlogon с номером Event Id 6001

Windows cannot copy file \\?\C:\Users\user\AppData\Roaming\Microsoft\Search\Data\Applications\S-1-5-21-538639244-1736677612-1463291260-1131 to location \\?\UNC\domain\share\user.BIS.V6\AppData\Roaming\Microsoft\Search\Data\Applications\S-1-5-21-538639244-1736776612-1463291260-1131. This error may be caused by network problems or insufficient security rights.

 DETAIL — Access is denied.

Причина

Причина в том, что на серверах версии Windows Server 2012 R2 нет предустановленного сервиса Windows Search (если он нужен, то необходимо установить эту дополнительную компоненту), а с версии Windows Server 2016 этот сервис установлен. Только на 2016 он по умолчанию выключен, а на 2019 он включен. После обновления до 2019 мы внезапно получаем запущенный Windows Search сервис. Этот сервис создает в профиле пользователя индексные файлы и не закрывает их, когда пользователь закрывает сеанс, и, более того, ставит на них особые права доступа, в результате эти индексные файлы не могут быть скопированы на шару во время синхронизации профиля.

Лечение

  1. Выключить сервис Windows Search групповой политикой.
    1. Если ферма новая, то этого достаточно, т.к. профили пользователей не будут содержать индексных файлов.
    2. Если профили уже созданы, то они содержат индексные файлы и проблема остается – нужно создавать политику/скрипт удаления этих паразитных файлов.
  2. Настроить исключения (рекомендую)
    1. Выключение сервиса Windows Search может быть неудобно, если пользователи используют меню Старт и некоторые программы, которые требуют запущенного Windows Search. Если ферма используется для работы с Office и другими офисными программами, то Windows Search становится критически необходимым для удобной работы пользователей.
    2. Поэтому с помощью групповой политики настраиваем исключения папок, которые не должны копироваться при синхронизации профилей с шарой: User Configuration – Administrative Templates – System – User Profiles Prevent the following directories from roaming with the profile. Указываем AppData\Roaming\Microsoft\Search и применяем политику.
    3. После применения групповой политики она действует сразу без перезагрузки.

Remote Desktop – миграция на Windows Server 2019


  1. В документации как-то двусмысленно написано про обновление брокеров в конфигурации active-active: в одном месте – исключите из развертывания все брокеры кроме одного, в другом – обновляйте офлайн. Обновили так: у одного выключили сеть и обновили офлайн (включили только после завершения обновления второго брокера), второго обновили онлайн (с подключенной сетью) – никаких манипуляций с конфигурацией развертывания не делали.
  2. После обновления выяснилоcь, что сервис Remote Desktop сыпется и перезапускается со страшной скоростью. Это какая-то бага. Проблема провоцируется подключением к серверу брокера по RDP. Обходной путь: запретить через GPO протокол UPD в Remote Desktop Host на брокерах. После этого сервис перестал падать при подключении с Windows 10 (хотя вроде падает при подключении с Windows 7). Проблема отслеживается на форуме Technet.

Полезные ссылки (для 2016, но актуальны):

  1. https://blogs.technet.microsoft.com/tip_of_the_day/2017/01/30/rds-tip-of-the-day-upgrading-your-remote-desktop-services-deployments-to-windows-server-2016/
  2. https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/upgrade-to-rds

PS:

Ошибка падения сервиса:

Log Name:      Application
Source:        Application Error
Date:          04.02.2019 9:48:10
Event ID:      1000
Task Category: (100)
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      rdcb1.bis.bashtel.ru
Description:
Faulting application name: svchost.exe_TermService, version: 10.0.17763.1, time stamp: 0xb900eeff
Faulting module name: ntdll.dll, version: 10.0.17763.1, time stamp: 0xa369e897
Exception code: 0xc0000374
Fault offset: 0x00000000000fb349
Faulting process id: 0x1a64
Faulting application start time: 0x01d4bc421689ed0b
Faulting application path: C:\WINDOWS\System32\svchost.exe
Faulting module path: C:\WINDOWS\SYSTEM32\ntdll.dll
Report Id: 3dd20b15-d2e1-48b5-ab57-cf1cb821eb1b
Faulting package full name: 
Faulting package-relative application ID: 
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Application Error" />
    <EventID Qualifiers="0">1000</EventID>
    <Level>2</Level>
    <Task>100</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2019-02-04T04:48:10.524513800Z" />
    <EventRecordID>3268</EventRecordID>
    <Channel>Application</Channel>
    <Computer>rdcb1.bis.bashtel.ru</Computer>
    <Security />
  </System>
  <EventData>
    <Data>svchost.exe_TermService</Data>
    <Data>10.0.17763.1</Data>
    <Data>b900eeff</Data>
    <Data>ntdll.dll</Data>
    <Data>10.0.17763.1</Data>
    <Data>a369e897</Data>
    <Data>c0000374</Data>
    <Data>00000000000fb349</Data>
    <Data>1a64</Data>
    <Data>01d4bc421689ed0b</Data>
    <Data>C:\WINDOWS\System32\svchost.exe</Data>
    <Data>C:\WINDOWS\SYSTEM32\ntdll.dll</Data>
    <Data>3dd20b15-d2e1-48b5-ab57-cf1cb821eb1b</Data>
    <Data>
    </Data>
    <Data>
    </Data>
  </EventData>
</Event>

Log Name:      Application
Source:        Application Error
Date:          04.02.2019 9:21:40
Event ID:      1000
Task Category: (100)
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      rdcb1.bis.bashtel.ru
Description:
Faulting application name: svchost.exe_TermService, version: 10.0.17763.1, time stamp: 0xb900eeff
Faulting module name: RDPBASE.dll, version: 10.0.17763.1, time stamp: 0x2e058d64
Exception code: 0xc0000005
Fault offset: 0x00000000000de496
Faulting process id: 0xf04
Faulting application start time: 0x01d4bc40fa908148
Faulting application path: C:\WINDOWS\System32\svchost.exe
Faulting module path: C:\WINDOWS\system32\RDPBASE.dll
Report Id: 045e21ce-373b-402e-bad2-aca8a3af462d
Faulting package full name: 
Faulting package-relative application ID: 
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Application Error" />
    <EventID Qualifiers="0">1000</EventID>
    <Level>2</Level>
    <Task>100</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2019-02-04T04:21:40.086665100Z" />
    <EventRecordID>2864</EventRecordID>
    <Channel>Application</Channel>
    <Computer>rdcb1.bis.bashtel.ru</Computer>
    <Security />
  </System>
  <EventData>
    <Data>svchost.exe_TermService</Data>
    <Data>10.0.17763.1</Data>
    <Data>b900eeff</Data>
    <Data>RDPBASE.dll</Data>
    <Data>10.0.17763.1</Data>
    <Data>2e058d64</Data>
    <Data>c0000005</Data>
    <Data>00000000000de496</Data>
    <Data>f04</Data>
    <Data>01d4bc40fa908148</Data>
    <Data>C:\WINDOWS\System32\svchost.exe</Data>
    <Data>C:\WINDOWS\system32\RDPBASE.dll</Data>
    <Data>045e21ce-373b-402e-bad2-aca8a3af462d</Data>
    <Data>
    </Data>
    <Data>
    </Data>
  </EventData>
</Event>

Коротко о Delivery Optimization


Для Windows 10 компания Microsoft создала новый облачный сервис для оптимизации установки обновлений и соответствующую Windows службу Delivery Optimization.

С выходом Windows 10 Enterprise 2019 компании начали массовые миграции на Windows 10, и в корпоративной среде теперь нужно решить, как жить с Delivery Optimization.

Если корпоративные политики разрешают использовать облачные сервисы, то можно оставить настройки по умолчанию, тем более что это работает и с WSUS. Также можно подкрутить режим загрузки. В документации описано несколько доступных режимов https://docs.microsoft.com/en-us/windows/deployment/update/waas-delivery-optimization#download-mode.

Если корпоративные политики запрещают использование облачных сервисов, то включите с помощью политик режим Bypass. В этом случае у вас будет работать BranchCache и BITS. Скорее всего они у вас уже настроены. Есть нюанс: Delivery Optimization работает лучше с Distributed Cache mode, Hosted Cache mode не рекомендуется и тем более не работает с Configuration Manager. Подробности https://docs.microsoft.com/en-us/windows/deployment/update/waas-branchcache.

Почему стоит обратить внимание на открытые проекты


Открытые проекты, которых невообразимое множество на https://github.com, могут быть полезны не только тем, что мы можем получить бесплатное ПО.

  1. Приобретение персонального опыта

Выбрав интересный для вас проект, над которым работают высококлассные профессионалы, вы через некоторое время получите бесценный опыт, который вы не сможете получить нигде больше: ни в учебниках, ни на платных курсах, ни в блогах. Весь этот опыт распылен в дискуссиях (issue discussions), рецензиях на код (code reviews), в самом коде.

Общаясь с профессионалами, вы можете изучить новые технологии, языки, приобрести практические навыки – всё это увеличит вашу профессиональную ценность. Кроме того, работая над интересным проектом с интересными людьми, вы получите удовольствие, что не так уж и мало для счастья.

  1. Получение нужных возможностей в продукте

Когда мы сталкиваемся с какой-то проблемой, ошибкой или отсутствием возможностей в используемом ПО, мы обречены искать какой-то обходной путь или альтернативное ПО. Самое ужасное, когда мы не можем добиться помощи от платной техподдержки или получаем ответ: «Покупайте новую версию, когда она появится через сколько-то месяцев или лет».

С открытыми проектами у вас появляются дополнительные возможности. Вы можете свободно задать вопрос и получить консультацию, зарегистрировать проблему и поучаствовать в её обсуждении, и, даже, получить быстрое добавление новой фичи или быстрое исправление проблемы. Если у проекта нет на это ресурсов, но он важен для вас, то вас можете выступить в роли разработчика и создать нужные вам изменения.

Важный нюанс: в открытом проекте вам никто ничего не должен – всё развивается на инициативе таких же людей как вы – объедините свои усилия с ними и получите выгоды от совместной работы.

  1. Получение выгод для бизнеса

Создание ПО требует значительных затрат: времени, людей, вычислительных ресурсов. Проще говоря – долго и дорого. Поэтому компании могут преобразовать свои проекты в открытые или присоединиться к существующему открытому проекту. Объединив усилия с другими компаниями, сообществами и энтузиастами компания получает возможность сэкономить огромные ресурсы и время, направив их на основную деятельность, которая приносит доход. Это может быть критически важно для маленьких компаний и индивидов: при минимальных вложениях они способны получать большие и стабильные выгоды.

Если ваш жизненный энтузиазм ещё не угас, а интеллект не атрофировался, найти тебе себе проект (или проекты) по душе и развивайтесь вместе с ним.