尝试创建、初始化和格式化VHD磁盘。

5

背景:我在实验室环境中工作,遇到一些需要创建VHD并将其附加到虚拟机进行压力测试的问题。我已经想出了一个脚本,使用户可以尽可能简化这个过程,如下:

$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。当进入下一个语句时,会抛出一个错误并停止,指出所讨论的虚拟机已经连接了该磁盘。
任何帮助将不胜感激。

在那个管道的中间,你不是漏掉了很多命令的“-Passthru”吗?“Add-VMHardDiskDrive”和增量语句是否真正运行?第一行的错误是否会“终止”该循环? - Etan Reisner
2个回答

7

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

1
这太棒了,完全满足了我的需求。非常感谢你。 - Gavin_Talyn

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接