Home IntuneWinTuner: Descomplicando o Deploy de Apps no Intune

WinTuner: Descomplicando o Deploy de Apps no Intune

por Sérgio Sant'Ana JúniorSérgio Sant'Ana Júnior
2,6K visualizações 11 minutos leitura

O WinTuner é uma ferramenta inovadora desenvolvida por Stephan van Rooij, um MVP Microsoft, que visa facilitar o empacotamento e a implantação de aplicativos de terceiros no Intune.

Este projeto é totalmente open-source, permitindo que os usuários usem e até contribuam para melhorias. Seguindo esse artigo hands-on você conseguirá fazer deploy de apps pelo Wintuner sem qualquer esforço.


Este guia é destinado a profissionais de TI que desejam entender o propósito do WinTuner e aprender a utilizá-lo seguindo as melhores práticas. Abordaremos desde a instalação do módulo e suas dependências, até o empacotamento de programas e métodos de implantação no Intune. Não deixe de acompanhar e apoiar o projeto Wintuner.

O que é o WinTuner?

O WinTuner é um módulo PowerShell open-source que automatiza o processo de empacotamento e implantação de aplicativos de terceiros no Microsoft Intune. Utilizando o Winget, o gerenciador de pacotes da Microsoft, o WinTuner permite buscar, baixar e preparar aplicativos diretamente do repositório oficial ou de fontes customizadas, agilizando tarefas que normalmente exigiriam esforço manual significativo.

Instalando o Módulo WinTuner e suas Dependências

Execute o PowerShell como Administrador e verifique se você está utilizando a versão 5 do PowerShell. Se for o caso, vamos instalar a versão mais recente utilizando o winget. Para isso, basta executar o seguinte comando:

winget install Microsoft.PowerShell

Com o Powershell 7 instalado, pode fechar o powershell 5 e execute a versão atualizada como administrador.

Instalando o Módulo WinTuner

Avançando para a próxima etapa da instalação, vamos prosseguir com a instalação do módulo WinTuner. Não pule nenhuma etapa, pois esse módulo é compatível com o PowerShell 7 e é essencial para o funcionamento adequado do WinTuner.

Install-Module -Name WinTuner -Force -AllowClobber

Aguarde a conclusão da instalação do módulo. Para garantir que os módulos estejam disponíveis na sessão atual do PowerShell, importe-os com o seguinte comando:

Import-Module WinTuner

Execute o comando abaixo se você já possuia o modulo instalado e quiser atualizar a última versão.

Update-Module -Name WinTuner

Para ver todas as funções disponíveis do WinTuner, execute:

Get-Command -Module WinTuner

Pesquisando pacotes no Wintuner

O WinTuner permite pesquisar pacotes disponíveis no repositório do Winget de forma rápida e eficiente. Exemplo: Pesquisando pelo navegador “Firefox“:

Search-WtWinGetPackage Firefox

O resultado exibe o Package ID, que é a informação necessária. No exemplo abaixo, o Package ID é ‘Mozilla.Firefox’.

Agora que descobriu o Id, vamos avançar para o próximo passo.

Autentique-se e comece a brincadeira

O WinTuner interage com a API Graph, exigindo a obtenção de um token válido para autenticação. Esse token é mantido na sessão e é reutilizado para todos os comandos que demandam autenticação.

Para começar utilize uma conta com privilégios de Administrador, ou seja, Admin Global.

 Connect-WtWinTuner -Username "[email protected]" -Test

Exemplo:

Connect-WtWinTuner -Username "[email protected]" -Test

Na primeira autenticação será solicitada permissões e o sua conta deve possuir as permissões solicitadas ou ser Administrador Global.

Depois de autenticado siga para os próximos passos.

Empacotando um Aplicativo

O WinTuner automatiza o processo de empacotamento de aplicativos para o Intune, criando o pacote intunewin a partir do winget.

Entenda o comando abaixo:

New-WtWinGetPackage -PackageId "Id do Pacote" -PackageFolder "Diretório"

Preencha o Id do Pacote e o Diretório onde será copiado os pacotes. Exemplo:

New-WtWingetPackage -PackageId 7zip.7zip -PackageFolder C:\Wintuner\Apps

Ao executar o comando ele realiza todos os arquivos necessários realizar o deploy no intune:

  • Baixa o instalador do aplicativo.
  • Cria o pacote .intunewin.
  • Gera os arquivos de metadados necessários.

