Initial commit

This commit is contained in:
2026-04-24 17:41:53 +08:00
commit 7105e8b165
94 changed files with 8141 additions and 0 deletions

28
scripts/ssh/activate-windows.sh Executable file
View File

@@ -0,0 +1,28 @@
#!/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/activate-windows.ps1"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/activate-windows-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] 上傳 Windows 啟用腳本到 $USER_NAME@$HOST"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" \
"$USER_NAME@$HOST:C:/Users/$USER_NAME/activate-windows.ps1" >/dev/null
echo "[*] 執行 Windows 啟用程序log -> $LOG"
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/activate-windows.ps1" \
2>&1 | tee "$LOG"
echo ""
echo "[*] 完成。紀錄已儲存: $LOG"

28
scripts/ssh/apply-ui-to-user.sh Executable file
View File

@@ -0,0 +1,28 @@
#!/usr/bin/env bash
set -euo pipefail
HOST="${HOST:-192.168.88.108}"
USER_NAME="${USER_NAME:-Admin}"
PASS="${PASS:-P@ssw0rd!}"
TARGET_USER="${TARGET_USER:-user}"
HERE="$(cd "$(dirname "$0")" && pwd)"
SCRIPT="$HERE/../powershell/apply-ui-to-user.ps1"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/apply-ui-to-user-${HOST}-${TARGET_USER}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] Uploading apply-ui-to-user.ps1 to $USER_NAME@$HOST"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" \
"$USER_NAME@$HOST:C:/Users/$USER_NAME/apply-ui-to-user.ps1" >/dev/null
echo "[*] Applying UI settings to '$TARGET_USER' on $HOST, log -> $LOG"
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/apply-ui-to-user.ps1 -TargetUser $TARGET_USER" \
2>&1 | tee "$LOG"
echo "[*] Done. Saved: $LOG"

36
scripts/ssh/check-winrm.sh Executable file
View File

@@ -0,0 +1,36 @@
#!/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/check-winrm.ps1"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/check-winrm-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] Checking WinRM status on $USER_NAME@$HOST"
echo "[*] Uploading WinRM check script..."
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" "$USER_NAME@$HOST:C:/Users/$USER_NAME/check-winrm.ps1" >/dev/null
echo "[*] Running WinRM configuration check, log -> $LOG"
echo "=================================================================="
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/check-winrm.ps1" \
2>&1 | tee "$LOG"
echo "=================================================================="
echo "[*] WinRM check completed. Log saved: $LOG"
echo ""
echo "Next steps based on results:"
echo " ✅ If WinRM is ready -> Create WinRM connection scripts"
echo " ⚠️ If partially ready -> Run enable-winrm.sh to fix configuration"
echo " ❌ If not configured -> Run enable-winrm.sh to set up WinRM"

28
scripts/ssh/configure-ime.sh Executable file
View File

@@ -0,0 +1,28 @@
#!/usr/bin/env bash
set -euo pipefail
HOST="${HOST:-192.168.88.108}"
USER_NAME="${USER_NAME:-Admin}"
PASS="${PASS:-P@ssw0rd!}"
TARGET_USER="${TARGET_USER:-User}"
HERE="$(cd "$(dirname "$0")" && pwd)"
SCRIPT="$HERE/../powershell/configure-ime.ps1"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/configure-ime-${HOST}-${TARGET_USER}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] Uploading configure-ime.ps1 to $USER_NAME@$HOST"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" \
"$USER_NAME@$HOST:C:/Users/$USER_NAME/configure-ime.ps1" >/dev/null
echo "[*] Configuring IME for '$TARGET_USER' on $HOST, log -> $LOG"
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/configure-ime.ps1 -TargetUser $TARGET_USER" \
2>&1 | tee "$LOG"
echo "[*] Done. Saved: $LOG"

View File

