[英]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.