1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
| #!/bin/bash
# Windows 主机系统信息收集脚本 # 颜色设置 echo -e "\e[32m"
echo "=== Windows主机系统信息 ==="
# 主机名和用户名 echo "主机名: $(hostname)" echo "用户名: ${USERNAME:-$USER}"
# 网络地址信息 echo "=== 网络地址信息 ==="
# 公网IP if command -v curl &>/dev/null; then public_ip=$(curl -s --max-time 5 ifconfig.me 2>/dev/null || curl -s --max-time 5 ipinfo.io/ip 2>/dev/null || echo "无法获取") else public_ip="无法获取 (curl未安装)" fi echo "公网IP地址: $public_ip"
# IP地理位置 if command -v curl &>/dev/null && [[ "$public_ip" != "无法获取" && "$public_ip" != "无法获取 (curl未安装)" ]]; then echo -n "IP地理位置: " location=$(curl -s --max-time 3 "ipinfo.io/$public_ip/json" 2>/dev/null | grep -E '"city"|"region"|"country"' | \ sed 's/.*: "//;s/",//' | tr '\n' ' ' | sed 's/ $//') [[ -n "$location" ]] && echo "$location" || echo "未知" else echo "IP地理位置: 需要网络连接" fi
# 内网IP地址 echo "内网IP地址:" ipconfig 2>/dev/null | grep -E "(IPv4|IP.v4)" | grep -v "169.254." | while read line; do interface=$(echo "$line" | cut -d' ' -f1 | tr -d ':') ip=$(echo "$line" | cut -d: -f2 | sed 's/^[ \t]*//') [[ -n "$ip" ]] && echo " $interface: $ip" done
# 系统详细信息 echo "=== 系统详细信息 ==="
if command -v systeminfo &>/dev/null; then sysinfo=$(systeminfo 2>/dev/null)
# 操作系统版本 os_version=$(echo "$sysinfo" | grep "OS Name" | head -1 | cut -d: -f2 | sed 's/^[ \t]*//') echo "操作系统版本: $os_version" echo "内核版本: $(uname -r)" # 启动设备 boot_device=$(echo "$sysinfo" | grep -i "Boot Device" | head -1 | cut -d: -f2- | sed 's/^[ \t]*//') [[ -n "$boot_device" ]] && echo "启动设备: $boot_device" # 时区 time_zone=$(echo "$sysinfo" | grep -i "Time Zone" | head -1 | cut -d: -f2- | sed 's/^[ \t]*//') [[ -n "$time_zone" ]] && echo "时区: $time_zone" # 系统运行时间 boot_time=$(echo "$sysinfo" | grep -i "System Boot Time" | head -1 | cut -d: -f2- | sed 's/^[ \t]*//') if [[ -n "$boot_time" ]]; then echo "系统启动时间: $boot_time" # 计算运行时间 boot_date=$(date -d "$boot_time" "+%s" 2>/dev/null || echo "") if [[ -n "$boot_date" ]]; then current_date=$(date "+%s") uptime_seconds=$((current_date - boot_date)) days=$((uptime_seconds / 86400)) hours=$(( (uptime_seconds % 86400) / 3600 )) minutes=$(( (uptime_seconds % 3600) / 60 )) echo "系统运行时间: ${days}天 ${hours}小时 ${minutes}分钟" fi fi else echo "操作系统版本: 无法获取 (systeminfo未找到)" echo "内核版本: $(uname -r)" fi
# CPU信息 echo "=== CPU信息 ==="
if command -v wmic &>/dev/null; then cpu_info=$(wmic cpu get name 2>/dev/null | tail -2 | head -1 | sed 's/^[ \t]*//;s/[ \t]*$//') [[ -n "$cpu_info" && ! "$cpu_info" =~ "Name" ]] && echo "CPU型号: $cpu_info" || echo "CPU型号: 无法获取" else echo "CPU型号: 无法获取 (wmic未找到)" fi
# 内存信息 echo "=== 内存信息 ==="
if command -v wmic &>/dev/null; then memory_bytes=$(wmic computersystem get TotalPhysicalMemory 2>/dev/null | grep '[0-9]' | awk '{print $1}') if [[ -n "$memory_bytes" ]]; then memory_gb=$(echo "$memory_bytes" | awk '{printf "%.2f", $1/1024/1024/1024}') echo "内存大小: ${memory_gb}GB"
# 获取可用内存 free_bytes=$(wmic OS get FreePhysicalMemory 2>/dev/null | grep '[0-9]' | awk '{print $1 * 1024}') if [[ -n "$free_bytes" ]]; then free_gb=$(echo "$free_bytes" | awk '{printf "%.2f", $1/1024/1024/1024}') used_gb=$(echo "$memory_bytes $free_bytes" | awk '{printf "%.2f", ($1-$2)/1024/1024/1024}') echo "内存使用: 已用 ${used_gb}GB / 可用 ${free_gb}GB" fi else echo "内存大小: 无法获取" fi else echo "内存大小: 无法获取 (wmic未找到)" fi
# 磁盘信息 echo "=== 磁盘分区信息 ==="
echo "逻辑磁盘信息:" if command -v wmic &>/dev/null; then wmic logicaldisk where "drivetype=3" get deviceid,size,freespace,volumename /format:list 2>/dev/null | \ tr -d '\r' | awk -F'=' ' /DeviceID/ {drive=$2} /Size/ {size=$2/1024/1024/1024} /FreeSpace/ {free=$2/1024/1024/1024; used=size-free} /VolumeName/ {volumename=$2} /^$/ && drive { if (volumename == "") volumename="本地磁盘"; printf " %s (%s): 总大小=%.2fGB, 已用=%.2fGB, 可用=%.2fGB\n", drive, volumename, size, used, free; drive=""; volumename="" } ' else echo " WMIC命令不可用" fi
# 使用DF命令查看挂载点(备选方法) if command -v df &>/dev/null; then echo -e "\n使用DF命令查看挂载点:" df -h 2>/dev/null | grep -E "^[A-Z]:" | while read line; do echo " $line" | awk '{ printf " %s: 总大小=%s, 已用=%s, 可用=%s, 使用率=%s", $1, $2, $3, $4, $5; if (NF > 5) { printf ", 挂载点="; for(i=6;i<=NF;i++) printf "%s ", $i; } print "" }' done fi
echo -e "\n=== 物理磁盘信息 ===" if command -v wmic &>/dev/null; then wmic diskdrive get model,size /format:list 2>/dev/null | \ tr -d '\r' | awk -F'=' ' /Model/ {model=$2} /Size/ {size=$2/1024/1024/1024; printf " %s: %.2fGB\n", model, size} ' | head -10 else echo " WMIC命令不可用" fi
# 用户信息 echo -e "\n=== 当前登录用户 ===" echo " 当前用户: ${USERNAME:-$USER}"
echo -e "\e[0m"
|