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.

Что нового в PowerShell Core 6.2 Preview4


PowerShell Core 6.2 Preview4 это последняя предварительная версия перед выпуском релиза 6.2. (Ещё будет RC версия, сам релиз запланирован на март). Так что если вы обнаружили какие-то проблемы, то спешите сообщить в https://github.com/PowerShell/PowerShell

Последние важные изменения в репозитории:

  1. Завершен переход на Azure DevOps CIs. Проведена зачистка скриптов от старых CIs.
  2. За новогодние праздники вычищено около 30000 ошибок форматирования кода, которые рапортовал CodeFactor сервис. Осталось ещё более 70000. Сейчас публиковать изменения кода стало намного легче: практически нет замечаний по форматированию. В планах улучшить настройки CodeFactor, т.к. не все его сообщения должны быть исправлены.
  3. Документация практически вся удалена и перенесена в соответствующий репозиторий https://github.com/MicrosoftDocs/PowerShell-Docs

 

Что нового в Core 6.2 Preview4:

  1. Внесено ряд исправлений в web-командлеты (#8694, #8679)
  2. Sort-Object получил ключ Stable (#7862)
  3. Hashtable теперь case-insensitive для всех Cultures (#8566)
  4. Добавлен параметер RepeatHeader в командлет Format-Table (#8481)
  5. Добавлена поддержка enum и char типов в Format-Hex (#8191)
  6. Добавлена поддержка подсказок в случае ввода ошибочного имени команды (тестируйте и пишите отзывы) (#8458)

И ещё много чего. Полный список изменений https://github.com/PowerShell/PowerShell/releases/tag/v6.2.0-preview.4

Built-in OverUsed и остальное про лиценции Remote Desktop


Описано подробно в статье.

Собственно Built-in Overused напоминалка, что у вас есть пользователи, которые подключаются к серверам более низкой версии, чем версия установленных лицензий, и возможно вам нужно установить лиценции для серверов более низкой версии, хотя это необязательно.

Хостинг PowerShell


При создании приложений использующих PowerShell (хостинг PowerShell) важно понимать следующее.

  1. Для совместимости с Windows PowerShell используется PowerShell.5.ReferenceAssemblies
  2. Для совместимости с PowerShell Core используется PowerShell.SDK
  3. Для создания модулей, которые работают в обеих версиях, нужно использовать PowerShellStandard.Library

Полезные ссылки:

  1. https://docs.microsoft.com/en-us/powershell/scripting/learn/writing-portable-modules?view=powershell-6
  2. https://github.com/MicrosoftDocs/PowerShell-Docs

PowerShell Core 6.2.0 Preview3


Традиционно краткий обзор того, что появилось и изменилось:

  • Прошла очередная волна зачистки кода от старых рудиментов
  •  Отладчик теперь не будет задавать вам много ненужных вопросов #8195
  •  Уменьшина вероятность проблем при множественном доступе к powershell.config.json #8249
  •  Появился новый командлет Join-String #7660
  • Get-PSHostProcessInfo и Enter-PSHostProcessтеперь работают на Unix #8232
  •  Улучшено время запуска #8341 #8396. Теперь почти как Windows PowerShell, немного медленнее. Сейчас вообще стали больше смотреть на производительность. Надеюсь, это будет постоянным процессом
  •  Добавлена поддержка Linux ARM64 #8016

Сейчас, пока наблюдается праздничное затишье, идёт активная работа по улучшению форматирования на основе отчётов CodeFactor (StyleCop). Код PowerShell создавался многие годы, разными людьми, менялись предпочтения по стилю форматирования. В результате сейчас мы имеем около 100 тысяч замечаний в CodeFactor. Некоторые правила будут выключены как бесполезные. Часть замечаний уже исправлены (>12 тысяч). За эти дни мы должны ещё хорошо продвинуться в этом направлении. Надеюсь, что после этого останется менее половины замечаний в CodeFactor. Всё это значительно улучшит читабельность и документированность кода и облегчит разработчикам создание изменений (PR).