@@ -0,0 +1,31 @@
#!/usr/bin/env bash
set -euo pipefail
HOST="${HOST:-pc-74269}"
USER_NAME="${USER_NAME:-Admin}"
PASS="${PASS:-P@ssw0rd!}"
HERE="$(cd "$(dirname "$0")" && pwd)"
SCRIPT="$HERE/../powershell/debug-winrm-network.ps1"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/debug-winrm-network-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] Debugging WinRM network connectivity on $USER_NAME@$HOST"
echo "[*] Uploading diagnostic script..."
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" "$USER_NAME@$HOST:C:/Users/$USER_NAME/debug-winrm-network.ps1" >/dev/null
echo "[*] Running WinRM network diagnostics, log -> $LOG"
echo "=================================================================="
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/debug-winrm-network.ps1" \
2>&1 | tee "$LOG"
echo "=================================================================="
echo "[*] WinRM network diagnostics completed. Log saved: $LOG"

47
scripts/ssh/enable-winrm.sh Executable file
View File

@@ -0,0 +1,47 @@
#!/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/enable-winrm.ps1"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/enable-winrm-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] Enabling WinRM on $USER_NAME@$HOST"
echo "[*] This will configure PowerShell Remoting and WinRM service"
echo ""
echo "⚠️ WARNING: This script will enable Basic authentication and unencrypted"
echo " communication for testing. Consider security implications for production."
echo ""
read -p "Continue? [y/N] " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Aborted."
exit 1
fi
echo "[*] Uploading WinRM enablement script..."
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" "$USER_NAME@$HOST:C:/Users/$USER_NAME/enable-winrm.ps1" >/dev/null
echo "[*] Running WinRM configuration (requires Administrator), log -> $LOG"
echo "=================================================================="
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/enable-winrm.ps1" \
2>&1 | tee "$LOG"
echo "=================================================================="
echo "[*] WinRM configuration completed. Log saved: $LOG"
echo ""
echo "Next steps:"
echo " 1. Run ./check-winrm.sh to verify configuration"
echo " 2. Test WinRM connection from this machine"
echo " 3. If successful, update existing scripts to use WinRM"

View File

@@ -0,0 +1,27 @@
#!/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/firewall-allow-ssh.ps1"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/firewall-allow-ssh-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] Uploading firewall-allow-ssh.ps1 to $USER_NAME@$HOST"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" \
"$USER_NAME@$HOST:C:/Users/$USER_NAME/firewall-allow-ssh.ps1" >/dev/null
echo "[*] Running on $HOST, log -> $LOG"
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/firewall-allow-ssh.ps1" \
2>&1 | tee "$LOG"
echo "[*] Done. Saved: $LOG"

31
scripts/ssh/fix-winrm.sh Executable file
View File

@@ -0,0 +1,31 @@
#!/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/fix-winrm.ps1"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/fix-winrm-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] Fixing remaining WinRM configuration issues on $USER_NAME@$HOST"
echo "[*] Uploading fix script..."
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" "$USER_NAME@$HOST:C:/Users/$USER_NAME/fix-winrm.ps1" >/dev/null
echo "[*] Running WinRM configuration fixes, log -> $LOG"
echo "=================================================================="
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/fix-winrm.ps1" \
2>&1 | tee "$LOG"
echo "=================================================================="
echo "[*] WinRM fixes completed. Log saved: $LOG"

30
scripts/ssh/install-apps.sh Executable file
View File

@@ -0,0 +1,30 @@
#!/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/install-apps.ps1"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/install-apps-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] 上傳應用程式安裝腳本到 $USER_NAME@$HOST"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" \
"$USER_NAME@$HOST:C:/Users/$USER_NAME/install-apps.ps1" >/dev/null
echo "[*] 執行應用程式安裝 (AnyDesk, LINE, Chrome, 7zip, Adobe Reader)"
echo " 這可能需要 5-15 分鐘,依據網路速度而定"
echo " Log -> $LOG"
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/install-apps.ps1" \
2>&1 | tee "$LOG"
echo ""
echo "[*] 安裝完成。紀錄已儲存: $LOG"

27
scripts/ssh/install-cports.sh Executable file
View File

