Публикация приложения RemoteApp на в ферме серверов RDS (Windows Server 2012) на примере КонсультантПлюс

imageВ Windows Server 2012 консоль Server Manager работает таким образом, что при попытке публикации приложения RemoteApp, для которого выбран исполняемый файл расположенный на общем сетевом ресурсе, возникает грозное уведомление о том, что мы можем выбирать исполняемые файлы расположенные только на каком-то конкретном сервере RD Session Host (RDSH)…

image

На самом деле это не так, и мы вполне можем выполнить публикацию исполняемого файла расположенного в сети с помощью командлетов PowerShell из модуля RemoteDesktop

image

Рассмотрим публикацию приложения RemoteApp с помощью PowerShell на примере КонсультантПлюс. Но сначала сделаем небольшое отступление в сторону описания особенностей использования КонсультантПлюс в распределённой многопользовательской среде. В нашем примере исполняемый файл этого приложения (cons.exe) расположен вместе с файлами правовых баз данных в общем сетевом каталоге. Нам нужно опубликовать это приложение для пользователей фермы RDS состоящей из нескольких серверов. В ферме RDS используется механизм перемещаемых профилей Roaming User Profiles. Наше приложение для сохранения пользовательских настроек использует специальные служебные каталоги \ConsUserData. Поэтому, учитывая нашу специфику перемещаемых профилей, создадим специальный ярлык (*.lnk) для запуска КонсультантПлюс в ферме RDS в режиме RemoteApp.

image

Дадим ярлыку имя, например CONS_RemoteApp.lnk и разместим его в той-же сетевой папке, где расположен сам исполняемый файл приложения. В качестве рабочей папки обязательно укажем значение ссылающееся на переменную %AppData% которая указывает на часть пользовательского профиля, которая обрабатывается механизмом Roaming User Profiles (это позволит нам добиться того, что при входе на любой сервер фермы RDS, пользователь будет иметь одни и те же настройки в КонсультантПлюс)

Так как с свойствах ярлыка мы указали каталог (%AppData%\ConsUserData), которого не существует для вновь создаваемых профилей пользователей, нам придётся позаботиться о его создании, например с помощью Group Policy Preferences (GPP). Создадим в групповой политике применяемой к пользователям на серверах RDS соответствующую настройку GPP в разделе
User Configuration\Preferences\Windows Settings\Folders

image

Теперь всё что нам остаётся сделать, это опубликовать созданный ярлык с помощью PowerShell:

Import-Module RemoteDesktop
New-RDRemoteApp -Alias ConsultantPlus `
-DisplayName "Консультант Плюс" `
-FilePath "\\FileServer\ConsultantPlus\CONS_RemoteApp.lnk" `
-IconPath "\\FileServer\ConsultantPlus\cons.exe" -IconIndex 0`
-ShowInWebAccess 1`
-collectionname "KOM-AD01-RDCOLL"`
-ConnectionBroker "KOM-AD01-RDS21.holding.com"

Если мы включаем признак публикации приложения на веб-странице RD Web Access и при этом там используются папки, то указать папку в которую нужно разместить ярлык можно добавив к команде ключ: 

-FolderName "Бизнес приложения"

Если необходимо ограничить доступ к публикуемому приложению, то к команде можно добавить ключ определяющий перечень доменных групп безопасности:

-UserGroups @("KOM\Accountants","KOM\Lawyers")

Практика показывает, что на текущий момент, опубликованное таким образом приложения отображаются в консоли Server Manager , но при попытке сохранить изменение их свойств возникает ошибка…image

Поэтому, если потребуется изменить свойства такого RemoteApp приложения, путь один – PowerShell.

