【问题标题】:Trying to create. initialize, and format VHD disks试图创造。初始化和格式化 VHD 磁盘
【发布时间】:2015-07-02 10:03:19
【问题描述】:

一些背景知识:我在实验室环境中工作,遇到了许多问题,需要创建 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 已经连接了磁盘。

任何帮助将不胜感激。

【问题讨论】:

  • 你不是在那个管道中间的一些命令上错过了-Passthru 吗? Add-VMHardDiskDrive 和增量语句是否实际运行?第一行的错误是否“终止”了该循环?

标签: powershell hyper-v cmdlets vhd


【解决方案1】:

只有卸载不能在管道上工作。

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

我想知道我们是否可以走得更远。

【讨论】:

    【解决方案2】:

    我了解 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 来避免出现问题。

    【讨论】:

    • 这太棒了,完全符合我的需要。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 2012-06-10
    相关资源
    最近更新 更多