golang基于WMI获取所有外接硬盘(USB,移动硬盘)信息

golang基于WMI获取所有外接硬盘(USB,移动硬盘)信息

package mainimport ("fmt""regexp""github.com/StackExchange/wmi""github.com/shirou/gopsutil/v3/disk"
)// 定义 WMI 类结构体
type Win32_LogicalDiskToPartition struct {Antecedent stringDependent  string
}// 逻辑盘
type Win32_LogicalDisk struct {DeviceID    string `json:"deviceId"`FreeSpace   string `json:"freeSpace"`FileSystem  string `json:"fileSystem"`Name        string `json:"name"`Size        string `json:"size"`Description string `json:"description"`DriveType   int    `json:"driveType"`VolumeName  string `json:"VolumeName"`
}
type Win32_DiskDriveToDiskPartition struct {Antecedent stringDependent  string
}
type Win32_DiskDrive struct {DeviceID  stringMediaType string
}type DiskInfo struct {DeviceID    string `json:"deviceId"`FreeSpace   string `json:"freeSpace"`FileSystem  string `json:"fileSystem"`Name        string `json:"name"`Size        string `json:"size"`Description string `json:"description"`VolumeName  string `json:"VolumeName"`
}func GetDiskInfo() map[string]string {var drives []Win32_DiskDrivewmi.Query("SELECT DeviceID, MediaType FROM Win32_DiskDrive", &drives)DiskInfo := make(map[string]string)for _, disk := range drives {var deviceID stringfmt.Sscanf(disk.DeviceID, `\\.\%s`, &deviceID)if disk.MediaType == "Fixed hard disk media" {DiskInfo[deviceID] = "本地磁盘"} else {DiskInfo[deviceID] = "外接设备"}}return DiskInfo
}
func getDriveInfo(drive string) DiskInfo {var logicalList []Win32_LogicalDisksqlStr := fmt.Sprintf(`Select * from Win32_LogicalDisk where Name="%s"`, drive)wmi.Query(sqlStr, &logicalList)deviceInfo := DiskInfo{Name:        drive,Size:        "0",FreeSpace:   "0",Description: "外接硬盘",FileSystem:  logicalList[0].FileSystem,DeviceID:    logicalList[0].DeviceID,VolumeName:  logicalList[0].VolumeName,}Usag, err := disk.Usage(drive)if err == nil {deviceInfo.Size = fmt.Sprintf("%d", Usag.Total/1024/1024)deviceInfo.FreeSpace = fmt.Sprintf("%d", Usag.Free/1024/1024)}return deviceInfo
}
func GetUSBList() []DiskInfo {var logicalToPartitions []Win32_LogicalDiskToPartitionvar diskToPartitions []Win32_DiskDriveToDiskPartitionvar USBList []DiskInfo// 查询 Win32_LogicalDiskToPartitionwmi.Query("SELECT Antecedent, Dependent FROM Win32_LogicalDiskToPartition", &logicalToPartitions)// 查询 Win32_DiskDriveToDiskPartitionwmi.Query("SELECT Antecedent, Dependent FROM Win32_DiskDriveToDiskPartition", &diskToPartitions)DiskInfo := GetDiskInfo()// 输出关联的结果for _, ltp := range logicalToPartitions {for _, dtp := range diskToPartitions {if ltp.Antecedent == dtp.Dependent {re := regexp.MustCompile(`DeviceID="([^"]+)"`)match := re.FindStringSubmatch(dtp.Antecedent)if len(match) > 1 {var deviceID stringfmt.Sscanf(match[1], `\\\\.\\%s`, &deviceID)if DiskInfo[deviceID] == "外接设备" {re := regexp.MustCompile(`DeviceID="([^"]+)"`)match = re.FindStringSubmatch(ltp.Dependent)if len(match) > 1 {USBList = append(USBList, getDriveInfo(match[1]))}}}}}}return USBList
}
func main() {fmt.Printf("%+v\n", GetUSBList())
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/403033.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高数4.2 积分方法-换元积分法

1. 第一类换元积分法 2. 第二类换元积分法

算法【Java】 —— 滑动窗口

滑动窗口 在上一篇文章中,我们了解到了双指针算法,在双指针算法中我们知道了前后指针法,这篇文章就要提到前后指针法的一个经典的使用 —— 滑动窗口,在前后指针法中,我们知道一个指针在前,一个指针在后&a…

JavaScript初级——运算符

一、算数运算符 1、运算符也叫操作符。通过运算符可以对一个或多个值进行运算,并获取运算结果。 比如:typeof 就是运算符,可以获得一个值的类型,他会将该值的类型以字符串的形式返回 (number、string、boolean、undefi…

【秋招笔试】8.12-4399秋招(第一套)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…

计算机网络12——IM聊天系统——项目分析和架构搭建

1、IM——聊天系统主要功能 (1)注册 根据:昵称,手机号,密码 (2)登录 根据:手机号,密码 (3)添加好友 根据:昵称 (4&…

Secure CRT 9.x版本高亮着色配置文件

Secure CRT的网络配置文件高亮显示,还在完善,逐渐适配不同厂商 设备名字自动蓝色高亮显示设备接口名高亮显示IPv4地址、IPv6地址、MAC地址高亮显示掩码、反掩码高亮显示设备SN号高亮显示接口状态、设备状态等高亮显示各路由协议高亮显示 【下载地址】效果…

XSS-复现dom破坏案例和靶场

目录 xss注入原理: xss是什么? xss原理: DOM: 闯关: 第一关:Ma Spaghet! 源码: 要求: 分析: 第二关: Jefff 源码: 要求: …

ubuntu基于sealos搭建k8s集群,helm3安装配置自动化扩容Prometheus,grafana出图展示,以及动态web搭建

1.项目简介 大方向:k8s云原生方向,运维技术,配置问题解决 解决技术:ubuntu模板机安装,配置远程xshell连接ubuntu,设置静态ip,换ubuntu阿里云源,配置集群间域名解析,解决双IP冲突网…

ubuntu下使用docker、socket、yolov5进行图像处理数据交互记录

ubuntu下使用docker、socket、yolov5进行图像处理数据交互记录 概述:主要实现了在宿主机上通过8000端口传递一张图像给docker镜像,然后镜像中处理后,通过8001端口回传处理后的图像给宿主机。 第一章、构建镜像 一、dockerfile文件 1.拉取…

尚品汇-前端面包屑平台属性、排序处理(三十三)

目录: (1)面包屑处理平台属性 (2)排序处理 (2)单点登录业务介绍 (1)面包屑处理平台属性 前端显示:面包屑显示效果 搜list搜索方法继续添加返回的平台属性…

Lora 全文翻译

作者: 地点:hby 来源:https://arxiv.org/pdf/2106.09685 工具:文心 LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 摘要 自然语言处理的一个重要范式包括在通用领域数据上进行大规模预训练,并适应特定任务或…

php 在app中唤起微信app进行支付,并处理回调通知

<?phpnamespace app\api\controller;use think\facade\Db; use think\facade\Log;class Wxzf {

什么是视频比特率?与视频时长是什么关系

​ ‌比特率是指单位时间内传输或处理的比特的数量&#xff0c;单位为‌bps(‌bit per second)。‌ 比特率经常用于描述在电信和计算领域中数据传输的速度&#xff0c;也可以作为衡量音频和视频文件数据率的指标。比特率越高&#xff0c;传送的数据越大&#xff0c;音频或视频…

Notion快速使用

探索Notion&#xff1a;全能笔记软件的新世界 1. 什么是Notion&#xff1f; 在数字化时代&#xff0c;一款集颜值与功能于一身的笔记软件无疑是学习与工作的得力助手。今天&#xff0c;我要向大家介绍的就是这样一款全能型选手——Notion。Notion不仅以其高颜值在众多笔记软件…

拟南芥中基因家族序列的提取

1.拟南芥基因组数据的下载 phytozome 是一个收录植物基因组数据的网站&#xff0c;数据整理比较规范&#xff0c;已 经提供了去除可变剪切的 cds 和 protein 序列文件。只有 gff3 文件需要 过滤处理 2. 对拟南芥的注释文件gff3文件进行ID处理&#xff0c;最终得到以下4个文件 …

【uni-app】使用天气API做一个天气APP(全过程)- 实况、逐小时、40日

头一次使用uni-app写代码, 现学现卖, 写的不好的地方见谅, 申请个appid就可以运行 切换城市界面比较简单, 城市名称需要符合天气api参数规则, 录入的城市不要带市区县; 格式如: 青岛、铁西、海淀、沛县 APP效果 功能说明 实况天气逐小时预报未来7日天气未来40日天气空气质量详…

C语言 | Leetcode C语言题解之第336题回文对

题目&#xff1a; 题解&#xff1a; #define SIZE 9470 #define N 168000 #define P 13331typedef unsigned long long ULL; ULL p[301];//p[i]存储P^ivoid init()//初始化p进制次幂数组 {int i;p[0]1;for(i1;i<300;i){p[i]p[i-1]*P;} }int** palindromePairs(char**words,…

探索 Resolume Arena 7 - 引领 VJ 音视频创作的卓越软件

Resolume Arena 7 是一款专为 Mac 和 Windows 系统设计的强大 VJ 音视频软件&#xff0c;为创意专业人士和爱好者提供了丰富而出色的功能。 这款软件拥有直观且用户友好的界面&#xff0c;即使对于初学者来说&#xff0c;也能快速上手并开始创作。其强大的媒体管理功能&#x…

SpringBoot事务-调度-缓存

一.Spring Boot中的事务管理 设置事务 Transactional(isolation Isolation.DEFAULT) Transactional(propagation Propagation.REQUIRED) 开启事务 EnableTransactionManagement 1. 开启事务管理 要开启 Spring 的事务管理&#xff0c;你需要在你的 Spring Boot 应用中添加 …

大数据技术现场工程师特色实训室解决方案

一、引言 在大数据时代背景下&#xff0c;数据已成为新的生产要素&#xff0c;驱动着各行各业的创新发展。面对这一趋势&#xff0c;市场对于既掌握大数据理论知识又具备实战能力的大数据技术人才的需求急剧增加。为了应对这一挑战&#xff0c;唯众精心设计了一套全面的大数据…