Instantâneos e deriva
Toda outra ferramenta diz como uma máquina está agora. A pergunta que um administrador realmente tem é o que é diferente de quando funcionava - e nenhum Windows de fábrica a responde.
O que um instantâneo guarda
A máquina inteira em um momento: cada serviço e cada driver, com seu tipo de inicialização, conta, caminho de lançamento e argumentos, o hash e o signatário do arquivo que ele executa, suas dependências e o que depende dele, seus gatilhos, seus privilégios exigidos, seu tipo de SID e seu descritor de segurança - mais o nome da máquina, a conta que o fez e se essa conta era administradora.
bws snapshot create before.json --note "before the patch"
É JSON com um campo por linha. Isso é de propósito: significa que um instantâneo cabe em um repositório e o git diff o lê, de modo que a comparação da própria ferramenta não é a única maneira de olhar um.
Arquive-o como o que ele é. Um instantâneo descreve a máquina inteira, até cada caminho de lançamento e cada descritor de segurança. Ele é gravado com as permissões que o diretório dele já tem, e a ferramenta não restringe nada - então um diretório que outras pessoas podem ler é um em que elas podem ler tudo isso.
Depois, perguntar o que é diferente
$ bws snapshot diff before.json --live --exit-code
Changed (2):
Spooler Print Spooler
startType: Manual -> Automatic
status: Stopped -> Running (running state, not configuration)
wlidsvc Microsoft Account Sign-in Assistant
status: Stopped -> Running (running state, not configuration)
Added 0, removed 0, changed 2. Fields differing: 1 in configuration, 2 in running state.
- Configuração e estado de execução são informados separadamente. Dois instantâneos feitos com um dia de intervalo diferem no que por acaso está em execução, e quase nada disso é deriva. Misturada, a única linha que importa - um tipo de inicialização que alguém mudou - fica enterrada sob quarenta que não importam.
- O que não pôde ser comparado é listado, não escondido. Um campo que um dos dois instantâneos nunca leu, porque aquela sessão não tinha direitos sobre ele, sai como not compared sob a sua entrada, e o resumo conta essas entradas. Assim, uma comparação que diz nada mudou significa que nada mudou no que os dois lados podiam ver.
- Um instantâneo com privilégios elevados contra um sem eles mentiria, informando como removidas entradas que ninguém removeu. Cada arquivo registra se a conta que o fez era administradora, e a comparação diz isso.
- Dois arquivos, não só um arquivo e esta máquina. Faça um na homologação e outro em produção e compare-os em qualquer lugar - a resposta para por que a homologação difere não precisa de nenhuma das duas máquinas presentes.
A janela faz o mesmo em Audit.... Take snapshot... grava o mesmo arquivo, com uma nota se você digitar uma, e Compare with this machine... ou Compare two snapshots... mostra o que mudou no lugar da lista, uma linha por campo, com tudo o que torna a comparação menos que exata dito acima da tabela. Show a restringe às diferenças ou a um campo, e Export... a grava em um arquivo CSV.
O código de saída é o ponto
--exit-code termina com 5 quando a configuração difere - uma entrada adicionada ou removida, ou uma configurada de outro jeito. Um serviço que apenas parou ou iniciou sozinho é informado e não conta, e nem as cópias por usuário que o Windows faz para cada sessão aberta, que são deixadas de fora e contadas. Não é uma falha - encontrar deriva é para o que esta ferramenta serve, e encontrá-la não é uma falha - e por isso ele tem um número próprio em vez de tomar emprestado o que significa que algo deu errado.
# o dia em que a máquina entra em serviço
bws snapshot create C:\baselines\web01.json --note "after the build"
# toda noite, a partir de uma tarefa agendada
bws snapshot diff C:\baselines\web01.json --live --exit-code --json > C:\logs\drift.json
# 0 - sem deriva de configuração
# 5 - a configuração se desviou, e drift.json diz o quê
# 3 - rodou e não conseguiu ler tudo, então a resposta é parcial
Esse é todo o mecanismo: uma linha de base feita quando se sabia que a máquina estava boa, e uma pergunta feita toda noite. Se na primeira noite ele responder 5, alguém descobre na primeira noite e não na manhã em que algo quebrar.