Манипуляции с Метро-приложениями

  • Михаил
  • 12 мин. на прочтение
  • 113
  • 13 Dec 2015
  • 13 Dec 2015

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

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

Для начала, для того что бы убедиться что мы работаем с нужной версией powershell вводим

$host.version

убеждаемся что у нас правильная версия powershell (надо только 4.0) и на всякий случай проверяем версию операционной системы

(Get-WmiObject Win32_OperatingSystem).Name

потому что модуль AppX доступен только для Windows 8.1 и Windows Server 2012 R2.

Примечание: Конечно, в процессе может понадобится модуль DISM, но об этом позже.

Пишем

Get-Command —Module appx

и

Get-Command —Module dism

Получилось?

В укор Микрософту, могу сказать что не хватает командлета для обновления установленных приложений из командной строки. Не хватает аналога привычной команды

wuauclt /detectnow

и очень плохо то что ни одна команда не поддерживает ключа -Computer, надо будет сильно думать в сторону ps-remoting 

Что можно сделать при подобном скудном наборе средств?

Получение списка приложений

Инвентаризация приложений для всех пользователей

Get—AppxPackage —AllUsers

Для определенного пользователя

Get—AppxPackage -Name Package1 –User username

Примечание: Для локальных записей работает отлично, но для доменных, если пользователь использует для входа LiveID выдает ошибку. Пока не разобрался в причине.

Ищем установленный пакет по маске

Get—AppxPackage -name *Facebook*

Теперь переходим к модулю DISM, но надо нам из него совсем немного.

Получаем список предустановленных пакетов

Get—AppXProvisionedPackage —online | select PackageName

Чтение файлов журналов

Очень скудно и неинформативно…

Get—AppXLog —All

Более подробно, тем кто хочет использовать ГУЙ, могу порекомендовать прочтение вот этих файлов журналов.
 

Тем же кто собирает данные из журналов, «пацанским» методом

Get—AppXLog | FL

с дальнейшим анализом необходимых для поиска полей.

Установка нового приложения

Тут есть где разгуляться, но все просто до безобразия

Add—AppxPackage -Path C:\Dist\MyApp.appx –DependencyPath C:\winjs.appx

Тема очень интересная, но так как разработки мы не касаемся, то тем кому интересны детали настоятельно рекомендую обратиться к первоисточнику.

Удаление приложений

Логично предположить что руками удалять лишнее это очень долго и неблагодарно, главным образом потому что процесс этот никак не автоматизировать. Поэтому удаляем все что понаставил пользователь единовременно:

Get—AppxPackage —AllUsers | Remove—AppxPackage

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

# все одним махом

Get—AppXProvisionedPackage —online | Remove—AppxProvisionedPackage —online

# или какое то конкретное приложение

Remove—AppXProvisionedPackage —Online —PackageName

Что остается пользователю попавшему под админский произвол?
 

Как последний штрих, осталось отключить доступ к самому «Магазину приложений».

Расправа

Методика отключения проста — настройка отключается посредством реестровой политики через GPO или напрямую через правку реестра.

В редакторе групповых политик ищем папку

User Configuration\Administrative Templates\Windows Components\Store

Выбираем параметр справа, переведя радио-батон из состояния «Not Configured» в «Enabled».

Реестровый метод

Ищем путь в реестре

HKEY_CURRENT_USER\Software\Policies\Microsoft\

Добавляем ключ «WindowsStore«. Создаем параметр типа DWORD «RemoveWindowsStore» и устанавливаем ему значение «1».