找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 32438|回复: 10

[问题求助] PowerShell获取硬盘分区信息

[复制链接]
发表于 2013-9-1 17:02:38 | 显示全部楼层 |阅读模式
看HAT发的教程 看了几篇没看完就手痒了(希望别被喷 要我看完再写) 能帮看看写的代码这样规范不
看的教程 还没消化 (我喜欢一边写一边消化) 还望得到指点
  1. "盘符        总容量,        可用空间,        已用空间"
  2. foreach ($arr in gwmi Win32_LogicalDisk| where-object -filterscript {$_.drivetype -eq 3}) {
  3.         $size = ($arr.Size/1GB).tostring("f2")
  4.         $FreeSpace = ($arr.FreeSpace/1GB).tostring("f2")
  5.         $arr.DeviceID + "        " + $size + " GB,        " + $FreeSpace + " GB,        "  + ($size - $FreeSpace).tostring("f2") + " GB"
  6. }
复制代码
我想知道为什么这里  format-table 没作用呢 正确的用法是怎样的
是不是自定函里不可用 按我的理解 既然 按对象处理  应该可用的啊
  1. filter fun {
  2.         $_.deviceid.tostring() + ($_.size/1GB).tostring("f2") + "GB" + ($_.freespace/1GB).tostring("f2") + "GB" | format-table
  3. }
  4. get-wmiobject win32_logicaldisk | where-object -filterscript {$_.drivetype -eq 3} | fun
复制代码
另请教下 PowerShell 的 Get-Content 有没有像 CMD 的 FOR /F 这样  有的话  分隔符 和 列怎么表达的
目前这样处理 但文本对齐有问题

  1. function fun {
  2.         begin{  
  3.              "盘符        总容量          可用空间          已用空间"
  4.         }  
  5.         process{
  6.                 $_.deviceid + "        " + ($_.size/1GB).tostring("f2") + "GB           " + ($_.freespace/1GB).tostring("f2") + "GB           " + ($_.size/1GB-$_.freespace/1GB).tostring("f2") + "GB"
  7.         }
  8. }
  9. get-wmiobject win32_logicaldisk |where-object -filterscript {$_.drivetype -eq 3}| fun

  10. Start-Sleep –m 10000
复制代码
 楼主| 发表于 2013-9-2 15:15:33 | 显示全部楼层
本帖最后由 terse 于 2013-9-2 15:42 编辑

同一命令 加个输出格式  一个是显示GB 另一不是
  1. get-psdrive -psprovider filesystem
复制代码
  1. get-psdrive -psprovider filesystem | format-table -autosize root,Used,Free
复制代码
有点进步了 这样处理 稍好点
  1. function fun {
  2.         begin {write-host 盘符 总容量GB 可用空间GB 已用空间GB -Separator "        "}  # "这里"是TAB键
  3.         process{
  4.                write-host $_.deviceid ($_.size/1GB).tostring("f2") GB ($_.freespace/1GB).tostring("f2") GB ($_.size/1GB-$_.freespace/1GB).tostring("f2") GB -Separator "        "
  5.         }
  6. }
  7. get-wmiobject win32_logicaldisk |where-object -filterscript {$_.drivetype -eq 3}| fun

  8. Start-Sleep –m 10000
复制代码
发表于 2013-9-2 16:56:26 | 显示全部楼层
回复 2# terse


制表符可以这样表示:
  1. "`t"
复制代码
 楼主| 发表于 2013-9-2 16:57:17 | 显示全部楼层
本帖最后由 terse 于 2013-9-2 17:13 编辑

回复 3# DAIC
收到  谢了
另请教DAIC兄 能否说下 取文本列方法
  1. function fun {
  2.         begin {"盘符 `t 总容量 `t 可用空间 `t 已用空间"}
  3.         process{
  4.                write-host $_.deviceid "`t" ($_.size/1GB).tostring("f2") GB "`t"  ($_.freespace/1GB).tostring("f2") GB "`t" ($_.size/1GB-$_.freespace/1GB).tostring("f2") GB
  5.         }
  6. }

  7. get-wmiobject win32_logicaldisk |where-object -filterscript {$_.drivetype -eq 3}| fun

  8. Start-Sleep –m 10000
