新しい VHD (ネットワークに最適化されたパッケージを作成するためのツール) の作成のスクリプト作成に問題があります。以下のスクリプトは基本的に、入力ディレクトリの合計サイズを取得し、それを変数として $intval 関数に渡します。この関数は、バイト単位のサイズを文字列 $size (nGB) に変換します。
私が抱えている問題は、コマンドレット NEW-VHD が -SizeBytes パラメーターを Uint64 形式にする必要があることです。パラメータを手動で入力する場合、たとえば
NEW-VHD -path $vhdpath -fixed -SizeBytes 10GB
コマンドレットは意図したとおりに機能し、10GB を Uint64 として受け入れるため、VHD を作成します。私が必要とするのは、末尾の GB を保持しながら、変数 $size を何らかの形で Uint64 に変換することです。このシナリオでユーザー入力を模倣する方法はありますか?
以下のスクリプトは概念実証にすぎないため、最適化されていないか、見栄えがよくないことを理解しています。上記の問題に関する提案は大歓迎です!
コード
$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