Езиковата лента изчезва в RDP сесия след приключване на сесията на сянка

На сървърите на RDS под Windows Server 2012 R2 / Windows Server 2016 има доста стара грешка. След като администраторът или служителят за техническа поддръжка се прекъсне от RDP сесията на потребителя в контролния режим чрез сенчеста връзка, езиковият панел изчезва в потребителската сесия. В резултат на това потребителят не може да превключи езика в своята RDS сесия; горещите клавиши за превключване на езика също не работят. Ако администраторът се свърже отново с потребителската сесия, езиковата лента се появява отново, при прекъсване на връзката изчезва отново. Подобна грешка възниква, когато Shadow се свързва с работни станции с Windows 10 и Windows 8.1..

Както се оказа, този проблем се появява само ако администраторът инициира връзка в сянка с езиков оформление, което не съвпада със системния език (език на показване) на компютъра на потребителя. Т.е. ако потребителят има инсталиран руски системен интерфейс и към него е свързан администратор с руско оформление, няма проблем. Ако е свързан администратор с английски оформление, езиковият панел изчезва, когато сесията е изключена.

Всъщност езиковата лента просто се крие, защото неактивният език се изтрива от потребителя и системата счита, че ако потребителят има само един език, няма нужда да показва панела за превключване на езика.

За да върнете езиковата лента, на клиента трябва да отидете Контролен панел \ часовник, език и регион \ език, изберете език и бутони нагоре/надолу преместете го.

За да автоматизирате това действие, можете да добавите следния скрипт PowerShell към работния плот на потребителя:

addlanguage.ps1

$ 1 = New-WinUserLanguageList en-US
$ 1.Add ("ru-RU")
Set-WinUserLanguageList $ 1 -сила

По принцип се получава ръчна патерица и дори с ръчно задвижване.

съвет. Попаднах на интересна настройка на регистъра IgnoreRemoteKeyboardLayout. Ако е на RDS сървър в клон HKLM \ System \ CurrentControlSet \ Control \ Клавиатура създайте нов параметър от тип DWORD със стойност 1 (необходимо е да рестартирате), след това сървърът започва да игнорира оформлението на клиентската клавиатура.

Версия на редактора на системния регистър на Windows 5.00
[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Клавиатурна подредба]
"IgnoreRemoteKeyboardLayout" = dword: 00000001

Проблемът с изчезващата езикова лента все още възниква, ако разположенията на клавиатурата се различават между сесията на администратора и терминала на потребителя.

Нека се опитаме да автоматизираме малко патерица. Когато прекъснете връзката със сесия в сянка, потребителят влиза в Microsoft -> Windows -> TerminalServices -> RemoteConnectionManager -> Оперативно събитие в журнала със "Сесията за контрол на сенките приключена" с EventId 20507.

Трябва да обвържем задачата за планиране с това събитие (елемент Прикачете задача към това събитие), която би изпълнила скрипта fixlangauge.ps1, който формира нова задача за планиращия и го изпълнява в потребителска сесия.

fixlangauge.ps1

$ User = Get-WinEvent -LogName "Microsoft-Windows-TerminalServices-RemoteConnectionManager / Operational" | Where-Object $ _. ID -eq "20507" | select-object-first 1 | ForEach-Object "$ ($ _. Properties [2] .Value)"
schtasks.exe / създаване / RU $ Потребител / IT / TN $ Потребител / TR "powershell.exe -File c: \ ps \ addlanguage.ps1" / SC DAILY
schtasks.exe / run / TN $ Потребител
Старт-сън-милисекунди 10000
schtasks.exe / Изтриване / TN $ Потребител / F

Задачата изпълнява горния PS скрипт addlanguage.ps1.

По този начин, след като администраторът прекъсне сесията на сянка с потребителя, задействането на събитието 20507 се задейства в системата и командата за добавяне на език автоматично се стартира от под потребителя.