Многоуровневое приложение с виртуальными жесткими дисками и PowerShell

Опубликовано: 15 Апреля, 2023
Многоуровневое приложение с виртуальными жесткими дисками и PowerShell

Расслоение приложений с использованием VHD

Отделение приложений от операционной системы остается недостижимой целью для многих ИТ-организаций. Несколько коммерческих предложений обещают предоставить уровни приложений, чаще всего с использованием проприетарных методов. Эти многоуровневые методы позволяют добавлять отдельные приложения по желанию в базовую операционную систему или даже, в некоторых случаях, управлять самой операцией как уровнем, чтобы не было необходимости поддерживать пул операционных систем для нескольких вариантов использования. При небольшом использовании технологий контейнеризации, которые, по общему признанию, все еще являются собственностью, можно использовать встроенную в Windows технологию виртуального жесткого диска (VHD) для подключения приложений к операционной системе во время выполнения.

Первое, что необходимо, — это какой-нибудь метод контейнеризации приложений. Простая установка чего-либо, кроме простейших приложений, на виртуальный жесткий диск не сработает, потому что любые локальные записи в реестр или профили пользователей не будут обнаружены виртуальным жестким диском. Некоторые примеры технологий контейнеризации приложений включают Microsoft App-V, VMware ThinApp и Turbo.Net. Особо следует упомянуть FlexApp от LiquidWare, так как этот продукт обеспечивает контейнеризацию приложений и присоединение VHD как часть своего продукта. Поскольку я использовал Turbo.Net для создания прототипа этого решения, я буду использовать его для всех будущих примеров.

Преимущества многоуровневых приложений

Любая технология многоуровневого размещения приложений обещает вывести приложения из ОС, чтобы управлять меньшим количеством золотых образов. В идеале можно поддерживать и исправлять единый золотой образ Windows. Контроль версий намного проще благодаря многоуровневости, поскольку обновленная версия программного обеспечения автоматически публикуется для пользователей при их следующем входе в систему, когда обновляется контейнер на виртуальном жестком диске. Многоуровневость также позволяет выполнять дедупликацию хранилища, поскольку приложения сохраняются на виртуальном жестком диске один раз, а не занимают место на локальном физическом компьютере. Большинство решений VDI имеют встроенные стратегии дедупликации, которые уже можно использовать для виртуальных компьютеров. Многие существующие коммерческие решения созданы с учетом VDI, что связывает их с виртуальными машинами. Это часто создает ситуацию, когда для управления компьютерами инфраструктуры виртуальных рабочих столов и физическими рабочими столами необходимы разные процессы. Используя технологии контейнеризации приложений и помещая эти контейнеры в VHD-файлы, можно применить многоуровневость приложений к любому компьютеру под управлением Windows. Кроме того, решение позволяет управлять образами с помощью простого процесса локального подключения виртуального жесткого диска, а затем копирования контейнеров на виртуальный жесткий диск или их удаления для добавления, удаления или обновления программного обеспечения.

Как наслаивать приложения с помощью Turbo.net

Сначала необходимо создать пустой VHD. Нажмите «Пуск », затем введите «diskmgmt.msc», чтобы вызвать «Управление дисками» на клиенте Windows 10. В разделе «Управление дисками» нажмите «Действие» и выберите «Создать виртуальный жесткий диск». Выберите удобное место для размещения виртуального жесткого диска. Это может быть либо локальный путь, либо сетевая папка. Обязательно выберите VHD, а не VHDX в качестве типа виртуального диска. На момент написания этой статьи командлет PowerShell, необходимый для монтирования VHDX, присутствует только в том случае, если в системе также установлен Hyper-V. Возможно, именно поэтому технология MSIX App Attach от Microsoft для виртуальных рабочих столов Azure требует установки Hyper-V, что обычно довольно странно для установки на виртуальный компьютер. После создания виртуального жесткого диска его необходимо инициализировать и отформатировать, как любой новый физический диск.

После создания и форматирования виртуального жесткого диска он отображается так же, как и любой другой диск. Обратите внимание, что виртуальные жесткие диски имеют голубой значок вместо стандартного серого. Отформатированному виртуальному жесткому диску по умолчанию назначена буква диска. Вместо этого можно указать конкретную точку монтирования, что упрощает управление. Двойной щелчок по файлу виртуального жесткого диска автоматически смонтирует виртуальный жесткий диск, позволяя перемещать файлы на виртуальный жесткий диск и с него, как и любой другой диск.

Следующим шагом является копирование контейнеров Turbo — файлов.svm на языке Turbo — на пустой виртуальный жесткий диск. В этом нет ничего особенного. Перетаскивание, control-c с control-v, robocopy, Get-Item или щелчок правой кнопкой мыши — все в порядке.

Последним шагом в обеспечении работы слоев является установка клиента Turbo и настройка соответствующих сценариев для запуска. Обратите внимание, что примеры сценариев PowerShell, перечисленные в конце этой статьи, предполагают, что Turbo был установлен для всех пользователей. Если Turbo установлен для отдельного пользователя, то путь к исполняемому файлу находится в пользовательском пути %LOCALAPPDATA%cmd, а не в Program Files (x86). Сценарий монтирования виртуального жесткого диска должен запускаться с повышенными разрешениями, которые можно обработать, запустив вложение виртуального жесткого диска в качестве запланированной задачи, работающей от имени административной учетной записи, а не от СИСТЕМЫ. Несмотря на то, что для сбора информации о виртуальном жестком диске требуются административные разрешения, сценарий для добавления приложений будет работать правильно, если он назначен объекту групповой политики входа пользователя. Кроме того, если вы используете Turbo, убедитесь, что установлены SVM ложки/чистки, ложки/базы и xvm, так как они являются связующим звеном, которое позволяет контейнерам Turbo работать. Без них хуки приложений будут отображаться в меню «Пуск», но приложения не будут запускаться. (Сценарии PowerShell, изображенные на изображениях ниже, перечислены в конце статьи для удобства копирования и вставки.)

