在PowerShell中添加属性

4
我想添加C盘属性(可用空间和已用空间)以获取总大小。 Get-PSDrive C | Select-Object -Property Free,Used 这将显示C盘的可用空间和已用空间。我可以使用自定义属性将它们转换为GB,但不确定如何将这些属性相加。感谢您的帮助!

我很惊讶在网上关于如何获取驱动器属性包括 Get-WmiObject 的内容非常丰富,但是却没有任何关于如何获取总大小的信息! - Jeff S.
欢迎来到Stack Overflow。请查看如何撰写好问题以获取有关如何最大程度地扩大问题受众的建议。具体而言,我建议您修改标题以包含您实际的问题,并修改问题正文以包含预期结果。在后者方面,你已经接近成功了,但不是很清楚你是要显示两个值、执行数学运算并显示一个值、存储一个变量等。祝你好运! - Fissure King
@FissureKing:请问哪部分问题不清楚?他明确提到他想把它们加在一起,因为他已经得到了免费和已用空间。 - Ranadip Dutta
@RanadipDutta 特别地,他/她是否期望这个(或已更正的)语法返回添加的值?还是应该将此命令管道传递到处理添加的函数中?瓶颈在哪里?这是一个字符串操作问题,还是一个一般的 PowerShell 问题? - Fissure King
如果您运行了该命令,则应该已经了解到作者想要实现获取总磁盘大小的目标,而这并非默认情况。因此,他想要将已使用和未使用的磁盘空间相加以完成此操作。这很简单明了。但我不知道为什么会出现函数和字符串操作的情况。 - Ranadip Dutta
3个回答

5
 $computerHDDs= Get-WmiObject Win32_LogicalDisk  -Filter "DeviceID='C:'"

 $logicalDisks = @()
foreach($item in $computerHDDs)
{
    $logicalDisk =[ordered]@{
    Name=$item.DeviceID -replace ':' ,'';
    DiskSize = "{0:N2}" -f ($item.Size/1GB) + " GB" ;
    }
 $logicalDisks +=$logicalDisk
 }

 $logicalDisks

即使在psdrive中,如果您能够获取空闲和已用空间,则两者之和应该给出总大小。 在您的情况下,您可以这样做::
 $hdd= Get-PSDrive C | Select-Object -Property Free,Used
$total= (($hdd.free + $hdd.Used)/1GB).ToString() + " GB"
$total

注意: 如果仅需要获取值,那么请去掉tostring方法和GB部分,只使用前面的内容。

对于所有驱动器,可以像这样使用:

Get-PSDrive -PSProvider filesystem | select Name, @{n= 'Used(GB)' ; e = {"{0:N2}" -f ($_.used/1GB)}}, @{n= 'Free (GB)' ; e = {"{0:N2}" -f ($_.Free/1GB)}}, @{n= 'Total(GB)' ; e = {"{0:N2}" -f (($_.used + $_.Free)/1GB)}} | Format-Table -AutoSize

在以下代码中,-f 是什么意思:e = {"{0:N2}" -f ($_.used/1GB)}} - Jeff S.
@JeffS:在Windows PowerShell中使用.NET来格式化数字 - Ranadip Dutta
点击链接以获取更多关于此的了解。格式化技巧 - Ranadip Dutta

4

如果您想获取有关硬盘分区的完整信息,PSDrive并不是最好的工具,建议使用Volume cmdlets代替:

(Get-Volume -DriveLetter C).Size

或者
Get-Volume -DriveLetter C | Select-Object Size

一个PSDrive是PowerShell中的一个抽象概念,可以以相似的方式处理各种类型的对象。

谢谢!如果我没有将其命名为“add properties”,我会投票支持这个答案,因为它是最简单和最短的解决方案。 - Jeff S.

0
#solution 1 with new column into select
Get-Volume -DriveLetter C| 
select @{n= 'Used' ; e = {"{0:N2}" -f (($_.Size - $_.SizeRemaining)/1GB)}}, @{n= 'Free' ; e = {"{0:N2}" -f ($_.SizeRemaining/1GB)}}, @{n= 'Total' ; e = {"{0:N2}" -f ($_.Size/1GB)}}

#solution 2 with foreach
Get-Volume -DriveLetter C| foreach {
[pscustomobject]@{
Used="{0:N2}" -f (($_.Size - $_.SizeRemaining)/1GB)
Free="{0:N2}" -f ($_.SizeRemaining/1GB)
Total="{0:N2}" -f ($_.Size/1GB)
}

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接