我在编写创建新 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