Как установить и использовать WinGet во время автопилота


В этом посте я покажу вам, как установить последнюю версию WinGet во время процесса AutoPilot и затем одновременно развернуть приложение с помощью инструмента командной строки WinGet.

Это позволит вам использовать инструмент командной строки WinGet для управления приложением как во время процесса автопилота, так и сразу после входа в систему.

Что такое WinGet?

WinGet — это инструмент командной строки для решения диспетчера пакетов Windows, который позволяет находить, устанавливать, обновлять или удалять приложения на компьютерах с Windows 10 и 11.

Это быстрый и эффективный инструмент для удаленного развертывания приложений на рабочих станциях, особенно с помощью Microsoft Intune.

WinGet предварительно установлен в Windows?

Современные версии Windows 10 (1709 или новее) и все версии Windows 11 по умолчанию поставляются с предустановленным диспетчером пакетов Windows (WinGet).

Возникает вопрос: зачем устанавливать его вручную, если он, скорее всего, уже развернут? Пока установлен диспетчер пакетов Windows, может пройти некоторое время, прежде чем инструмент командной строки станет доступен. Это происходит только после того, как пользователь входит в систему и запускает Microsoft Store для регистрации диспетчера пакетов Windows. Следовательно, необходимо устанавливать вручную.

Версии WinGet и размер файла

Я хочу упомянуть размеры файлов WinGet и различные доступные версии. Это связано с тем, что начиная с предварительной версии WinGet 1.6.1573 в комплект включены хост .NET и PowerShell, что увеличивает размер файла пакета в 20 раз!

Это было подчеркнуто сопровождающим на GitHub в разделе обсуждений указанной версии.

Для последней версии без встроенных этих ресурсоемких функций обязательно установите версию 1.5.2201. Однако, если вы хотите использовать WinGet для развертывания приложений во время подготовки AutoPolit, установите ПОСЛЕДНЮЮ версию согласно моему сценарию.

Шаг 1. Создание сценария установки

Сначала вам нужно создать сценарий, который установит WinGet.

Ниже приведен простой скрипт, который сначала проверит, установлен ли уже WinGet; затем, если это не так, он загрузит рекомендуемую версию WinGet и зависимости из официальных репозиториев и установит их.

Этот скрипт также доступен на GitHub.

<#
.SYNOPSIS
Installs WinGet, for use with Intune

.LINK
   https://ourcloudnetwork.com
   https://www.linkedin.com/in/danielbradley2/
   https://twitter.com/DanielatOCN
   
.NOTES
   Version:        0.1
   Author:         Daniel Bradley
   Creation Date:  Friday, January 5th 2024, 5:18:37 pm
   File: Install-winget.ps1

.EXAMPLE
Deploy as Intune script

.LICENSE
Use this code free of charge at your own risk.
Never deploy code into production if you do not know what it does.
#>

#Create path and define log file
$path= "C:\ProgramData\WinGet"
$LogFile = "InstallLog.txt"
mkdir $path -ErrorAction SilentlyContinue

#Write to log
Function LogWrite
{
   Param ([string]$logstring)
   $date = (Get-Date).tostring("yyyyMMdd-HH:mm")
   Add-content "$path\$Logfile" -value "$date - $logstring"
}

#Check if WinGet is Installed
$TestPath = "C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_1.21.3482.0_x64__8wekyb3d8bbwe\AppxSignature.p7x"
$Winget = Test-path $TestPath -PathType Leaf

#Install WinGet
if (!$Winget){
    LogWrite "WinGet not installed, attempting install with Add-AppxPackage"
    Try {
        LogWrite "Downloading WinGet and its dependencies..."
        Start-Transcript -Path "$path\$Logfile" -Append
        Invoke-WebRequest -Uri https://aka.ms/getwinget -OutFile "$path\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle" -Verbose
        Invoke-WebRequest -Uri https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx -OutFile "$path\Microsoft.VCLibs.x64.14.00.Desktop.appx" -Verbose
        Invoke-WebRequest -Uri https://github.com/microsoft/microsoft-ui-xaml/releases/download/v2.7.3/Microsoft.UI.Xaml.2.7.x64.appx -OutFile "$path\Microsoft.UI.Xaml.2.7.x64.appx" -Verbose
        Add-AppxProvisionedPackage -online -packagepath $path\Microsoft.VCLibs.x64.14.00.Desktop.appx -SkipLicense -Verbose
        Add-AppxProvisionedPackage -online -packagepath $path\Microsoft.UI.Xaml.2.7.x64.appx -SkipLicense -Verbose
        Add-AppxProvisionedPackage -online -packagepath $path\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle -SkipLicense -Verbose
        Stop-Transcript
    }
    Catch {
        Write-host "Unable to complete offline installer"
    }
} Else {
    LogWrite "WinGet already installed"
}

Сохраните этот сценарий как Install-WinGet.ps1, затем вы сможете протестировать его во время OOBE в AutoPilot, чтобы убедиться, что он работает и что WinGet также работает!

На экране OOBE нажмите SHIFT+F10 и введите следующее: (путь к файлу сценария PowerShell может отличаться).

PowerShell
Set-ExecutionPolicy Unrestricted
.\Install-WinGet.ps1

После завершения установки проверьте установку Google Chrome с помощью следующей команды:

winget install -e --id Google.Chrome

Шаг 2. Загрузите сценарий в Intune.

Далее вам нужно будет загрузить свой скрипт в Intune. Я решил развернуть это с помощью сценария вместо упаковки в приложение Win32, но вы можете развернуть его любым способом. (если вы упаковываете приложение Win32, вам может потребоваться добавить в код дополнительную логику). По моему мнению, WinGet будет развернут и поддерживаться после этой установки, поэтому я планирую забыть о нем после установки.

Еслиесли вы хотите развернуть приложения одновременно во время OOBE, вы можете добавить в сценарий следующие строки кода: (измените Google.Chrome на предпочитаемое вами приложение ).

Альтернативно вы можете упаковать это отдельно и развернуть как приложение Win32 (оно запустится после завершения выполнения сценария во время OOBE). Мне не удалось заставить это работать, но если можете, напишите мне сообщение!

cd "C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_1.21.3482.0_x64__8wekyb3d8bbwe\"
LogWrite "location set to $((Get-Location).Path)"
.\Winget install Google.Chrome --accept-package-agreements --accept-source-agreements | Tee-Object "$path\$Logfile" -Append

Выполните следующие действия, чтобы развернуть сценарий из центра администрирования Intune.

1. Войдите на https://intune.microsoft.com/.

2. Выберите Устройства, затем в разделе Политика выберите Скрипты.

3. Выберите Добавить > Windows 10 и более поздние версии.

4. Определите имя и нажмите Далее. На странице Настройки скрипта выберите следующие настройки.

5. Назначьте свой сценарий всем устройствам (или своим предпочтениям) и завершите работу мастера.

Подведение итогов

Если вы зашли так далеко, отлично! Я хочу сообщить, что установка приложений на этом этапе OOBE с помощью инструмента командной строки WinGet является подтверждением концепции. Конечно, есть более эффективные способы упаковки, развертывания и обслуживания ваших приложений, но у каждого есть свои предпочтения.

Сразу после первого входа в систему мы видим, что Google Chrome был успешно установлен с помощью WinGet.