@@ -0,0 +1,27 @@
#!/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/install-cports.ps1"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/install-cports-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] Uploading install-cports.ps1 to $USER_NAME@$HOST"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" \
"$USER_NAME@$HOST:C:/Users/$USER_NAME/install-cports.ps1" >/dev/null
echo "[*] Running on $HOST, log -> $LOG"
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/install-cports.ps1" \
2>&1 | tee "$LOG"
echo "[*] Done. Saved: $LOG"

29
scripts/ssh/install-nirsoft.sh Executable file
View File

@@ -0,0 +1,29 @@
#!/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/install-nirsoft.ps1"
CONFIG="$HERE/nirsoft-config.json"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/install-nirsoft-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10 -o ServerAliveInterval=30)
echo "[*] Uploading install-nirsoft.ps1 and nirsoft-config.json"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" "$CONFIG" \
"$USER_NAME@$HOST:C:/Users/$USER_NAME/" >/dev/null
echo "[*] Running on $HOST — this downloads ~16 archives, may take a few minutes"
echo "[*] Log -> $LOG"
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/install-nirsoft.ps1" \
2>&1 | tee "$LOG"
echo "[*] Done. Saved: $LOG"

27
scripts/ssh/install-telegram.sh Executable file
View File

@@ -0,0 +1,27 @@
#!/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/install-telegram.ps1"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/install-telegram-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] Uploading install-telegram.ps1 to $USER_NAME@$HOST"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" \
"$USER_NAME@$HOST:C:/Users/$USER_NAME/install-telegram.ps1" >/dev/null
echo "[*] Running installer on $HOST, log -> $LOG"
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/install-telegram.ps1" \
2>&1 | tee "$LOG"
echo "[*] Done. Saved: $LOG"

View File

@@ -0,0 +1,27 @@
#!/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/install-thunderbird.ps1"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/install-thunderbird-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] Uploading install-thunderbird.ps1 to $USER_NAME@$HOST"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" \
"$USER_NAME@$HOST:C:/Users/$USER_NAME/install-thunderbird.ps1" >/dev/null
echo "[*] Running installer on $HOST, log -> $LOG"
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/install-thunderbird.ps1" \
2>&1 | tee "$LOG"
echo "[*] Done. Saved: $LOG"

52
scripts/ssh/nirsoft-dump.sh Executable file
View File

@@ -0,0 +1,52 @@
#!/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)"

26
scripts/ssh/recon.sh Executable file
View File

@@ -0,0 +1,26 @@
#!/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/recon.ps1"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/recon-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] Uploading recon.ps1 to $USER_NAME@$HOST"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" "$USER_NAME@$HOST:C:/Users/$USER_NAME/recon.ps1" >/dev/null
echo "[*] Running recon on $HOST, log -> $LOG"
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/recon.ps1" \
2>&1 | tee "$LOG"
echo "[*] Done. Saved: $LOG"

28
scripts/ssh/remove-apps.sh Executable file
View File

@@ -0,0 +1,28 @@
#!/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/remove-apps.ps1"
CONFIG="$HERE/remove-apps-config.json"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/remove-apps-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] Uploading remove-apps.ps1 and remove-apps-config.json"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" "$CONFIG" \
"$USER_NAME@$HOST:C:/Users/$USER_NAME/" >/dev/null
echo "[*] Running on $HOST, log -> $LOG"
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/remove-apps.ps1" \
2>&1 | tee "$LOG"
echo "[*] Done. Saved: $LOG"

View File

@@ -0,0 +1,33 @@
#!/usr/bin/env bash
set -euo pipefail
HOST="${HOST:-192.168.88.108}"
USER_NAME="${USER_NAME:-Admin}"
PASS="${PASS:-P@ssw0rd!}"
MODE="${MODE:-Apply}" # Apply | Revert
HERE="$(cd "$(dirname "$0")" && pwd)"
SCRIPT="$HERE/../powershell/remove-windows-ai.ps1"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/remove-windows-ai-${HOST}-${MODE}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10 -o ServerAliveInterval=30)
echo "[*] Uploading remove-windows-ai.ps1 to $USER_NAME@$HOST"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" \
"$USER_NAME@$HOST:C:/Users/$USER_NAME/remove-windows-ai.ps1" >/dev/null
echo "[*] Mode=$MODE. Running on $HOST — this can take several minutes"
echo "[*] Log -> $LOG"
# Force Windows PowerShell 5.1 (powershell.exe), not pwsh 7.
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/remove-windows-ai.ps1 -Mode $MODE" \
2>&1 | tee "$LOG"
echo "[*] Done. Saved: $LOG"
echo ""
echo "NOTE: A reboot is recommended. Reboot with:"
echo " sshpass -p '$PASS' ssh $USER_NAME@$HOST 'shutdown /r /t 5'"

