本帖最后由 qqgghh1 于 2016-2-15 17:04 编辑
需求:如上图,解决技术员安装系统后忘记格式化分区的问题。用户是使用USERS权限,领用后无法正常使用电脑。
思路:执行脚本,若发现有未分配的卷,则提示出来。
目前有学习_WinAPI_GetVolumeInformation、_WinAPI_GetDriveGeometryEx等相关,无论Drive还是Volume,都要求指定驱动器号才能返回相关信息。
不得其解,请求帮助,谢谢!
2016/2/15补充:
看API、WMI,眼都看肿了,也没找到直接获取的(估计还是自己功力不够),想用diskpart回显,又说该命令不支持回显。对着计算机磁盘管理界面发呆,若用该硬盘总容量-该硬盘所有分区容量总和,是不是就是没有被分配的呢。
马上来试:
用DriveGetDrive('fixed') 获得所有可见分区
用_WinAPI_GetDriveNumber,将属同一硬盘上的可见分区容量加总
用_WinAPI_GetDriveGeometryEx 获取相应硬盘的总容量
哈哈,菜鸟也有菜鸟的招,先这样吧。#Include <WinAPIEx.au3>
Opt('MustDeclareVars', 1)
Dim $Drive = DriveGetDrive('fixed')
Dim $List[10],$partition_info,$disk_info
For $i = 0 To UBound($Drive) - 1
$List[$i] = ''
Next
If IsArray($Drive) Then
For $i = 1 To UBound($Drive) - 1
$partition_info = _WinAPI_GetDriveNumber($Drive[$i]);检索指定驱动器的类型、编号、分区号,[1]:对应该分区的硬盘号
If IsArray($partition_info) Then
$List[$partition_info[1]] +=Floor(DriveSpaceTotal($Drive[$i])/1024);同一块硬盘上的分区容量自加
EndIf
Next
EndIf
For $i = 0 To UBound($Drive) - 1
If $List[$i] Then
$disk_info = _WinAPI_GetDriveGeometryEx($i);检索磁盘的几何结构扩展信息,[5]:The disk size
Dim $check_diff = Floor ($disk_info[5]/1024/1024/1024 )-$List[$i]
If $check_diff >0 Then MsgBox(0,0,"磁盘"&$i&"有"&$check_diff&"GB空间未分配")
EndIf
If DriveStatus($Drive[$i]) = "UNKNOWN" Then MsgBox(0,0,"分区"&$Drive[$i]&"未格式化")
Next
|