Instantáneas y deriva
Toda otra herramienta le dice cómo se ve un equipo ahora. La pregunta que de verdad tiene un administrador es qué es distinto de cuando funcionaba, y ningún Windows de serie la responde.
Qué contiene una instantánea
El equipo entero en un momento dado: cada servicio y cada controlador, con su tipo de inicio, cuenta, ruta de lanzamiento y argumentos, el hash y el firmante del archivo que ejecuta, sus dependencias y lo que depende de él, sus desencadenadores, sus privilegios requeridos, su tipo de SID y su descriptor de seguridad, además del nombre del equipo, la cuenta que la tomó y si esa cuenta era administrador.
bws snapshot create before.json --note "before the patch"
Es JSON con un campo por línea. Es deliberado: significa que una instantánea cabe en un repositorio y git diff la lee, de modo que la comparación de la propia herramienta no es la única forma de mirar una.
Archívela como lo que es. Una instantánea describe todo el equipo, hasta cada ruta de lanzamiento y cada descriptor de seguridad. Se escribe con los permisos que su directorio ya tiene, y la herramienta no restringe nada: un directorio que otras personas pueden leer es uno en el que pueden leer todo eso.
Después, preguntar qué es distinto
$ 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.
- La configuración y el estado de ejecución se informan por separado. Dos instantáneas tomadas con un día de diferencia difieren en lo que casualmente está en marcha, y casi nada de eso es deriva. Mezclado, el único renglón que importa, un tipo de inicio que alguien cambió, queda enterrado bajo cuarenta que no.
- Lo que no pudo compararse se lista, no se oculta. Un campo que una de las dos instantáneas nunca leyó, porque esa sesión no tenía derechos sobre él, sale como not compared bajo su entrada, y el resumen cuenta esas entradas. Así, una comparación que dice nada cambió significa que nada cambió en lo que ambos lados podían ver.
- Una instantánea con privilegios elevados frente a una sin ellos mentiría, informando como eliminadas entradas que nadie eliminó. Cada archivo registra si la cuenta que lo tomó era administrador, y la comparación lo dice.
- Dos archivos, no solo un archivo y este equipo. Tome una en preproducción y otra en producción y compárelas en cualquier parte: la respuesta a por qué difiere preproducción no necesita ninguno de los dos equipos presentes.
La ventana hace lo mismo en Audit.... Take snapshot... escribe el mismo archivo, con una nota si escribe una, y Compare with this machine... o Compare two snapshots... muestra qué cambió en lugar de la lista, una fila por campo, con todo lo que hace la comparación menos que exacta dicho sobre la tabla. Show la acota a las diferencias o a un campo, y Export... la escribe en un archivo CSV.
El código de salida es lo esencial
--exit-code termina con 5 cuando la configuración difiere: una entrada añadida o eliminada, o una configurada de otro modo. Un servicio que solo se detuvo o inició por sí mismo se informa y no cuenta, y tampoco las copias por usuario que Windows hace para cada sesión iniciada, que se dejan fuera y se cuentan. No es un fallo (encontrar deriva es para lo que sirve esta herramienta, y encontrarla no es un fallo), por lo que tiene un número propio en lugar de tomar prestado el que significa que algo fue mal.
# el día en que el equipo entra en servicio
bws snapshot create C:\baselines\web01.json --note "after the build"
# cada noche, desde una tarea programada
bws snapshot diff C:\baselines\web01.json --live --exit-code --json > C:\logs\drift.json
# 0 - sin deriva de configuración
# 5 - la configuración se desvió, y drift.json dice en qué
# 3 - se ejecutó y no pudo leerlo todo, así que la respuesta es parcial
Ese es todo el mecanismo: una línea base tomada cuando se sabía que el equipo estaba bien, y una pregunta hecha cada noche. Si la primera noche responde 5, alguien se entera la primera noche y no la mañana en que algo se rompe.