[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 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-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
复制代码

TOP

回复 9# DAIC
不错 还是你的精简些

TOP

增加一个使用率
  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

评分人数

TOP

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

TOP

回复 6# terse


    对,就是这个意思。

TOP

回复 5# DAIC
先谢DAIC兄
这样是否把 字符变为数组来处理的 例中是空格分割?

TOP

回复 4# terse


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

TOP

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

TOP

回复 2# terse


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

TOP

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

TOP

返回列表