簡體   English   中英

在Get-VM上構建一個有效的foreach循環

[英]Building a working foreach loop on Get-VM

我正在嘗試構建一個循環,該循環將使用Get-VM cmdlet,將其放入數組中,然后讓我在每個VM上運行一個foreach語句。 當我構建了該陣列時,循環應轉到每個VM,構建指定數量的VHD,對其進行初始化,格式化並將它們附加到VM。

腳本中的邏輯起作用。 它將構建磁盤並將其附加到VM。 我失敗的地方是該腳本將錯誤地指出正在嘗試構建的計算機已創建(我懷疑$ val變量中的作用域錯誤)。 它還將停止並且不會移動到下一個對象。

我懷疑我有作用域錯誤,而且ForEach-Object可能是處理此腳本的更好方法。 但是,此時我迷路了,需要一點幫助。

一如既往,感謝您,並祝您編程愉快!

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 format in this example <E:\VHDS\>"
$fileName = Read-Host "The Drive will be <target>-<number>.vhdx.  Please Name the target "
$vhdSize = 1GB
$vmAmount = 1

$GetVM = Get-VM

Foreach ($vm in $GetVM)
{
    $n = $vm.Name.ToString()
    $val = 0
    For($internalCounter = 0; $internalCounter -le $vmAmount; $internalCounter++)
        {
            $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
        }
     $val++
}

$val = 0移動到Foreach循環之前。 否則,盡管您在循環結束時增加,但在循環開始時又將其清零,因此$val始終為零。

在周末花了一些時間處理代碼之后,我首先刪除了所有用戶啟動的變量並運行了多個Write-Host。 我發現,foreach和內部for循環已成功運行,但是路徑上的命名約定正在回收,因此將其100%排除在外。 解決方法只是將VM名稱變量放入路徑中。 一旦完成,它就像一個魅力。

這是完成的代碼:

Write-Host "This script is set up for quickly creating and initilizing VHDs"
$Path = "E:\Hyper-V\Virtual hard disks\Test Drives\"
$fileName = "target"
$vhdSize = 7GB

$GetVM = Get-VM -ComputerName localhost
Foreach ($vm in $GetVM)
{
$n = $vm.Name
$vmAmount = 4
Write-Host "vm = " $n
For($val = 0; $val -le $vmAmount; $val++)
    {

      Write-Host "drive = " $val

      Write-Host "Path Before = " $Path

      $vhdPath = (Join-path $Path  ($n + "_" + $fileName + '-' + $val + '.vhdx'))

      Write-Host "Path after = " $vhdPath

      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
    }        
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM