【问题标题】:Adding properties in powershell在 powershell 中添加属性
【发布时间】:2017-03-04 18:41:40
【问题描述】:

我想添加 C 驱动器属性(可用空间和已用空间)以获得总大小。

Get-PSDrive C | Select-Object -Property Free,Used

这显示了驱动器 C 的可用空间和已用空间。我可以使用自定义属性将它们转换为 GB,但不确定如何将这些属性添加在一起。任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 我很惊讶有这么多关于如何获取驱动器属性(包括 Get-WmiObject)的在线内容,但没有关于如何获取总大小的信息!
  • 欢迎来到 Stack Overflow。请查看How do I write a good question 以获取有关最大化您的问题所覆盖的受众的建议。具体来说,我可能会建议修改您的标题以包含您的实际问题,并修改问题正文以包含预期结果。在后者上,您几乎完成了,但不清楚您是否要尝试显示两个值、执行数学运算并显示一个值、存储一个变量等。祝你好运!
  • @FissureKing:请问哪一部分问题不清楚?他清楚地提到他想将它们加在一起,因为他已经获得了空闲和使用的空间。
  • @RanadipDutta 具体来说,他/她是否期望这种(或更正的)语法能够返回附加值?还是应该将此命令传送到处理添加的函数中?瓶颈在哪里?这是字符串操作问题,还是一般的 powershell 问题?
  • 如果你已经运行了这个命令,那么你就会明白这部分是他想要达到的磁盘总大小,默认情况下是不存在的。所以他想总结 Used 和 Free 的大小来完成它。它非常简单。现在我不知道函数是怎么来的,图片中的字符串操作。

标签: powershell


【解决方案1】:
 $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)}}中做了什么
  • @JeffS.:在 Windows PowerShell 中使用 .NET 处理Format 数字
  • 通过链接了解更多信息。Formatting tips
【解决方案2】:

如果您想获得有关硬盘分区的完整信息,PSDrive 不是最好的使用对象,请改用 Volume cmdlet:

(Get-Volume -DriveLetter C).Size

Get-Volume -DriveLetter C | Select-Object Size

PSDrive 是 PowerShell 中的一种抽象,用于以类似的方式处理各种类型的对象。

【讨论】:

  • 谢谢!如果我没有将其命名为添加属性,我会将其投票为正确答案,因为它是最简单和最短的解决方案
【解决方案3】:
#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)
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多