Então, depois de mais algumas tentativas, descobri que o ID da sessão é removido quando o usuário é desconectado. Em vez de inserir uma guia ou semelhante como um espaço reservado, ela simplesmente insere espaços. Então, quando o AWK imprime, a coluna imprime as informações erradas. Abaixo está o script final que é executado como um trabalho agendado no Windows Server.
for user in user1 user2 user3 ;
do
id=$(query user $user 2>> /dev/null | awk '{ print $3 }' | sed -e '/ID/ d')
if [[ "$id" =~ ^[1-9][0-9]?$ ]]; then
logoff $id
date >> /cygdrive/c/log_off.log
echo "$user was logged off" >> /cygdrive/c/log_off.log
else
id2=$(query user $user 2>> /dev/null | awk '{ print $2 }' | sed -e '/SESSIONNAME/ d')
if [[ "$id2" =~ ^[1-9][0-9]?$ ]]; then
logoff $id2
date >> /cygdrive/c/log_off.log
echo "$user was logged off" >> /cygdrive/c/log_off.log
fi
fi
done