Jeder kennt sicher den Aufwand bei einem Hyper-V Cluster wenn man eine neue VM erstellen möchte.
Welches SharedVolume hat am meisten freien Speicherplatz?
Welcher Node ist am wenigsten ausgelastet?
Habe ich alles standardmässig erstellt?
Aus diesem Grund habe ich hier ein Script erstellt das euch diese Arbeit abnimmt.
Ich gehe jetzt nicht auf jede Zeile ein, denn ich denke das alles gut dokumentiert ist. Wenn ihr Verbesserungen habt, lasst es mich wissen, dann kann ich es ebenfalls einbauen und auch noch was dabei lernen. 😉
#----------------------------------------------------------------------# # Script zum erstellen einer neuen VM in einem Hyper-V-Cluster # Überprüft welches SharedVolume am meisten Freien DiskSpace hat # Überprüft welcher Hyper-V Node am meisten freien Arbeitsspeicher hat # Erstellt neue VM und verschieft sie in den Hyper-V-Cluster # # 3 Fragen zur Erstellung einer VM: Name, HDD-Size, Memory # # Autor: Lars Eigeldinger # Date: 2016-04-14 # # Version 1.0: Release # 2016-08-29, 1.1: Hinzufügen Virtueller Prozessoren # 2017-02-16, 1.2: Variable für Switch und VM Generation # # Info: Das Script muss auf einem Hyper-V Server ausgeführt werden #----------------------------------------------------------------------# Import-Module FailoverClusters #----------------# # VM Information # #----------------# $VMname = Read-Host 'Wie ist der Name der neuen VM?' [int64]$HDDSize = Read-Host 'Wie gross ist die Festplatte in GB?' [int64]$HDDSize = $HDDSize*1024*1024*1024 [int64]$Memory = Read-Host 'Wieviel Arbeitsspeicher in GB?' [int64]$Memory = $Memory*1024*1024*1024 #-----------# # Variablen # #-----------# $DiskC = $VMname + '-C.vhdx' $HyperVClusterDomain = 'Hyper-V.sysadmingo.local' $PathISO = 'C:\ClusterStorage\Volume1\ISOs\WinServer2012R2_eng.ISO' $CPU = '4' $Switch = 'VM' $VMGen = '2' #----------------------------------------------------------------# # Überprüft welches SharedVolume am meisten Freien DiskSpace hat # #----------------------------------------------------------------# $objs = @() $csvs = Get-ClusterSharedVolume foreach ( $csv in $csvs ) { $csvinfos = $csv | select -Property Name -ExpandProperty SharedVolumeInfo foreach ( $csvinfo in $csvinfos ) { $obj = New-Object PSObject -Property @{ Name = $csv.Name Path = $csvinfo.FriendlyVolumeName Size = $csvinfo.Partition.Size FreeSpace = $csvinfo.Partition.FreeSpace UsedSpace = $csvinfo.Partition.UsedSpace PercentFree = $csvinfo.Partition.PercentFree } $objs += $obj } } $objs | ft -auto Name,Path,@{ Label = "Size(GB)" ; Expression = { "{0:N2}" -f ($_.Size/1024/1024/1024) } },@{ Label = "FreeSpace(GB)" ; Expression = { "{0:N2}" -f ($_.FreeSpace/1024/1024/1024) } },@{ Label = "UsedSpace(GB)" ; Expression = { "{0:N2}" -f ($_.UsedSpace/1024/1024/1024) } },@{ Label = "PercentFree" ; Expression = { "{0:N2}" -f ($_.PercentFree) } } | Out-Null $BesteDisk = $objs | sort -Property FreeSpace -Descending | select -First 1 | Select-Object path | Format-Table -HideTableHeaders | Out-String $BesteDisk = $BesteDisk.Replace("`r`n","") $BesteDisk = $BesteDisk.Replace(" ","") $BesteDisk = $BesteDisk +"\" write-host 'SharedVolume mit dem meisten Platz:' write-host $BesteDisk -ForegroundColor Green $PathDisk = $BesteDisk + $VMname + '\' + $DiskC write-host $PathDisk #----------------------------------------------------------------------# # Überprüft welcher Hyper-V Node am meisten freien Arbeitsspeicher hat # #----------------------------------------------------------------------# $HyperVNodes = Get-ClusterNode -cluster $HyperVClusterDomain | Where-Object {$_.State -like "Up"} | Select Name,@{L="AvailableMemory(GB)"; E={(Get-VMHOST $_.Name).MemoryCapacity/1GB-(Get-VM -ComputerName $_.name |Measure-Object MemoryAssigned -Sum).sum/1GB}}|Sort "AvailableMemory(GB)" -Descending $HyperVNode = $HyperVNodes | select -First 1 | Select-Object name | Format-Table -HideTableHeaders | Out-String $HyperVNode = $HyperVNode.Replace("`r`n","") $HyperVNode = $HyperVNode.Replace(" ","") write-host 'Hyper-V Node mit dem meisten verfügbaren RAM:' write-host $HyperVNode -ForegroundColor Green #------------------------------------------------------------# # Erstellt neue VM und verschieft sie in den Hyper-V-Cluster # #------------------------------------------------------------# New-PSSession -ComputerName $HyperVNode New-VM -ComputerName $HyperVNode -Name $VMname -Generation $VMGen -MemoryStartupBytes $Memory -Path $BesteDisk -SwitchName $Switch New-VHD -Path $PathDisk -SizeBytes $HDDSize -Dynamic Add-VMHardDiskDrive -VMName $VMname -path $PathDisk -ComputerName $HyperVNode Add-VMDvdDrive -VMName $VMname -ComputerName $HyperVNode Set-VMDvdDrive -VMName $VMname -ComputerName $HyperVNode -Path $PathISO Set-VMProcessor -VMName $VMname -ComputerName $HyperVNode -Count $CPU Add-ClusterVirtualMachineRole -Cluster $HyperVClusterDomain -Name $VMname -VirtualMachine $VMname Exit-PSSession
Update: Virtuelle Prozessoren wurden hinzugefügt. Standardwert wurde auf 4 gesetzt, da Updates oder sonstiges installieren kein Spass macht 😉
LikeLike