Всего комментариев: 38 Комментировать

  1. mcpclubminsk /

    Вот это я понимаю мастер класс, сразу видно что пришлось по...возится с консультантом.

    "Так как с свойствах ярлыка мы указали каталог (%AppData%\ConsUserData), которого не существует для вновь создаваемых профилей пользователей"
    -Может более элегантно сделать папку ConsUserData в C:\Users\Default\AppData\ на всех серверах RDSH ??
    Тогда для каждого нового пользователя будет создаваться папка без групповой политики.

    1. Алексей Максимов / Автор записи

      Зачем заморачиваться с дефолтным профилем, который к тому же, как мы понимаем, обработает ситуацию лишь с созданием новых профилей. Достаточно сделать один параметр GPP и он будет "причёсывать" как нам надо и существующие профили и вновь создаваемые.

  2. mcpclubminsk /

    Я просто не сторонник "лишних" ГП, на мой взгляд это усложняет управляемость и документирование.

    Меня позвали однажды за небольшую денежку "починить" домен. Админ который его создал проработал лет 10 там. Вот где были авгиевы конюшни с групповыми политиками - плюс товарищ очень любил скрипты, WMI фильтры, loopback. Половина политик не работает, ....в общем я вежливо откланялся.

    1. mcpclubminsk /

      также есть еще возможность создать папку в ALLUSERS

    2. Алексей Максимов / Автор записи

      Ну это не говорит о том, что дела с методикой использования GPO обстоят везде таким же образом. Например у меня в регионе 7 крупных территориально разрозненных структурных подразделений со своими локальными администраторами и сотнями компьютеров и десятками серверов. Вся инфраструктура региона управляется менее чем десятком GPO. При этом в других регионах администраторы плодят по 30 политик. При максимально плотном использовании механизмов GPP можно сократить как минимум в двое-трое все GPO почти в 100% ситуаций. Как говорится, было бы желание. Простой пример из практики. Один администратор использует для настройки параметров WSUS на клиентах в пяти структурных подразделениях (в каждом свой WSUS сервер) - пять групповых политик, а другой всё настроит одной политикой (как например здесь https://blog.it-kb.ru/2011/10/12/wsus-client-management-with-gpp-group-policy-preferences/).
      Именно поэтому лишних GPO не бывает, бывают "недопиленные".
      Теперь по существу вопроса - использовать один раз сделанную настройку в GPP куда удобней, чем колупать каталоги дефолтных профилей на нескольких серверах, да ещё и постараться про них не забыть когда в ферму RDS добавляются новые сервера.

      1. mcpclubminsk /

        вопрос только в том, сколько тысяч настроек в 10 GPO.

        1. Алексей Максимов / Автор записи

          Глупости какие-то :) Что-то вы совсем всё драматизируете до крайней степени.

          1. mcpclubminsk /

            а можно как-то скайп или почту вашу узнать, есть вопросик.

          2. Алексей Максимов / Автор записи

            Мылбокс указан в нижнем колонтитуле.
            PS: Начинаю задумываться о том, а не замутить ли нам форум :)

  3. Odarchuk Sasha /

    Парни, так в Ремоут_апп на Вин2012 глюки с модальными окнами все еще присутствуют? Как ведет себя 1С 8.х и офис2010/2013 в Ремоут_апп ???

    1. Павел /

      "Однако, мало кто знает, что в большинстве случаев проблема решалась с помощью пакета исправлений, который вышел в конце мая прошлого года и доступен по ссылке - http://support.microsoft.com/kb/2384602/ru.

      К сожалению, содержимое патча не попало в релиз SP1 для Windows 7 и Windows Server 2008 R2 и было выпущено отдельно, однако сейчас можно пользоваться объединенным декабрьским пакетом исправлений, который подходит как для RTM-версии, так и для SP1-версии ОС. Также туда вошли исправления для ряда других артефактов RDP, не связанных с модальными окнами. Скачать данный пакет исправлений можно по ссылке - http://support.microsoft.com/kb/2604066" http://blogs.technet.com/b/ai/archive/2012/01/16/remoteapp.aspx

  4. Павел /

    Доброго времени суток. RDP сервер один, брокер не установлен. Опубликованное в графике приложение вижу и запускаю. При попытке добавить приложение через PS получаю ошибку: Установка служб удаленных рабочих столов не существует на *. Эту операцию можно выполнить после его создания. Подскажите, в чем может быть проблема?

    1. Павел /

      решение - запускать PS от имени администратора

  5. Сергей /

    Относится ли данная проблема к серверам RDP на базе Windows Server 2008 R2? Или речь только о 2012?

    1. Алексей Максимов / Автор записи

      Не понял вопроса. Про какую проблему речь?

  6. Сергей /

    имелось ввиду
    "...при попытке публикации приложения RemoteApp, для которого выбран исполняемый файл расположенный на общем сетевом ресурсе, возникает грозное уведомление о том...." и, соответственно, необходимость
    использования Powershell в качестве обходного маневра..
    В статье идет речь о сервере 2012. Будет ли возникать такая ситуация при использовании 2008R2?

    1. Алексей Максимов / Автор записи

      В WS2008R2 управление публикацией приложений RemoteApp организовано совершенно по другому и этот пост к этой системе не имеет никакого отношения.

  7. Сергей /

    Спасибо за оперативность

    1. Алексей Максимов / Автор записи

      Если у Вас остаются дополнительные вопросы то можно попробовать обсудить их на нашем форуме.

  8. Сергей /

    Алексей, добрый вечер!
    Цитата
    "Создадим в групповой политике применяемой к пользователям на серверах RDS соответствующую настройку GPP в разделе User Configuration\Preferences\Windows Settings\Registry"
    У меня нет под рукой английской версии, но мне кажется, нужно использовать не Registry, а Folders.
    Поправьте меня, если не так.

    1. Алексей Максимов / Автор записи

      Ваша правда, Сергей. Исправил.

  9. Александр ваш подписчик и читатель с 2009 года (по-моему) /

    Очень хочется сделать как в статье - но именно создание RemoteApp на .lnk не получается.
    Ввожу параметры нажимаю Enter - PS говорит Обработка данных, бегут oooooooo и ошибка "Указанное значение AppPath недопустимо" параметр вроде называется FilePath ну да надеюсь он именно об нем ругается (https://technet.microsoft.com/ru-ru/library/jj215450.aspx)

    PS C:\Windows\system32> New-RDRemoteApp

    Командлет New-RDRemoteApp в конвейере команд в позиции 1
    Укажите значения для следующих параметров:
    CollectionName: QuickSessionCollection
    DisplayName: Cons2015
    FilePath: "D:\Cons\ConsRemoteApp.lnk"
    New-RDRemoteApp : Указанное значение AppPath ("D:\Cons\ConsRemoteApp.lnk") недопустимо. Укажите допустимый путь к файлу
    .
    строка:1 знак:1
    + New-RDRemoteApp
    + ~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,New-RDRemoteApp

    Пробовал и так и другие

    FilePath: "D:\\Cons\\ConsRemoteApp.lnk"
    New-RDRemoteApp : Указанное значение AppPath ("D:\\Cons\\ConsRemoteApp.lnk") недопустимо. Укажите допустимый путь к фай
    лу.
    строка:1 знак:1
    + New-RDRemoteApp
    + ~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,New-RDRemoteApp

    PS C:\Windows\system32> New-RDRemoteApp

    Командлет New-RDRemoteApp в конвейере команд в позиции 1
    Укажите значения для следующих параметров:
    CollectionName: QuickSessionCollection
    DisplayName: Cons2015delete
    FilePath: "D:\Cons\Cons.exe"
    New-RDRemoteApp : Указанное значение AppPath ("D:\Cons\Cons.exe") недопустимо. Укажите допустимый путь к файлу.
    строка:1 знак:1
    + New-RDRemoteApp
    + ~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,New-RDRemoteApp

    Грустно, ведь через мастер работает публикация Cons.exe - но мастер не хочет .lnk

    1. Алексей Максимов / Автор записи

      Покажите свой скрипт и скажите на какой версии ОС вы его выполняете.

  10. Павел /

    Добрый день. Не подскажите - в чём засада? Сделал всё по вашему сценарию, всё добавилось, но - при попытке запустить Консультант - говорит что "Компьютеру не удалось подключиться к удалённому компьютеру".. Причём если запустить в командной строке \\Consultant\Consultant\ConsultantPlus.lnk - отлично запускается.. В сетевом окружении путь виден, пробую всё проделать заходя с правами админа.. Что я делаю не правильно?

    С уважением, Павел

  11. Игорь /

    Спасибо большое, все получилось. Консультант через RemoteApp работает и пользователи могут кастомизировать свой интерфейс не боясь, что настройки слетят при входе на другой сервер фермы.
    Алексей, а подскажите пожалуйста, как для всех пользователей распространить этот измененный ярлык на их рабочие столы? Это нужно для тех юзеров, кто и так сидит на удаленном рабочем столе и хочет запускать Консультант оттуда.
    Обычный ярлык на exe-файл делает просто, но как там указать этот специальный параметр рабочей папки %AppData%\ConsUserData?
    Спасибо.

    1. Алексей Максимов / Автор записи

      А что мешает применить механизм GPP, о котором здесь сказано?

  12. Максим /

    А в чем прелесть опубликовывать приложения через lnk на сетевом ресурсе? Я не понимаю :( Опубликовал cons.exe через RDWeb. В файле complect.cfg теперь можно использовать переменные окружения операционной системы. У меня, правда, всего один терминальный сервер, но в RDWeb можно указать место хранения профиля пользователя, соответственно в complect.cfg можно указать %UserProfile%\Consultant. К тому же не нужно расшаривать папочки консультанта. При первом запуске выходит стандартный диалог консультанта по поводу создания ярлыка и места хранения профиля (из complect.cfg). ОК - и все это создается на терминальном сервере, юзер и не увидит ничего.
    Хотя, как я понимаю, описан вариант 2013 года.... У меня только вчера появилась задача по консультанту.

    1. Алексей Максимов / Автор записи

      Без расшаривания К+ в ферме серверов RDS - никак.
      Про файл BASEcomplect.cfg не знал. Добавлю здесь информацию о нём.

      - В файле complect.cfg теперь можно использовать переменные окружения операционной системы.
      
      Формат файла - обычный текстовый файл.
      Первая строка - заголовок окна "Консультант Плюс". 
      Вторая - название ярлыка "Консультант Плюс" на рабочем столе.
      В третьей строке записывается путь до рабочей директории. 
      Для примера, содержание может быть таким:
      --
      Консультант Плюс
      Консультант Плюс
      %UserProfile%Consultant 
      --
      Здесь %UserProfile% - это каталог C:Documents and Settingsимя пользователя (для Windows XP/2000) или C:USERSимя пользователя (для Windows 7/Vista).

      Источник: http://www.artiks.ru/consultant_text.php?id=8960

      1. Максим /

        А поясните пожалуйста, почему "никак"? Вдруг мне придется разводить ферму. Спасибо.

  13. Алексей Максимов / Автор записи

    Ну а как вы себе представляете одновременный доступ к К+ с нескольких серверов без расшаривания самого К+

    1. Максим /

      Вы имеете ввиду то, что приложение должно быть установлено на каждом хосте фермы?

      1. Алексей Максимов / Автор записи

        Нет. Я это не имею ввиду. К+ вообще не требует установки и прекрасно работает из шары.

        1. Максим /

          Slowpoke mode .... off! :) По-видимому, придется раскидывать консультанта на каждый сервер фермы, как того требует Microsoft с любым приложением, опубликованном в ферме. Да, это лишнее место и лишний траф на обновления, но так требует мануал. Ваш вариант шарить конс+ лишает этих недостатков, но все же порождает новые, имхо - это секъюрность и/или дополнительные служебные учетные записи.

  14. Valeriy /

    Здравствуйте, может поможете в решении вопроса. Домен, установлен win server 2012R2, на нём развернуто роль RDP и добавлены RemoteApp. Пользователи запускают локально programm.rdp и попадают в программу, всё работает корректно, но при сворачивании, сама программа сворачивается, но картинка остаётся на рабочем столе, спасает только обновление Рабочего стола. Как можно решить проблему?

    1. Сергей /

      У меня такое наблюдалось при подключении с Windows XP. С клиентов Windows 7 и выше таких проблем нет. Проблему решил созданием двух ферм - на Windows 8 для клиентов Windows XP и Windows 2012 R2 для Windows 7 и выше. Для каждого опубликованного приложения есть 2 ярлыка RDP, которые раздаются через GPP в зависимости от версии Windows.

      1. Сергей /

        Закралась ошибка - для клиентов Windows XP ферма конечно же на Windows Server 2008 R2

  15. Максим /

    Вот тема для размышления. Необходимо внешним пользователям опубликовать 1С, да так, что бы не появлялось окно выбора базы, а сразу стартовала необходимая. Старт базы можно прописать в ярлыке 1С, это не проблема, а вот как опубликовать этот ярлычок? SMB наружу совсем не кошерно.

    1. Aleksandr /

      путь к базе 1С прописать в параметрах командной строки

Добавить комментарий