我想为计算磁盘容量时使用的单位大小设置一个变量,比如GB或TB。这是我的工作示例:
$SourceDriveLetter = "C"
$SourceDrive = Get-Volume -DriveLetter $SourceDriveLetter
$SourceCapacity = [math]::Round(($SourceDrive.Size/1TB),2)
$SourceCapacity
0.42我想要这样设置,这样我就可以很容易地从TB更改为GB。我在其他地方的电子邮件报告中使用$Unit。
$SourceDriveLetter = "C"
$Unit = "TB"
$UnitCalc = 1 * [int]$Unit
$SourceDrive = Get-Volume -DriveLetter $SourceDriveLetter
$SourceCapacity = [math]::Round(($SourceDrive.Size/$UnitCalc),2)
$SourceCapacity我知道$Unit从一开始就是一个字符串,不确定如何用$UnitCalc中的数学计算将其表示为文字。任何帮助都将不胜感激。
发布于 2021-03-01 16:47:31
PowerShell已经识别出像这样的速记
..。如果您有排除引号并包含
那么你的代码已经可以工作了。
$SourceDriveLetter = "C"
$Unit = 1TB
$SourceDrive = Get-Volume -DriveLetter $SourceDriveLetter
$SourceCapacity = [math]::Round(($SourceDrive.Size/$Unit),2)
$SourceCapacity
PS > .\Stack Overflow Demo.ps1
0.91
PS > $SourceDrive.Size / 1GB
930.528869628906发布于 2021-03-01 04:13:04
如果您事先知道所有单位,则只需使用切换表达式将字符串转换为适当的值:
$Unit = "TB"
$UnitCalc = switch($Unit) {
"MB" { 1MB }
"GB" { 1GB }
"TB" { 1TB }
default { throw "unhandled unit '$Unit'" }
}
$capacity = 20TB / $UnitCalc # gives 20如果不需要错误处理,可以使用哈希表减少到一行,但请注意,这给出了
对于未知的单位大小:
$UnitCalc = @{ "MB" = 1MB; "GB" = 1GB; "TB" = 1TB }[$Unit]发布于 2021-03-01 10:29:56
那么决定使用的最佳大小的代码呢?
Clear-Host
$Size = 22373741824
#Updated per MClayton's suggestion, Thanks!
$Unit = Switch ($Size) {
{$Size -gt 1PB} { 'PB' ; Break }
{$Size -gt 1TB} { 'TB' ; Break }
{$Size -gt 1GB} { 'GB' ; Break }
{$Size -gt 1Mb} { 'MB' ; Break }
Default { 'KB' }
}
"Unit is: $unit"
$SourceCapacity = [math]::Round(($Size/$("1"+$Unit)),2)
"Source Drive capacity is: $SourceCapacity $Unit"当然,您将用检索到的值变量替换测试变量$Size,并删除调试输出语句。
HTH
https://stackoverflow.com/questions/66412087
复制相似问题