Board logo

标题: [问题求助] PowerShell获取硬盘分区信息 [打印本页]

作者: terse    时间: 2013-9-1 17:02     标题: PowerShell获取硬盘分区信息

看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
复制代码

作者: terse    时间: 2013-9-2 15:15

本帖最后由 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
复制代码

作者: DAIC    时间: 2013-9-2 16:56

回复 2# terse


制表符可以这样表示:
  1. "`t"
复制代码

作者: terse    时间: 2013-9-2 16:57

本帖最后由 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
复制代码

作者: DAIC    时间: 2013-9-2 17:10

回复 4# terse


第一列:
  1. "a b c" | %{$_.split()[0]}
复制代码
第二列:
  1. "a b c" | %{$_.split()[1]}
复制代码

作者: terse    时间: 2013-9-2 17:16

回复 5# DAIC
先谢DAIC兄
这样是否把 字符变为数组来处理的 例中是空格分割?
作者: DAIC    时间: 2013-9-2 17:19

回复 6# terse


    对,就是这个意思。
作者: DAIC    时间: 2013-9-2 17:34

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. }
复制代码

作者: DAIC    时间: 2013-9-2 17:39

增加一个使用率
  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. }
复制代码

作者: terse    时间: 2013-9-2 18:09

回复 9# DAIC
不错 还是你的精简些
作者: terse    时间: 2013-9-3 13:35

本帖最后由 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
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2