Powershell:将百分号附加到变量的末尾

Powershell: appending a percent sign to the end of a variable

我正在尝试添加百分号 ("%") 以附加到变量:

$disk = Get-WmiObject -ComputerName $Computer -Class Win32_LogicalDisk -Filter  "Caption = 'D:'"       
If (!($disk)) {
   $DiskpercentFree = "n/a"
}
Else {
   $deviceID = $disk.DeviceID 
   [float]$size = $disk.Size; 
   [float]$freespace = $disk.FreeSpace;  
   $diskpercentFree1 = [Math]::Round(($freespace / $size) * 100)
   $Percent = "%" 
   $diskpercentFree = $diskpercentFree1 + $Percent
}

但我得到的只是:

Cannot convert value "%" to type "System.Double". Error: "Input string was not in a correct format."

大概是因为它认为“+”运算符在进行计算?我尝试了各种 concat 选项,但似乎无法正确处理。有人可以帮忙吗?

有几种方法可以做到这一点:

将变量分配为字符串:

$diskpercentFree = "$diskpercentFree1$Percent"

将双精度值转换为字符串:

$diskpercentFree = "$diskpercentFree1" + $Percent
# Or
$diskpercentFree = [string]$diskpercentFree1 + $Percent

并且无需为 % 字符使用单独的变量:

$diskpercentFree = "$diskpercentFree1%"

解释:

在输出周围添加 " " 以将其视为字符串,然后将变量附加到末尾。这意味着您可以将其从 % 切换为 Percent Remaining.

等字符串

希望这对您有所帮助,您已经很接近了!

代码:

   $disk = Get-WmiObject -ComputerName $Computer -Class Win32_LogicalDisk -Filter  "Caption = 'D:'"       
              If (!($disk)) {
                 $DiskpercentFree = "n/a"
                }  
              Else {
                 $deviceID = $disk.DeviceID 
                 [float]$size = $disk.Size; 
                 [float]$freespace = $disk.FreeSpace;  
                 $diskpercentFree1 = [Math]::Round(($freespace / $size) * 100)
                 $Percent = '%' 
                 $diskpercentFree = "$diskpercentFree1" + $Percent
                 }

$diskpercentFree 的示例结果:

PS C:\Windows\system32> $DiskpercentFree

57%

如果您想以百分比形式输出值,我会推荐字符串格式。示例:

PS C:\> "{0:P}" -f 1
100.00 %
PS C:\> "{0:P1}" -f .986
98.6 %
PS C:\> "{0:P0}" -f .75
75 %

-f 的文档在 about_Operators page 中,那里有关于如何获得各种结果的 .NET 文档的链接。