Sistema corporativo de inventário e monitoramento para estações e servidores Windows, composto por:
- Coletor PowerShell (
sysinfo.ps1) que gera JSON por host e mantém um manifesto central. - Dashboard Web (
index.html,script.js,style.css) que consomemanifest.json+machines/*.jsone exibe indicadores, alertas e detalhes por máquina.
- Inventariar hardware, software, rede, segurança e eventos com coleta automatizada.
- Disponibilizar um painel único com visão do parque (dashboard), lista de máquinas e alertas.
- Padronizar a saída em JSON, facilitando integrações e exportações.
Arquivo: sysinfo.ps1
Gera, por padrão, no RepoRoot:
machines/<HOSTNAME>.json(inventário detalhado do host)manifest.json(índice consolidado das máquinas).manifest.lock(lock para atualização segura do manifesto)
Principais blocos coletados no JSON por host:
- OS (caption, build, arquitetura, boot/uptime)
- Computer / BIOS / BaseBoard
- CPU / RAM (inclui módulos)
- GPU / Monitor (EDID + WinForms screens)
- Storage (volumes e discos)
- Network (IPv4, MACs, detalhes de adaptadores)
- Temps (ACPI, discos e sensores quando disponíveis)
- Processes / Services / Software
- EventLogs (Application/System – críticos/erros)
- Security (antivírus, firewall, etc.)
- IssuesWarn / IssuesCrit (alertas calculados pelo coletor)
Arquivos: index.html, script.js, style.css
Views principais:
- Dashboard: indicadores e gráficos gerais do parque.
- Máquinas: cards/grade com busca, filtros e modal com detalhes.
- Alertas: consolidação de alertas a partir dos dados coletados.
Recursos adicionais:
- Exportação JSON/CSV diretamente pelo navegador (a partir dos dados carregados).
- Modo produção vs. exemplo via
config.json.
A forma mais simples é manter dashboard + dados no mesmo diretório servido via HTTP:
\\SERVIDOR\share\sysinfo\
├── sysinfo.ps1
├── index.html
├── script.js
├── style.css
├── config.json
├── manifest.json (gerado/atualizado pelo script)
├── .manifest.lock (gerado pelo script)
└── machines\
├── PC001.json
├── PC002.json
└── ...
Arquivos opcionais para laboratório/demonstração:
config_exemple.json(fallback seconfig.jsonfalhar)manifest_exemple.json(usado quandoAMBIENTE_PRODUCAO=false)
- Windows PowerShell 5.1
- Permissões para leitura de informações locais (recomendável Administrador para coleta completa)
- Permissão de escrita no
RepoRoot(especialmente em compartilhamento UNC)
Por padrão, o script usa o caminho configurado no parâmetro:
-RepoRoot "SEU_CAMINHO_AQUI"
Você pode ajustar para outro UNC ou pasta local.
Arquivo: config.json
Exemplo:
{
"AMBIENTE_PRODUCAO": true
}Comportamento:
true→ dashboard carregamanifest.jsonfalse→ dashboard carregamanifest_exemple.json
Exemplo (salvando no compartilhamento padrão):
powershell.exe -ExecutionPolicy Bypass -File .\sysinfo.ps1Exemplo (salvando em pasta local):
powershell.exe -ExecutionPolicy Bypass -File .\sysinfo.ps1 -RepoRoot "C:\sysinfo"A partir do RepoRoot:
Opção A (Python):
py -m http.server 8080Opção B (Node/http-server):
npx http-server . -a 0.0.0.0 -p 8080Acesse:
http://localhost:8080
Observação: servir via HTTP evita bloqueios de CORS que ocorrem ao abrir index.html diretamente pelo file://.
Principais parâmetros disponíveis (conforme param() do script):
-RepoRoot <caminho>: destino dos arquivos (manifest.json,machines\*.json)-ModoColeta "Completo" | "Minimo": controla o nível de coleta-IntervaloExecucao <segundos>: se > 0, entra em loop (inventário periódico)- Limiar de alertas:
-MinMemFreePercent,-MinMemFreeGB-MinDiskFreePercent,-MinDiskFreeGB-HighTempWarnC,-HighTempCritC-MaxProcessCPU,-MaxProcessMemoryMB
-SkipTemps: pula coleta de temperaturas/sensores-DisableJSON: desabilita escrita do JSON (use apenas se houver outro destino de persistência fora deste fluxo)-EnableRemoteActions: reservado para cenários com ações remotas (a depender da evolução do projeto)- Lock do manifesto:
-LockMaxTries(padrão 60)-LockSleepMs(padrão 500)
Exemplo com limiares customizados:
powershell.exe -ExecutionPolicy Bypass -File .\sysinfo.ps1 -MinMemFreePercent 10 -MinDiskFreePercent 10 -HighTempWarnC 75 -HighTempCritC 85Recomendação:
- Armazene o script no compartilhamento (ex.:
\\SERVIDOR\share\sysinfo\sysinfo.ps1) - Garanta permissões de escrita para o contexto de execução (tipicamente conta do computador /
Domain Computers) noRepoRoot - Configure a GPO para executar no startup com
ExecutionPolicy Bypass
Exemplo de linha única (startup):
powershell.exe -ExecutionPolicy Bypass -File "\\SERVIDOR\share\sysinfo\sysinfo.ps1" -RepoRoot "\\SERVIDOR\share\sysinfo"Exemplo (campos típicos):
[
{
"Hostname": "PC001",
"Json": "machines/PC001.json",
"TimestampUtc": "2025-12-22T15:10:20.123Z",
"Status": "OK",
"OS": "Windows 10 Enterprise",
"CollectionMode": "Completo"
}
]Exemplo (campos principais):
{
"Hostname": "PC001",
"TimestampUtc": "2025-12-22T15:10:20.123Z",
"Status": "OK",
"IssuesWarn": [],
"IssuesCrit": [],
"CollectionMode": "Completo",
"ScriptVersion": "2.4",
"OS": {
"Caption": "Windows 10 Enterprise",
"Version": "10.0.19045",
"Build": "19045",
"Architecture": "64-bit",
"LastBoot": "2025-12-22T10:00:00.000Z",
"Uptime": "05:10:20"
},
"CPU": { "Name": "Intel(R)...", "Cores": 8, "Logical": 16 },
"RAM": { "TotalGB": 32, "FreeGB": 12.5, "FreePercent": 39.1 },
"GPU": { "Resolution": "1920x1080", "RefreshRate": "60Hz", "MaxRefreshRate": "144Hz" },
"Monitor": { "Count": 2, "Monitors": [], "WinFormsScreens": [] },
"Storage": { "Volumes": [], "Disks": [] },
"Network": { "IPv4": [], "MACs": [], "Adapters": [] },
"Temps": { "ACPI_MaxC": 0, "Disk_MaxC": 0, "MaxC": 0 },
"Processes": [],
"Services": [],
"Software": [],
"EventLogs": [],
"Security": {}
}Observação: os exemplos acima ilustram o formato geral. A estrutura real pode conter campos adicionais conforme disponibilidade no host.
O dashboard utiliza cache-busting (bust()) + fetch com no-store para reduzir efeitos de cache em ambiente web.
Para ambientes com muitas máquinas, a rotina de carga pode ser ajustada para trabalhar com concorrência limitada (pool de requisições), evitando o carregamento totalmente sequencial e reduzindo o tempo total.
- Confirme que
manifest.jsonestá no mesmo diretório servido do dashboard. - Execute o coletor ao menos uma vez para gerar
manifest.jsonemachines\*.json. - Verifique permissões de escrita no
RepoRoot.
manifest.jsonvazio ou inexistente.- Falha de escrita no compartilhamento (ACL/SMB).
- Execução do script sem privilégios (coleta incompleta pode resultar em
Statuse dados reduzidos).
- O dashboard já inclui mecanismos anti-cache, mas proxies podem interferir.
- Recomenda-se servir o conteúdo via HTTP e evitar abrir via
file://.
- Se houver disputa de escrita (múltiplas máquinas ao mesmo tempo), o script usa
.manifest.lock. - Em caso de travamento por lock (antivírus, IO lento), ajuste
-LockMaxTriese-LockSleepMsou verifique bloqueios no compartilhamento.
- Mantenha o compartilhamento
RepoRootrestrito (somente leitura para usuários do dashboard; escrita apenas para contas necessárias). - Para execução via GPO, preferir contexto SYSTEM e ACL controlada para
Domain Computers. - Sempre valide em ambiente de teste antes de expandir para todo o parque.
- ScriptVersion: 2.4 (campo
ScriptVersionno JSON por host) - Última atualização deste README: 22/12/2025