powershell - 将输入变量转换为 Uint64

标签 powershell type-conversion vhd uint64

我在编写创建新 VHD(用于创建网络优化包的工具)的脚本时遇到问题。下面的脚本基本上提取输入目录的总大小,并将其作为变量传递给 $intval 函数,该函数将字节大小转换为字符串 $size (nGB)。

我遇到的问题是 cmdlet NEW-VHD 要求 -SizeBytes 参数采用 Uint64 格式。如果您手动输入参数,例如

NEW-VHD -path $vhdpath -fixed -SizeBytes 10GB

cmdlet 按预期运行并创建 VHD,因为它接受 10GB 作为 Uint64。我需要的是变量 $size 以某种方式转换为 Uint64,同时保留尾随 GB。在这种情况下有没有办法模仿用户输入?

我知道下面的脚本没有经过优化或看起来最好看,因为它只是一个概念证明。欢迎对上述问题提出任何建议!

代码

$dir = Read-Host 'What is the directory you are wishing to store inside a VHD?'
$objFSO = New-Object -com Scripting.FileSystemObject
$intval = $objFSO.GetFolder($dir).Size / 1GB
$size = "{0:N0}GB" -f $intval
$vhd = Read-Host 'What volume name do you wish to call your VHD (no spaces)?'
$vhdname = ($vhd + ".vhdx")
$vhdpath = ("C:\VHD\" + $vhdname)
NEW-VHD -fixed -path $vhdpath -SizeBytes $size

我查看了一些 Microsoft 资源,但一无所获

修改后的代码

$dir = Read-Host 'What is the directory you are wishing to store inside a VHD?'
$objFSO = New-Object -com Scripting.FileSystemObject
$intval = $objFSO.GetFolder($dir).Size
$size = $intval / 1GB
$vhd = Read-Host 'What volume name do you wish to call your VHD (no spaces)?'
$vhdname = ($vhd + ".vhdx")
$vhdpath = ("C:\VHD\" + $vhdname)
NEW-VHD -fixed -path $vhdpath -SizeBytes $size

最佳答案

只需使用这个:

$size = $intval / 1G

PowerShell 有一个内置常量 (GB),用于将值转换为千兆字节。另请参阅here .

编辑:阅读您的评论,我似乎误解了您的问题。 New-vhd 需要大小(以字节为单位)。如果您想要 10 GB,请按如下方式转换值:

$size = [bigint] 10GB

您的问题中不清楚的是:“我需要的是变量 $size 以某种方式转换为 Uint64,同时保留尾随 GB”。

关于powershell - 将输入变量转换为 Uint64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18606616/

相关文章:

c++ - 字符串在转换为 char* C++ 时被截断

vhd - Lattice Diamond 显示综合退出为 9

powershell - 使用PowerShell在同一命令中创建目录和文件

powershell - Invoke-RestMethod REST API PUT 方法

windows - 批量AD用户属性更新

powershell - 导入模块 AzureRM 导入模块 : The specified module 'AzureRM' was not loaded because no valid module file was found in any module directory

node.js - 如何使用 Flow 抽象空/未定义检查?

java - 将对象强制转换为类的类型安全方法

azure VHD 1TB 上传

c++ - VHD 无法在 hyper V 中启动