Após executar o recomeno, verifique os arquivos baixados, que no meu exemplo estão na pasta C:\Wintuner\Apps\Mozilla.Firefox\130.0.1 e valide se os arquivos estão na pasta.

A vantagem deste processo é a possibilidade de entender melhor os arquivos gerados, que ao meu ver enriquece ainda mais o aprendizado.

Fazendo Deploy no Intune

Existem algumas formas de fazer isso, mas como já aprendemos e utilizamos anteriormente o New-WtWingetPackage, então vamos aproveita-lo e acrescentar apenas o Deploy-WtWin32App no final, conforme o exemplo abaixo.

New-WtWingetPackage -PackageId Mozilla.Firefox -PackageFolder C:\Wintuner\Apps | Deploy-WtWin32App

Este comando faz o upload do pacote para o Intune e cria o aplicativo com as configurações.

Resumindo, você pode executar o comando mencionado para baixar os arquivos e realizar o deploy diretamente no Intune. No entanto, é importante garantir que você esteja autenticado antes de rodar o comando.

Utilizando um script e otimizando o seu tempo.

O tempo pode ser tanto um aliado quanto um adversário para os profissionais de TI. Por isso, é essencial minimizar esforços automatizando processos, e uma maneira eficaz de fazer isso é por meio de scripts. Pensando nisso, desenvolvi um script que simplifica o processo de deploy, exigindo apenas o preenchimento de algumas informações básicas. Isso torna o deploy mais eficiente, reduz a curva de aprendizado e otimiza o seu tempo.

Utilize o script a seguir, salvando-o com o nome j365_wintuner.ps1 ou faça o download diretamente do meu repositório no Github. E lembre-se: para executar o script corretamente, utilize o seguinte comando:

pwsh -ExecutionPolicy Bypass -File .\j365_wintuner.ps1
#####################################################
## Jornada365 | Wintuner                         ####
## jornada365.cloud                              ####
## Sua jornada começa aqui.                      ####
## "https://github.com/svrooij/wingetintune"     ####
#####################################################

# Configurações personalizáveis
$script:config = @{
    Email = "[email protected]"
    PackageFolder = "C:\Wintuner\Apps"
    PackageIds = @(
        "7zip.7zip",
        "Microsoft.VisualStudioCode",
        "Mozilla.Firefox"
        "Microsoft.VCRedist.2015+.x86"
        "Microsoft.VCRedist.2015+.x64"
        "Microsoft.PowerBI"
        "Adobe.Acrobat.Reader.64-bit"
        "Google.Chrome"
        "AnyDeskSoftwareGmbH.AnyDesk"
        "Bitwarden.Bitwarden"
        "Notepad++.Notepad++" 
        
    )
    LogFile = "C:\Wintuner\deployment_log.txt"
}

# Função para logging
function Write-Log {
    param(
        [Parameter(Mandatory=$true)]
        [string]$Message,
        [ValidateSet("INFO", "WARN", "ERROR", "DEBUG")]
        [string]$Level = "INFO"
    )
    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    $logMessage = "[$timestamp] [$Level] $Message"
    Add-Content -Path $script:config.LogFile -Value $logMessage -ErrorAction SilentlyContinue
    Write-Host $logMessage
}

# Função para verificar e instalar o módulo WinTuner
function Ensure-WinTunerModule {
    try {
        if (-not (Get-Module -ListAvailable -Name WinTuner)) {
            Write-Log "Módulo WinTunero encontrado. Instalando..." "WARN"
            Install-Module -Name WinTuner -Force -Scope CurrentUser -ErrorAction Stop
        } else {
            Write-Log "Módulo WinTuner já está instalado."
        }

        Import-Module WinTuner -Force -ErrorAction Stop

        $currentVersion = (Get-Module WinTuner).Version
        $latestVersion = (Find-Module WinTuner).Version
        if ($currentVersion -lt $latestVersion) {
            Write-Log "Atualizando odulo WinTuner..." "WARN"
            Update-Module -Name WinTuner -Force -ErrorAction Stop
            Import-Module WinTuner -Force -ErrorAction Stop
        } else {
            Write-Log "Módulo WinTuner está na versão mais recente."
        }
    } catch {
        Write-Log "Erro ao gerenciar odulo WinTuner: $($_.Exception.Message)" "ERROR"
        throw
    }
}

