试图创造。初始化并格式化 VHD 磁盘
Trying to create. initialize, and format VHD disks
一些背景:我在实验室环境中工作,遇到了许多问题,需要创建 VHD 并将其附加到 VM 以进行压力测试。我想出了一个脚本,允许用户使过程尽可能简单,如下所示:
$vms=Get-VM
$val = 0
Write-Host "This script is set up for quickly creating and initilizing VHDs"
$Path = Read-Host "Please enter the path you want to create the drives to. Use the formate in this example <E:\VHDS\>"
$fileName = Read-Host "The Drive will be <target>-<number>.vhdx. Please Name the target "
$vhdSize = 1GB
$vmAmount = Read-Host "How many Drives should be attached to each VM?"
foreach ($vm in $vms)
{
$n = $vm.Name
while ($val -ne $vmAmount)
{
$vhdPath = ($Path + $fileName + '-' + $val + '.vhdx')
New-VHD -Path $vhdPath -SizeBytes $vhdSize -Fixed | Mount-VHD -Passthru | Initialize-Disk -Passthru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem NTFS -Confirm:$false -Force | Dismount-VHD -Passthru
Add-VMHardDiskDrive -VMName $n -Path $vhdPath
$val++
}
}
当我 运行 代码时,它给我一个错误,指出 Dismount-VHD 将无法使用给定的路径。我试图进去并给它 $vhdPath 变量,但它仍然被阻止。
我 运行 遇到的另一个问题是 while 语句没有递增 $val。当它进入下一条语句时,它抛出一个错误并停止,说有问题的 VM 已经连接了磁盘。
如有任何帮助,我们将不胜感激。
我了解 PowerShell 中管道的美妙之处,但这有点过头了:)。如果拆分大型管道,一切正常。
$vhdPath = (Join-path $Path ($fileName + '-' + $val + '.vhdx'))
New-VHD -Path $vhdPath -SizeBytes $vhdSize -Fixed
Mount-VHD -Path $vhdPath
$disk = get-vhd -path $vhdPath
Initialize-Disk $disk.DiskNumber
$partition = New-Partition -AssignDriveLetter -UseMaximumSize -DiskNumber $disk.DiskNumber
$volume = Format-Volume -FileSystem NTFS -Confirm:$false -Force -Partition $partition
Dismount-VHD -Path $vhdPath
Add-VMHardDiskDrive -VMName $n -Path $vhdPath
您尝试做的事情的主要问题是 Dismount-VHD 不接受管道输入,即使接受了,它也不知道如何处理体积对象(这是 Format-Volume 的输出)
如果要保留管道,请将 Dismount-VHD -Path $vhdPath
放在单独的一行,一切都应该没问题。
此外,在创建路径时,您应该使用 join-path 以避免出现问题。
只有卸载无法在管道上工作。
New-VHD -Path $image -SizeBytes $size |
Mount-VHD -Passthru |
Initialize-Disk -PassThru |
New-Partition -AssignDriveLetter -UseMaximumSize |
Format-Volume -FileSystem NTFS -Confirm:$false -Force
Dismount-VHD -Path $vhdPath
Get-VM -Id $vm |
Get-VMScsiController |
Add-VMHardDiskDrive -Path $image
我想知道我们是否可以走得更远。
一些背景:我在实验室环境中工作,遇到了许多问题,需要创建 VHD 并将其附加到 VM 以进行压力测试。我想出了一个脚本,允许用户使过程尽可能简单,如下所示:
$vms=Get-VM
$val = 0
Write-Host "This script is set up for quickly creating and initilizing VHDs"
$Path = Read-Host "Please enter the path you want to create the drives to. Use the formate in this example <E:\VHDS\>"
$fileName = Read-Host "The Drive will be <target>-<number>.vhdx. Please Name the target "
$vhdSize = 1GB
$vmAmount = Read-Host "How many Drives should be attached to each VM?"
foreach ($vm in $vms)
{
$n = $vm.Name
while ($val -ne $vmAmount)
{
$vhdPath = ($Path + $fileName + '-' + $val + '.vhdx')
New-VHD -Path $vhdPath -SizeBytes $vhdSize -Fixed | Mount-VHD -Passthru | Initialize-Disk -Passthru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem NTFS -Confirm:$false -Force | Dismount-VHD -Passthru
Add-VMHardDiskDrive -VMName $n -Path $vhdPath
$val++
}
}
当我 运行 代码时,它给我一个错误,指出 Dismount-VHD 将无法使用给定的路径。我试图进去并给它 $vhdPath 变量,但它仍然被阻止。
我 运行 遇到的另一个问题是 while 语句没有递增 $val。当它进入下一条语句时,它抛出一个错误并停止,说有问题的 VM 已经连接了磁盘。
如有任何帮助,我们将不胜感激。
我了解 PowerShell 中管道的美妙之处,但这有点过头了:)。如果拆分大型管道,一切正常。
$vhdPath = (Join-path $Path ($fileName + '-' + $val + '.vhdx'))
New-VHD -Path $vhdPath -SizeBytes $vhdSize -Fixed
Mount-VHD -Path $vhdPath
$disk = get-vhd -path $vhdPath
Initialize-Disk $disk.DiskNumber
$partition = New-Partition -AssignDriveLetter -UseMaximumSize -DiskNumber $disk.DiskNumber
$volume = Format-Volume -FileSystem NTFS -Confirm:$false -Force -Partition $partition
Dismount-VHD -Path $vhdPath
Add-VMHardDiskDrive -VMName $n -Path $vhdPath
您尝试做的事情的主要问题是 Dismount-VHD 不接受管道输入,即使接受了,它也不知道如何处理体积对象(这是 Format-Volume 的输出)
如果要保留管道,请将 Dismount-VHD -Path $vhdPath
放在单独的一行,一切都应该没问题。
此外,在创建路径时,您应该使用 join-path 以避免出现问题。
只有卸载无法在管道上工作。
New-VHD -Path $image -SizeBytes $size |
Mount-VHD -Passthru |
Initialize-Disk -PassThru |
New-Partition -AssignDriveLetter -UseMaximumSize |
Format-Volume -FileSystem NTFS -Confirm:$false -Force
Dismount-VHD -Path $vhdPath
Get-VM -Id $vm |
Get-VMScsiController |
Add-VMHardDiskDrive -Path $image
我想知道我们是否可以走得更远。