1.查看存储设备信息
1.1 Win32_LogicalDisk 获取本机逻辑磁盘(计算机中显示的盘符 C: D: E:等),包括硬盘,光驱,U盘等设备
Get-WmiObject -Class Win32_LogicalDisk
运行结果
DeviceID --> 盘符
DriveType --> 设备类型
VolumeName --> 卷标
DeviceID : C:
DriveType : 3
ProviderName :
FreeSpace : 25028714496
Size : 232373874688
VolumeName : OS
DeviceID : D:
DriveType : 3
ProviderName :
FreeSpace : 8898105344
Size : 9751752704
VolumeName : 新加卷
DeviceID : F:
DriveType : 5
ProviderName :
FreeSpace :
Size :
VolumeName :
使用 Select * 查看全部信息
eg.
$a=Get-WmiObject -Class Win32_LogicalDisk
$a[0] | Select *
1.2 Win32_DiskDrive 获取本机物理磁盘信息
Get-WmiObject -Class Win32_DiskDrive
1.3 Win32_PnPEntity获取本机USB设备信息
Get-WmiObject -Class Win32_PnPEntity | Where-Object { $_.DeviceID -like 'USBSTOR*' }
可以查看 Powershell 检查设备管理器
Get-WmiObject -Class Win32_PnPEntity 可查本机所有设备
2. Compare-Object 比较差异
alias(别名): compare diff
$a=Compare-Object (1,2,3) (1,2,4)
$a
InputObject SideIndicator
----------- -------------
4 =>
3 <=
3.监听USB设备的插入和移除
# DriveType
# 2: USB Disk
# 3: HDD
# 5: ODD
$driverList=@{} # HashTable Key-Value
$driveType=@{2="USB_Disk";3="HDD";5="ODD"} # HashTable Key-Value
$ErrorActionPreference= 'silentlycontinue' # 不显示错误, global variable
Function Get_DiskChange(){
$Device_Logical=Get-WmiObject -Class Win32_LogicalDisk
$Device_Logical_num = $Device_Logical.Length
$Device_Physical = Get-WmiObject -Class Win32_DiskDrive
$Device_Physical_num = $Device_Physical.Length
while($Device_Logical_num -eq (Get-WmiObject -Class Win32_LogicalDisk).Length)
{
# Start-Sleep -s 1
# Listen Disk Change
}
$Now_Time=Get-Date -Format "yyyy/MM/dd HH:mm:ss"
$Dev_Change=Get-WmiObject -Class Win32_LogicalDisk # 获取逻辑分区
$com_Dev=Compare-Object $Device_Logical $Dev_Change #比较两次差异
$Disk_Change=$com_Dev.InputObject
$diskName=$Disk_Change.DeviceID[0]
$DevPhy_Change = Get-WmiObject -Class Win32_DiskDrive #获取物理存储设备
$com_DevPhy=Compare-Object $Device_Physical $DevPhy_Change #比较差异
$DiskPhy_Change=$com_DevPhy.InputObject
$DiskPhy_Model=$DiskPhy_Change.Model #eg. Model : USB DISK 3.0 USB Device
$par="d.d" # 正则匹配 数字.数字 eg 3.0
if ($DiskPhy_Model -match $par) {
$DiskPhy_Model=$matches[0] # 匹配到就赋值给$DiskPhy_Model
}
$DiskPhy_Size=[int]($DiskPhy_Change.Size /1000/1000/1000) # 转化为GB
$type_num=$Disk_Change.DriveType
$type=$driveType[[int]$type_num]
if($Device_Logical_num -le (Get-WmiObject -Class Win32_LogicalDisk).Length){
return ("Add_Device",$diskName,$type,$DiskPhy_Model,$DiskPhy_Size,$Now_Time)
}
elseif($Device_Logical_num -gt (Get-WmiObject -Class Win32_LogicalDisk).Length){
return ("Remove Device",$diskName,$type,$DiskPhy_Model,$DiskPhy_Size,$Now_Time)
}
}
Function DetectUSB(){
echo "********************** Listening **********************"
echo " "
$a=Get_DiskChange
echo "USB Device Information"
echo " "
" time: "+$a[5]
" Option: "+$a[0]
" Volume label: "+$a[1]
" Drive Type: "+$a[2]
" Model: "+$a[3]
" Total Size: "+$a[4]+"GB"
echo " "
#函数中的所有输出 都在$a 中
# for($i=0;$i -le $a.Length;$i++){
# $i.ToString() +":" +$a[$i]
# }
if ($a[0] -eq "Add_Device"){
# &执行命令
& ($a[1].ToString()+":") # 进入盘符
$CheckDisk = chkdsk #执行CHKDSK
# $CheckDisk
foreach ($i in $CheckDisk){
if ($i -eq "Windows has scanned the file system and found no problems."){
echo ""
echo "CHKDSK pass"
echo ""
break
}
}
}
}
while ($TRUE){
# Powershell 中 布尔值 $TRUE $FALSE 和空值 $NULL
DetectUSB
# Start-Sleep -s 1
}