复制代码
发表于 2013-9-2 17:10:40 | 显示全部楼层
回复 4# terse


第一列:
  1. "a b c" | %{$_.split()[0]}
复制代码
第二列:
  1. "a b c" | %{$_.split()[1]}
复制代码
 楼主| 发表于 2013-9-2 17:16:40 | 显示全部楼层
回复 5# DAIC
先谢DAIC兄
这样是否把 字符变为数组来处理的 例中是空格分割?
发表于 2013-9-2 17:19:25 | 显示全部楼层
回复 6# terse


    对,就是这个意思。
发表于 2013-9-2 17:34:56 | 显示全部楼层
http://technet.microsoft.com/zh- ... .10.powershell.aspx
从这个链接里面看到gwmi有个-filter选项,于是我也仿了一个:
  1. "盘符`t`t总容量`t`t可用空间`t已用空间"
  2. gwmi win32_logicaldisk -filter "drivetype = 3" | % {
  3.     $_.deviceid + "`t`t" + `
  4.     ($_.size/1GB).tostring("f2") + "`t`t" + `
  5.     ($_.freespace/1GB).tostring("f2") + "`t`t" + `
  6.     ($_.size/1GB-$_.freespace/1GB).tostring("f2")
  7. }
复制代码
发表于 2013-9-2 17:39:11 | 显示全部楼层
增加一个使用率
  1. "盘符`t总容量(GB)`t可用空间(GB)`t已用空间(GB)`t使用率"
  2. gwmi win32_logicaldisk -filter "drivetype = 3" | % {
  3.     $_.deviceid + "`t" + `
  4.     ($_.size/1GB).tostring("f2") + "`t`t" + `
  5.     ($_.freespace/1GB).tostring("f2") + "`t`t" + `
  6.     ($_.size/1GB-$_.freespace/1GB).tostring("f2") + "`t`t" + `
  7.     (($_.size-$_.freespace)/$_.size*100).tostring("f2") + "%"
  8. }
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 感谢分享

查看全部评分

 楼主| 发表于 2013-9-2 18:09:42 | 显示全部楼层
回复 9# DAIC
不错 还是你的精简些
 楼主| 发表于 2013-9-3 13:35:03 | 显示全部楼层
本帖最后由 terse 于 2013-9-4 13:12 编辑

再学习一个
  1. GWmi win32_logicaldisk -Filter "DriveType=3" |`
  2. format-table -autosize @{exp={$_.DeviceID};Lab="盘符"},`
  3. @{Exp={"{0:N2}" -f ($_.Size/1GB)+" (GB)"};Lab="总容量"},`
  4. @{Exp={"{0:N2}" -f ($_.FreeSpace/1GB)+" (GB)"};Lab="可用空间"},`
  5. @{Exp={"{0:N2}" -f (($_.Size-$_.FreeSpace)/1GB)+" (GB)"};Lab="已用空间"},`
  6. @{Exp={"{0:P2}" -f (($_.size-$_.freespace)/$_.size)};Lab="使用率"}
  7. Start-Sleep –m 10000
复制代码
  1. GWmi win32_logicaldisk -Filter "DriveType=3" |`
  2. Format-Table -autosize @{expression={$_.DeviceID};Label="盘符"},`
  3. @{Expression={($_.Size/1GB).tostring("f2")};Label="总容量(GB)"},`
  4. @{Expression={($_.FreeSpace/1GB).tostring("f2")};Label="可用空间(GB)"},`
  5. @{Expression={(($_.Size-$_.FreeSpace)/1GB).tostring("f2")};Label="已用空间(GB)"},`
  6. @{Expression={(($_.size-$_.freespace)/$_.size*100).tostring("f2")};Label="使用率(%)"}
  7. Start-Sleep –m 100000
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 02:31 , Processed in 0.021046 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表