Проблемы с выводом индикатора выполнения экспорта сценария BASH и Wevtutil не удалось экспортировать - PullRequest
0 голосов
/ 16 января 2020

Основное назначение скрипта - экспорт файлов журналов для обработки данных. Кажется, что все работает, ожидают 3 основных вопроса

  1. Начальное начало печати индикатора выполнения перекошено. Где самое правильное «]» изначально напечатано в неправильной строке. Строка выше, где это должно быть.

2. Строка загрузки, показывающая ход выполнения скрипта (какой файл извлекается и экспортируется), кажется, искажается в окончательном выводе скрипта, как кажется, две отдельные строки наедине с остатком

enter image description here

3. «Не удалось экспортировать журнал ...» - это ошибка, полученная во время / после запуска сценария (хотя я предполагаю, что это возможно из-за проблемы с привилегиями.)

По существу, в конце скрипта я бы хотел, чтобы они были одной чистой полосой загрузки, показывающей, что скрипт выполнил свою задачу. Кроме того, если возможно, я хотел бы разработать какую-то условную функцию, которая бы информировала пользователя, если на самом деле возникла проблема # 3, «Не удалось экспортировать журнал ...» или «Невозможно получить доступ в ...», и сообщить пользователь в конце скрипта. Таким образом, пользователь будет знать, чтобы повысить привилегии или работать в качестве администратора, а затем повторите попытку.

Надеюсь, здесь нет ничего странного в том коде, который у меня есть до сих пор ...

#!/bin/bash
#
# Description: Gather windows log file copies into folder--also allows for transfer if the user would like
#
# Usage:
# winlogs.sh [-z]
#       -z Tar and zip the output

TGZ=0
if (( $# > 0 ))
then
        if [[ ${1:0:2} == '-z' ]]
        then
                TGZ=1
        shift
        fi
fi

SYSNAM=$(hostname)
LOGDIR=${1:-/tmp/${SYSNAM}_logs}

mkdir -p $LOGDIR
cd ${LOGDIR} || exit -2

tput sc            # save pointer/reference to current terminal line
erase=$(tput el)   # save control code for 'erase (rest of) line'

# init some variables; get a count of the number of files so we can pre-calculate the total length of our status bar

modcount=20
logcount=$( wevtutil el | wc -l)


# generate a string of filecount/20+1 spaces (35+1 for my particular \bin)

barspace=

for i in $(seq 1 $(( ${logcount} / ${modcount} + 1 )) )
do
        barspace="${barspace} "
done

barhash=           # start with no #'s for this variable

logcount=0        # we'll re-use this variable to keep track of # of files processed so need to reset

while read -r filename
do
        logcount=$((logcount+1))

        tput rc    # return cursor to previously saved terminal line (tput sc)

        # print filename (1st line of output); if shorter than previous filename we need to erase rest of line

        filename="${filename%$'\r'}"
        printf "log files: ${filename}${erase}\n"
        printf "\n"


        while read -r EXPORT
        do

                SAFNAM="${filename// /_}"
                SAFNAM="${SAFNAM//\//-}"
                #wevtutil epl "$filename" "${SYSNAM}_${SAFNAM}.evtx" | sort -V


        done < <( wevtutil epl "$filename" "${SYSNAM}_${SAFNAM}.evtx" | sort -V )

        # print our status bar (2nd line of output) on the first and every ${modcount} pass through loop;

        if   [ ${logcount} -eq 1 ]
        then
                printf "[${barhash}${barspace}]\n"

        elif [[ $((logcount % ${modcount} )) -eq 0 ]]
        then
                # for every ${modcount}th file we ...

                barspace=${barspace:1:100000}         # strip a space from barspace
                barhash="${barhash}#"                 # add a '#' to barhash
                printf "[${barhash}${barspace}]\n"    # print our new status bar

        fi


done < <(wevtutil el | sort -V) #&& ( wevtutil epl "$filename" "${SYSNAM}_${SAFNAM}.evtx" | sort -V )

# finish up the status bar (should only be 1 space left to 'convert' to a '#')
#sed '/Failed/I,d' && sed '/the file exsists/I, d'

if (( TGZ == 1 ))
then
    tar -cvzf ${SYSNAM}_logs.tgz *.evtx
fi

tput rc

printf "Log Search/Retrieval: -- Complete. -- \n"

if [ ${#barspace} -gt 0 ]
then
        barspace=${barspace:1:100000}
        barhash="${barhash}#"

fi

printf "[${barhash}${barspace}]\n"
...