View File

@@ -0,0 +1,27 @@
#!/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/rename-hide-accounts.ps1"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/rename-hide-accounts-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] Uploading rename-hide-accounts.ps1 to $USER_NAME@$HOST"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" \
"$USER_NAME@$HOST:C:/Users/$USER_NAME/rename-hide-accounts.ps1" >/dev/null
echo "[*] Running on $HOST, log -> $LOG"
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/rename-hide-accounts.ps1" \
2>&1 | tee "$LOG"
echo "[*] Done. Saved: $LOG"

View File

@@ -0,0 +1,33 @@
#!/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/setup-thunderbird.ps1"
CONFIG="$HERE/thunderbird-config.json"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/setup-thunderbird-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
if [[ ! -f "$CONFIG" ]]; then
echo "[!] Missing $CONFIG — please edit thunderbird-config.json first" >&2
exit 1
fi
echo "[*] Uploading setup-thunderbird.ps1 and thunderbird-config.json"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" "$CONFIG" \
"$USER_NAME@$HOST:C:/Users/$USER_NAME/" >/dev/null
echo "[*] Running setup on $HOST, log -> $LOG"
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/setup-thunderbird.ps1" \
2>&1 | tee "$LOG"
echo "[*] Done. Saved: $LOG"

View File

@@ -0,0 +1,99 @@
#!/usr/bin/env bash
set -euo pipefail
HOST="${HOST:-192.168.88.108}"
USER_NAME="${USER_NAME:-Admin}"
PASS="${PASS:-P@ssw0rd!}"
echo "=== Testing WinRM Connection to $HOST ==="
echo ""
# Test 1: Check if PowerShell Core is installed
echo "[1/4] Checking PowerShell Core availability..."
if command -v pwsh >/dev/null 2>&1; then
echo "✅ PowerShell Core found: $(pwsh --version)"
else
echo "❌ PowerShell Core not found"
echo "Install with: brew install powershell"
exit 1
fi
# Test 2: Test basic network connectivity to WinRM port
echo ""
echo "[2/4] Testing network connectivity to WinRM port 5985..."
if nc -z "$HOST" 5985; then
echo "✅ Port 5985 is reachable"
else
echo "❌ Cannot reach port 5985 on $HOST"
exit 1
fi
# Test 3: Test HTTP WinRM endpoint with curl
echo ""
echo "[3/4] Testing WinRM HTTP endpoint..."
WINRM_RESPONSE=$(curl -s -w "%{http_code}" -o /dev/null --max-time 10 \
"http://$HOST:5985/wsman" \
-H "Content-Type: application/soap+xml;charset=UTF-8" \
-H "SOAPAction: http://schemas.xmlsoap.org/ws/2004/09/enumeration/Enumerate" \
--data '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Header/><soap:Body><wsen:Enumerate xmlns:wsen="http://schemas.xmlsoap.org/ws/2004/09/enumeration"><wsen:Filter xmlns:wsman="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd">SELECT * FROM Win32_Service</wsen:Filter></wsen:Enumerate></soap:Body></soap:Envelope>' 2>/dev/null || echo "000")
if [ "$WINRM_RESPONSE" = "401" ]; then
echo "✅ WinRM endpoint responding (401 = authentication required, expected)"
elif [ "$WINRM_RESPONSE" = "500" ]; then
echo "✅ WinRM endpoint responding (500 = server error, but WinRM is there)"
else
echo "⚠️ WinRM endpoint response: $WINRM_RESPONSE (may still work with PowerShell)"
fi
# Test 4: Test PowerShell remoting
echo ""
echo "[4/4] Testing PowerShell remoting session..."
pwsh -c "
try {
\$secpass = ConvertTo-SecureString '$PASS' -AsPlainText -Force
\$cred = New-Object System.Management.Automation.PSCredential('$USER_NAME', \$secpass)
Write-Host 'Attempting to create PowerShell session...'
\$sessionOption = New-PSSessionOption -SkipCACheck -SkipCNCheck
\$session = New-PSSession -ComputerName '$HOST' -Port 5985 -Credential \$cred -UseSSL:\$false -SessionOption \$sessionOption -ErrorAction Stop
Write-Host '✅ PowerShell remoting session created successfully'
# Test running a simple command
\$result = Invoke-Command -Session \$session -ScriptBlock {
@{
ComputerName = \$env:COMPUTERNAME
UserName = \$env:USERNAME
PSVersion = \$PSVersionTable.PSVersion.ToString()
CurrentTime = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
}
}
Write-Host 'Remote session info:'
Write-Host ' Computer:' \$result.ComputerName
Write-Host ' User:' \$result.UserName
Write-Host ' PowerShell:' \$result.PSVersion
Write-Host ' Time:' \$result.CurrentTime
Remove-PSSession \$session
Write-Host '✅ Session closed successfully'
} catch {
Write-Host '❌ PowerShell remoting failed:' \$_.Exception.Message
Write-Host ''
Write-Host 'Common causes:'
Write-Host ' - AllowUnencrypted=false (current setting on target)'
Write-Host ' - Firewall blocking connections'
Write-Host ' - Network connectivity issues'
Write-Host ' - Authentication problems'
exit 1
}
"
echo ""
echo "🎉 All WinRM connectivity tests passed!"
echo ""
echo "WinRM is ready for use. You can now:"
echo " 1. Create WinRM-based versions of existing scripts"
echo " 2. Use PowerShell remoting for direct command execution"
echo " 3. Compare performance with SSH-based approach"

