返回列表 发帖

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

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

本帖最后由 terse 于 2013-9-2 15:42 编辑

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

TOP

回复 2# terse


制表符可以这样表示:
"`t"COPY

TOP

本帖最后由 terse 于 2013-9-2 17:13 编辑

回复 3# DAIC
收到  谢了
另请教DAIC兄 能否说下 取文本列方法
function fun {
        begin {"盘符 `t 总容量 `t 可用空间 `t 已用空间"}
        process{
               write-host $_.deviceid "`t" ($_.size/1GB).tostring("f2") GB "`t"  ($_.freespace/1GB).tostring("f2") GB "`t" ($_.size/1GB-$_.freespace/1GB).tostring("f2") GB
        }
}
get-wmiobject win32_logicaldisk |where-object -filterscript {$_.drivetype -eq 3}| fun
Start-Sleep –m 10000COPY

TOP

回复 4# terse


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

TOP

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

TOP

回复 6# terse


    对,就是这个意思。

TOP

http://technet.microsoft.com/zh- ... .10.powershell.aspx
从这个链接里面看到gwmi有个-filter选项,于是我也仿了一个:
"盘符`t`t总容量`t`t可用空间`t已用空间"
gwmi win32_logicaldisk -filter "drivetype = 3" | % {
    $_.deviceid + "`t`t" + `
    ($_.size/1GB).tostring("f2") + "`t`t" + `
    ($_.freespace/1GB).tostring("f2") + "`t`t" + `
    ($_.size/1GB-$_.freespace/1GB).tostring("f2")
}COPY

TOP

增加一个使用率
"盘符`t总容量(GB)`t可用空间(GB)`t已用空间(GB)`t使用率"
gwmi win32_logicaldisk -filter "drivetype = 3" | % {
    $_.deviceid + "`t" + `
    ($_.size/1GB).tostring("f2") + "`t`t" + `
    ($_.freespace/1GB).tostring("f2") + "`t`t" + `
    ($_.size/1GB-$_.freespace/1GB).tostring("f2") + "`t`t" + `
    (($_.size-$_.freespace)/$_.size*100).tostring("f2") + "%"
}COPY
1

评分人数

TOP

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

TOP

本帖最后由 terse 于 2013-9-4 13:12 编辑

再学习一个
GWmi win32_logicaldisk -Filter "DriveType=3" |`
format-table -autosize @{exp={$_.DeviceID};Lab="盘符"},`
@{Exp={"{0:N2}" -f ($_.Size/1GB)+" (GB)"};Lab="总容量"},`
@{Exp={"{0:N2}" -f ($_.FreeSpace/1GB)+" (GB)"};Lab="可用空间"},`
@{Exp={"{0:N2}" -f (($_.Size-$_.FreeSpace)/1GB)+" (GB)"};Lab="已用空间"},`
@{Exp={"{0:P2}" -f (($_.size-$_.freespace)/$_.size)};Lab="使用率"}
Start-Sleep –m 10000COPY
GWmi win32_logicaldisk -Filter "DriveType=3" |`
Format-Table -autosize @{expression={$_.DeviceID};Label="盘符"},`
@{Expression={($_.Size/1GB).tostring("f2")};Label="总容量(GB)"},`
@{Expression={($_.FreeSpace/1GB).tostring("f2")};Label="可用空间(GB)"},`
@{Expression={(($_.Size-$_.FreeSpace)/1GB).tostring("f2")};Label="已用空间(GB)"},`
@{Expression={(($_.size-$_.freespace)/$_.size*100).tostring("f2")};Label="使用率(%)"}
Start-Sleep –m 100000COPY

TOP

返回列表