Производительность всегда важна для всего, что мы делаем в ИТ. Мы можем повысить производительность приложений, зарегистрированных при входе в систему, используя общий кэш Turbo для всех пользователей, а не размещая кэш каждого пользователя на своем локальном компьютере. Для этого я создал еще один пустой виртуальный жесткий диск и настроил его на монтирование в %LOCALAPPDATA%Cache во время инициализации вместо получения буквы диска при монтировании. Этот виртуальный жесткий диск кэша затем монтируется при запуске точно так же, как и виртуальный жесткий диск приложения, и сценарий входа в систему указывает клиенту Turbo указывать на %LOCALAPPDATA%Cache вместо используемого по умолчанию %PROGRAMDATA%TurboContainersRepo. Последующие установки при входе приложений были на 50% быстрее после внедрения общего кэша.

Примечание о менеджере рабочего пространства пользователя Ivanti

Первоначальная проверка концепции использования слоев виртуального жесткого диска, содержащих контейнеры Turbo, полностью управлялась менеджером рабочего пространства пользователя Ivanti. В частности, использовался компонент политики Environment Manager. Это решение принесло простоту настройки благодаря управлению на основе событий, дополнительную детализацию в отношении того, когда в процессе входа в систему должно выполняться монтирование виртуального жесткого диска и запуск сценариев, а также богатые инструменты для управления монтированием виртуального жесткого диска. Работа по удалению User Workspace Manager из процесса потребовала немало проб и ошибок, чтобы найти решение. Например, UWM автоматически обрабатывает необходимое повышение прав для подключения виртуального жесткого диска, чтобы шаг можно было настроить в пространстве пользователя в UWM, а не запускать повышенные права для всего компьютера. Существуют и другие инструменты, которые делают аналогичные вещи, например продукт ProfileUnity от Liquidware. Мы используем User Workspace Manager с тех пор, как он назывался AppSense, поэтому мы хорошо знакомы с продуктом, но это никоим образом не означает, что User Workspace Manager является обязательным требованием.

Некоторые заключительные мысли

Так следует ли использовать многослойность приложений? Честно говоря, с Турбо, наверное, нет. Turbo имеет собственную встроенную функцию подписки, которая выполняет те же базовые функции с меньшими затратами. Подписки вытягивают все приложения из указанной рабочей области. Если предположить, что клиент Turbo уже установлен для всех пользователей, простой сценарий входа в систему, такой как «маркетинговая турбо-подписка» (без кавычек), позволит разместить все приложения в рабочей области маркетинга без необходимости работы с файлами VHD.

Некоторые сценарии, в которых многоуровневое размещение VHD по-прежнему имеет смысл, — это компьютеры в стиле киосков, на которых профили пользователей не сохраняются между входами в систему, филиалы, в которых доступно быстрое хранилище и относительно медленные соединения с серверами Turbo, а также организации, в которых используется некоторая форма контейнеризации приложений, которая не работает. не имеют эквивалентной функциональности подписки Turbo. Отличным примером этого является App-V. Использование контейнеров App-V внутри файлов VHD в сочетании со сценариями запуска и входа по существу обеспечивает функциональность MSIX App Attach без ограничений, связанных только с возможностью использования на виртуальных рабочих столах Azure и необходимостью установки Hyper-V на клиентские компьютеры, которые в противном случае не собирается использовать Hyper-V. Конечно, есть и другие сценарии, в которых эта технология может быть благом. Имейте в виду, что всегда есть задержка, пока сетевое хранилище не смонтирует любые виртуальные жесткие диски и не представит приложения.

Примеры сценариев PowerShell

Выполнить-TurboSVM.ps1

# Подключаемся к диску $imagePath = '\your.fileshare.hereVHDTurbo-Test-Layer.vhd' $drive = Get-DiskImage -StorageType VHD -ImagePath $imagePath # Определяем букву подключенного диска $letter = ( ($drive | Get-Disk | Get-Partition | Get-Volume).DriveLetter) + ':' # Перечислить все SVM, доступные на смонтированном диске $svm = Get-ChildItem -Path $letter # Перебрать каждую добавленную SVM соответствующие ярлыки foreach ($entry в $svm) { & "C:Program Files (x86)TurboCmd	urbo.exe" import svm --name $entry.BaseName $entry.FullName & "C:Program Files (x86)TurboCmd	urbo.exe" installi --skip-installed --offline $entry.BaseName }

Mount-VHD.ps1

$imagePath = '\your.fileshare.hereVHDTurbo-Test-Layer.vhd' $vhd = Mount-DiskImage -StorageType VHD -Access ReadOnly -ImagePath $imagePath

Set-TurboCache.ps1

$letter = $env:LOCALAPPDATA + 'Cache' # Специальная команда настройки для установки конфигурации Turbo для использования виртуального жесткого диска в качестве кэша. & "C:Program Files (x86)TurboCmd	urbo.exe" config --gci-expiration=0 --gci-interval=0 --image-cache-size=0 --image-path=$ letter # Убедитесь, что основные ВМ находятся в кеше, иначе пакеты не запустятся; критический. & "C:Program Files (x86)TurboCmd	urbo.exe" потяните ложку/чистую,ложку/базу,/xvm