Ativo · Pronto para piloto
PowerShellMicrosoft IntuneWindows Scheduled TasksSHA-256JSONWin32Windows Runtime

Problema

Atualizar o wallpaper em um único computador é simples. Atualizar conteúdo de desktop e lock screen em endpoints Windows gerenciados é um problema de distribuição de software.

A solução precisa atender vários usuários, sobreviver a reinicializações, aplicar mudanças sem reconstruir o pacote do Intune, manter credenciais de publicação fora dos endpoints, validar conteúdo remoto, evitar releases parcialmente ativadas e preservar o estado funcional quando a rede ou o processo de publicação falha.

Um único script executado em apenas um contexto de segurança não atende todos esses requisitos com segurança. Downloads e estado compartilhado exigem acesso elevado, enquanto desktop e lock screen pertencem ao perfil do usuário conectado.

Solução

WallpaperAgent separa três responsabilidades:

  1. um processo externo de publicação grava imagens e um manifesto versionado em um repositório de conteúdo ou origem HTTPS;
  2. uma tarefa de máquina executada como SYSTEM baixa e valida o conteúdo candidato;
  3. uma tarefa no contexto do usuário interativo aplica somente os arquivos previamente validados.

O código do agente e o conteúdo visual possuem ciclos de vida independentes. Uma nova campanha pode ser publicada adicionando os arquivos e atualizando manifest.json, sem reconstruir ou redistribuir o pacote .intunewin.

Os endpoints não recebem credenciais de escrita no repositório. Eles utilizam acesso HTTPS anônimo ou controlado e somente leitura, enquanto as credenciais de publicação permanecem exclusivamente no serviço autorizado.

Contrato do manifesto e validação

O manifesto versionado descreve uma release combinada contendo os arquivos de desktop e lock screen. Cada item declara nome de arquivo simples, URL HTTPS absoluta, versão e hash SHA-256.

Antes que uma release candidata possa ser ativada, o updater valida:

  • tamanho do manifesto, estrutura JSON, versão do schema e campos obrigatórios;
  • versões da release e dos arquivos;
  • URLs HTTPS absolutas;
  • nomes de arquivo sem caminhos de diretório;
  • allowlist de extensões .jpg, .jpeg e .png;
  • limites configurados de tamanho;
  • formato e cálculo do SHA-256;
  • decodificação real da imagem e dimensões maiores que zero.

HTTPS protege o transporte. SHA-256 identifica os bytes exatos esperados pelo publicador. A decodificação confirma que um arquivo com nome e hash válidos pode ser processado como imagem.

Promoção atômica e comportamento em falhas

Os arquivos candidatos são baixados para nomes temporários exclusivos. Eles são movidos para o destino final somente depois que todas as verificações são aprovadas.

O current.json da máquina é atualizado de forma atômica apenas quando os arquivos de desktop e lock screen estão disponíveis. Isso evita um estado misto no qual cada imagem pertence a uma campanha diferente.

Quando uma requisição de rede falha, o manifesto é inválido, um hash está incorreto, uma imagem está corrompida ou um arquivo está ausente, a release candidata é rejeitada. A release validada anterior e seus arquivos continuam disponíveis.

As falhas são registradas no estado e em logs rotativos; o updater não limpa a configuração funcional apenas porque uma nova publicação falhou.

Separação de privilégios

A tarefa de atualização é executada como SYSTEM e controla downloads, validação, arquivos compartilhados, estado da máquina, valores de detecção no Registro, instalação e definições das tarefas agendadas.

A tarefa de aplicação é executada no contexto do usuário interativo e controla configurações de desktop em HKCU, a operação de lock screen pelas APIs do Windows Runtime, estado por usuário em %LOCALAPPDATA% e correção de alterações manuais.

Usuários padrão recebem apenas leitura e execução sobre os arquivos validados. Eles não podem substituir o agente, os scripts ou o estado compartilhado. Mutexes nomeados e a configuração IgnoreNew impedem execuções sobrepostas.

Empacotamento e detecção no Intune

O repositório inclui um script de build que cria uma área limpa de empacotamento, gera a detecção de versão e pode chamar o Microsoft Win32 Content Prep Tool.

O script de detecção valida identidade e versão registradas, caminho de instalação, scripts e módulo obrigatórios, as duas tarefas agendadas e se nenhuma delas está desabilitada.

Isso separa o estado da instalação do estado do conteúdo: o Intune confirma a versão do agente, o estado de máquina informa o resultado da atualização e o estado por usuário registra a aplicação no perfil atual.

Diagnóstico e ciclo de vida

O projeto inclui testes de instalação, validação do manifesto remoto, validação do estado instalado, coleta de diagnósticos, suporte a atualização e desinstalação com -WhatIf.

Os arquivos baixados são preservados por padrão na desinstalação porque o Windows pode continuar referenciando seus caminhos. A limpeza completa permanece disponível por uma opção explícita.

Estado atual

O repositório público contém updater e aplicador, configuração e módulo auxiliar, instalador, desinstalador, testes, diagnósticos, gerador de pacote, detecção do Intune, política de segurança, changelog e documentação bilíngue de arquitetura, configuração, manifesto e implantação.

Endpoints de publicação, credenciais, identidade do repositório de conteúdo e detalhes de políticas internas permanecem fora do controle de versão.

O que o projeto demonstra

WallpaperAgent demonstra distribuição segura de conteúdo em endpoints, e não apenas um script de wallpaper. Código e conteúdo são separados, os endpoints possuem acesso somente leitura, arquivos remotos são tratados como não confiáveis até a validação, a ativação é atômica, os privilégios são divididos por responsabilidade e falhas preservam a última release funcional.