巧用PS检测硬盘自由空间
操作方法
- 01
第一个任务,检查服务器上面硬盘的自由空间! 首先让我们看看在vbs下面是怎么实现的,下面代码是我从微软脚本中心copy来的。 Const HARD_DISK = 3 strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colDisks = objWMIService.ExecQuery _ ("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK & "") For Each objDisk in colDisks Wscript.Echo "DeviceID: "& vbTab & objDisk.DeviceID Wscript.Echo "Free Disk Space: "& vbTab & objDisk.FreeSpace Next 注意strComputer = "."这句话,其中的点代表检查本地计算机,如果换成其他服务器的名字,就可以检查远程计算机了。 好了用PS如何做呢? 首先我们把上面那个select语句抄下来,稍加改动,就是PS的格式 $query="Select * from Win32_LogicalDisk Where DriveType = '3'" 看着比vbs简单吧? 注意我把hard_disk换成了数字3,省去了再定义个变量的麻烦。 然后我们就可以直接用PS下面的gwmi (全名为get-wmiobject)命令来进行检测了 $disks = gwmi -query $query 简单吧,上面的命令检测本地计算机的逻辑硬盘,把结果放到$disks变量里面去,如果检测远程计算机呢?把上面的命令改成 $disks = gwmi -query $query -computer "remotepc" 其中remotepc应该是你要检测的远程计算机名字。 下面我们如何查看$disks里面的内容呢? 你可以直接打$disks 会给你一个列表类似这样。 DeviceID : C: DriveType : 3 ProviderName : FreeSpace : 14351843328 Size : 31453437952 VolumeName : DeviceID : E: DriveType : 3 ProviderName : FreeSpace : 1361903616 Size : 5388038144 VolumeName : New Volume 不太好看哦,我们只需要看看deviceid 和 freespace就可以了。好了运行这一句 $disks | select deviceid, freespace 之后,结果类似下面 deviceid freespace -------- --------- C: 14351843328 E: 1361903616 好看多了吧? 我觉得还是不够,我想看到freespace的大小是gb或者mb而不是上面的那个样子。 我们做一个简单的除法就可以了。试试下面的命令 foreach ($disk in $disks) { "DiviceID - " + $disk.deviceid "FreeSize(GB) - "+($disk.freespace/1gb) } 结果就变成 DiviceID - C: FreeSize(GB) - 13.3661956787109 DiviceID - E: FreeSize(GB) - 1.26837158203125 呵呵够精确吧?在PS下面,把 数字转化成mb或gb是非常方便的,不需要你1024,1024的除,只要直接除1gb或1kb或1mb就可以了! 让我们最后总结一下上面的命令 $query="Select * from Win32_LogicalDisk Where DriveType = '3'" $disks = gwmi -query $query foreach ($disk in $disks) { "DiviceID - " + $disk.deviceid "FreeSize(GB) - "+($disk.freespace/1gb) } 比较一下vbs的代码,哪个更方便呢? 好事儿做到底,再加点儿功能,想列出多台计算机的信息咋办? 不急,先建立一个变量,假设你有三台服务器,名字是server1,server2,server3 $servers= "server1","server2","server3" 然后把上面的代码改写成 $query="Select * from Win32_LogicalDisk Where DriveType = '3'" foreach ($server in $servers) { "Servername - " + $server $disks = gwmi -query $query -computer $server foreach ($disk in $disks) { "DiviceID - " + $disk.deviceid "FreeSize(GB) - "+($disk.freespace/1gb) } }