#!/usr/bin/env bash set -euo pipefail HOST="${HOST:-192.168.88.108}" USER_NAME="${USER_NAME:-Admin}" PASS="${PASS:-P@ssw0rd!}" HERE="$(cd "$(dirname "$0")" && pwd)" SCRIPT="$HERE/../powershell/nirsoft-dump.ps1" DUMP_DIR="$HERE/dumps" LOG_DIR="$HERE/../../logs" STAMP="$(date +%Y%m%d-%H%M%S)" LOG="$LOG_DIR/nirsoft-dump-${HOST}-${STAMP}.log" mkdir -p "$DUMP_DIR" "$LOG_DIR" SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10) echo "[*] Uploading nirsoft-dump.ps1 to $USER_NAME@$HOST" sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" \ "$USER_NAME@$HOST:C:/Users/$USER_NAME/nirsoft-dump.ps1" >/dev/null echo "[*] Running dump on $HOST (this takes ~1-2 min), log -> $LOG" OUT=$(sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \ "powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/nirsoft-dump.ps1" \ 2>&1 | tee "$LOG") REMOTE_ZIP=$(echo "$OUT" | grep '^DUMP_ZIP:' | awk '{print $2}' | tr -d '\r') REMOTE_SIZE=$(echo "$OUT" | grep '^DUMP_SIZE:' | awk '{print $2}' | tr -d '\r') if [[ -z "$REMOTE_ZIP" ]]; then echo "[!] Could not find DUMP_ZIP line in output" >&2 exit 1 fi # Convert Windows path to forward-slash form for scp + basename REMOTE_ZIP_SCP=$(echo "$REMOTE_ZIP" | sed 's|\\|/|g') LOCAL_ZIP="$DUMP_DIR/$(basename "$REMOTE_ZIP_SCP")" echo "" echo "[*] Pulling zip back: $REMOTE_ZIP_SCP (${REMOTE_SIZE} bytes) -> $LOCAL_ZIP" sshpass -p "$PASS" scp "${SSH_OPTS[@]}" \ "$USER_NAME@$HOST:$REMOTE_ZIP_SCP" "$LOCAL_ZIP" >/dev/null # Clean up remote copy sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \ "del \"$REMOTE_ZIP\"" >/dev/null 2>&1 || true echo "" echo "[OK] Dump saved: $LOCAL_ZIP" echo " Unzip with: unzip -l \"$LOCAL_ZIP\" (to list)" echo " unzip \"$LOCAL_ZIP\" -d \"${LOCAL_ZIP%.zip}/\" (to extract)"