View File

@@ -0,0 +1,27 @@
#!/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/verify-ai-removed.ps1"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/verify-ai-removed-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] Uploading verify-ai-removed.ps1 to $USER_NAME@$HOST"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" \
"$USER_NAME@$HOST:C:/Users/$USER_NAME/verify-ai-removed.ps1" >/dev/null
echo "[*] Running verify on $HOST, log -> $LOG"
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/verify-ai-removed.ps1" \
2>&1 | tee "$LOG"
echo "[*] Done. Saved: $LOG"

27
scripts/ssh/verify-debloat.sh Executable file
View File

@@ -0,0 +1,27 @@
#!/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/verify-debloat.ps1"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/verify-debloat-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] Uploading verify-debloat.ps1 to $USER_NAME@$HOST"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" \
"$USER_NAME@$HOST:C:/Users/$USER_NAME/verify-debloat.ps1" >/dev/null
echo "[*] Running verify on $HOST, log -> $LOG"
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/verify-debloat.ps1" \
2>&1 | tee "$LOG"
echo "[*] Done. Saved: $LOG"

34
scripts/ssh/win11debloat.sh Executable file
View File

@@ -0,0 +1,34 @@
#!/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/win11debloat.ps1"
CONFIG="$HERE/win11debloat-config.json"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/win11debloat-${HOST}-${STAMP}.log"
mkdir -p "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10 -o ServerAliveInterval=30)
if [[ ! -f "$CONFIG" ]]; then
echo "[!] $CONFIG missing" >&2
exit 1
fi
echo "[*] Uploading win11debloat.ps1 and win11debloat-config.json"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" "$CONFIG" \
"$USER_NAME@$HOST:C:/Users/$USER_NAME/" >/dev/null
echo "[*] Running on $HOST — this may take several minutes"
echo "[*] Log -> $LOG"
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/win11debloat.ps1" \
2>&1 | tee "$LOG"
echo "[*] Done. Saved: $LOG"