# Função para conectar ao WinTuner
function Connect-ToWinTuner {
    param (
        [Parameter(Mandatory=$true)]
        [string]$Email
    )
    try {
        $connection = Connect-WtWinTuner -Username $Email -Test -ErrorAction Stop
        Write-Log "Conectado ao WinTuner com sucesso."
        return $connection
    } catch {
        Write-Log "Erro ao conectar ao WinTuner: $($_.Exception.Message)" "ERROR"
        throw
    }
}

# Função para criar e implantar pacotes
function Deploy-Packages {
    param (
        [Parameter(Mandatory=$true)]
        [string[]]$PackageIds,
        [Parameter(Mandatory=$true)]
        [string]$PackageFolder
    )
    foreach ($packageId in $PackageIds) {
        Write-Log "Processando pacote: $packageId"
        try {
            $package = New-WtWingetPackage -PackageId $packageId -PackageFolder $PackageFolder -ErrorAction Stop
            Write-Log "Pacote criado com sucesso: $($package.Path)"
            
            $deployResult = $package | Deploy-WtWin32App -Verbose -ErrorAction Stop
            Write-Log "Resultado do deploy: $($deployResult | ConvertTo-Json -Depth 3 -Compress)"
            
            Write-Log "Pacote $packageId implantado com sucesso."
        } catch {
            Write-Log "Erro ao implantar o pacote ${packageId}: $($_.Exception.Message)" "ERROR"
            Write-Log "Detalhes do erro: $($_ | ConvertTo-Json -Depth 3 -Compress)" "DEBUG"
        }
    }
}

# Script principal
try {
    Write-Log "Iniciando script de implantação..."
    Ensure-WinTunerModule
    $connection = Connect-ToWinTuner -Email $script:config.Email
    Write-Log "Detalhes da conexão: $($connection | ConvertTo-Json -Depth 3 -Compress)" "DEBUG"
    Deploy-Packages -PackageIds $script:config.PackageIds -PackageFolder $script:config.PackageFolder
} catch {
    Write-Log "Ocorreu um erro crítico: $($_.Exception.Message)" "ERROR"
    Write-Log "Stack trace: $($_.ScriptStackTrace)" "DEBUG"
} finally {
    # Desconectar ou realizar limpeza, se necessário
    # Se existir um comando de desconexão, use-o aqui
    # Disconnect-WtWinTuner -ErrorAction SilentlyContinue
    Write-Log "Script concluído."
}

Confira o Antes e o Depois — foi muito prático realizar o deploy de 11 aplicativos. Basta deixar o script rodando e aproveitar para tomar um café! :)

O WinTuner é uma ferramenta poderosa que facilita e automatiza o gerenciamento de aplicativos via Intune. Com sua integração ao PowerShell e Winget, oferece uma automação robusta, otimizando o tempo e recursos dedicados a tarefas como instalação, atualização e deploy de aplicativos.

Seguindo este guia, você adquiriu o conhecimento essencial para instalar, configurar e utilizar o WinTuner de forma eficiente, além de adotar melhores práticas que garantem uma gestão segura e otimizada dos aplicativos no ambiente Windows. Com exemplos práticos você vai explorar todo o potencial do WinTuner em suas operações diárias.

Você já utilizou o Wintuner e realizou deploy de apps no intune? Compartilhe sua experiência e participe e faça também parte desta jornada.

Você também pode gostar

1 comentário

Marcel
Marcel 10/10/2024 - 07:12

Excelente artigo, testei e simplifica muito o deploy.. porem tive problemas com o pacote adobe reader 64bits..
Ao realizar via Wintuner para deploy e configurar o app como required, o autopilot dava erro.. apos remover o adobe via Wintuner e configura-lo de forma manual, o erro parou. Ainda nao sei o que pode ter causado esse problema,mas novamente parabéns pelo artigo!!!

Responder

Deixe um comentário

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.

error: Este conteúdo está protegido.

Olá! Este site utiliza cookies para melhorar sua experiência de navegação, personalizar conteúdo e anúncios, fornecer funcionalidades de redes sociais e analisar nosso tráfego. Ao continuar a usar nosso site, você concorda com o uso de cookies. Aceitar