flashback830
Goto Top

Hyper-V VM mit PowerShell erstellen - Fehler im Skript!?

Hallo,

ich möchte mit der Powershell eine Hyper-V VM erstellen. Aber irgendwie spuckt der die ganze Zeit nur Fehler. Vielleicht kann mir einer von euch weiterhelfen und mir sagen was ich Falsch mache face-smile

 $PSVersionTable 

Name                           Value
----                           -----
PSVersion                      7.3.2
PSEdition                      Core
GitCommitId                    7.3.2
OS                             Microsoft Windows 10.0.20348
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

# Konfigurationsvariablen abfragen
$VMName = Read-Host "Gib den Namen der virtuellen Maschine ein"  
$MemoryGBStartup = Read-Host "Gib die Start-RAM-Größe (in GB) der virtuellen Maschine ein"  
$MemoryGBMinimum = Read-Host "Gib die minimale RAM-Größe (in GB) der virtuellen Maschine ein"  
$MemoryGBMaximum = Read-Host "Gib die maximale RAM-Größe (in GB) der virtuellen Maschine ein"  
$NumCores = Read-Host "Gib die Anzahl der vCPUs der virtuellen Maschine ein"  

$IsoPath = "C:\ISO\debian-11.6.0-amd64-netinst.iso"  
$VHDSize = 200GB
$SwitchName = "VSwitch_extern"  
$ConfigPath = "C:\Hyper-V\Config\"  
$VHDPath = "D:\Hyper-V\Data\$VMName.vhdx"  

# Umwandlung von GB in Byte
$MemoryBytesStartup = $MemoryGBStartup * 1024 * 1024 * 1024
$MemoryBytesMinimum = $MemoryGBMinimum * 1024 * 1024 * 1024
$MemoryBytesMaximum = $MemoryGBMaximum * 1024 * 1024 * 1024

# VM erstellen
New-VM -Name $VMName -Path $ConfigPath -MemoryStartupBytes $MemoryBytesStartup -MemoryMinimumBytes $MemoryBytesMinimum -MemoryMaximumBytes $MemoryBytesMaximum -SwitchName $SwitchName -Generation 2 -BootDevice VHD -VHDPath $VHDPath -VHDSizeBytes $VHDSize -NumaNodes 0 -CpuCount $NumCores -DynamicMemoryEnabled $true

# ISO hinzufügen
Add-VMDvdDrive -VMName $VMName -Path $IsoPath

# VM starten
Start-VM -Name $VMName

und der / die FGehler

Gib den Namen der virtuellen Maschine ein: DOCKER01
Gib die Start-RAM-Größe (in GB) der virtuellen Maschine ein: 4
Gib die minimale RAM-Größe (in GB) der virtuellen Maschine ein: 2
Gib die maximale RAM-Größe (in GB) der virtuellen Maschine ein: 8
Gib die Anzahl der vCPUs der virtuellen Maschine ein: 4
OperationStopped: C:\Scripts\Backup\VMerstellen.ps1:15:1
Line |
  15 |  $MemoryBytesStartup = $MemoryGBStartup * 1024 * 1024 * 1024
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Exception of type 'System.OutOfMemoryException' was thrown.  
OperationStopped: C:\Scripts\Backup\VMerstellen.ps1:16:1
Line |
  16 |  $MemoryBytesMinimum = $MemoryGBMinimum * 1024 * 1024 * 1024
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Exception of type 'System.OutOfMemoryException' was thrown.  
OperationStopped: C:\Scripts\Backup\VMerstellen.ps1:17:1
Line |
  17 |  $MemoryBytesMaximum = $MemoryGBMaximum * 1024 * 1024 * 1024
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Exception of type 'System.OutOfMemoryException' was thrown.  
New-VM: C:\Scripts\Backup\VMerstellen.ps1:20:60
Line |
  20 |  … ame -Path $ConfigPath -MemoryStartupBytes $MemoryBytesStartup -Memory …
     |                                              ~~~~~~~~~~~~~~~~~~~
     | Cannot validate argument on parameter 'MemoryStartupBytes'. The argument is null. Provide a valid value for the argument, and then try running the command again.  
Add-VMDvdDrive: C:\Scripts\Backup\VMerstellen.ps1:23:1
Line |
  23 |  Add-VMDvdDrive -VMName $VMName -Path $IsoPath
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Von Hyper-V wurde kein virtueller Computer mit dem Namen "DOCKER01" gefunden.  
Start-VM: C:\Scripts\Backup\VMerstellen.ps1:26:1
Line |
  26 |  Start-VM -Name $VMName
     |  ~~~~~~~~~~~~~~~~~~~~~~
     | Von Hyper-V wurde kein virtueller Computer mit dem Namen "DOCKER01" gefunden.  

OutOfMemory kann es definitiv nicht sein:
ram

Content-ID: 5980684891

Url: https://administrator.de/forum/hyper-v-vm-mit-powershell-erstellen-fehler-im-skript-5980684891.html

Ausgedruckt am: 05.04.2025 um 19:04 Uhr

TK1987
TK1987 14.02.2023 aktualisiert um 19:05:41 Uhr
Goto Top
Moin,

Zitat von @flashback830:
OutOfMemory kann es definitiv nicht sein:
doch, die Rede ist vom zugewiesenen Konsolenspeicher, der scheint vollgelaufen zu sein
# Konsolenspeicher anzeigen
Get-Item wsman:\localhost\shell\maxmemoryperShellMB

# Konsolenspeicher auf 2048MiB setzen
Set-Item wsman:\localhost\shell\maxmemoryperShellMB 2048

BTW, die Umwandlung in GB geht mit Powershell auch simpel:
# Umwandlung von GB in Byte
$MemoryBytesStartup = $MemoryGBStartup * 1GB

Gruß Thomas
Dani
Dani 14.02.2023 aktualisiert um 20:03:20 Uhr
Goto Top
Moin,
zu den Anmerkungen von Kollege @TK1987 solltest du auch mit Types bei den Variablen arbeiten.
PS C:\> [int64] $MemoryGBStartup = 2
PS C:\> [int64] $MemoryBytesMinimum = 4 * 1024 * 1024 * 1024
PS C:\> $MemoryBytesMinimum.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Int64                                    System.ValueType
Somit sollten alle Fehler nach und nach verschwinden.


Gruß,
Dani
mbehrens
mbehrens 14.02.2023 um 20:01:11 Uhr
Goto Top
Zitat von @flashback830:

15 | $MemoryBytesStartup = $MemoryGBStartup * 1024 * 1024 * 1024
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Exception of type 'System.OutOfMemoryException' was thrown.

OutOfMemory kann es definitiv nicht sein:

Doch, genau das ist es. Zeichenketten können nur eine gewisse maximale Länge haben.

$MemoryGBStartup hat den Inhalt "4" und ist vom Typ String. Der * Operator macht nun 1024*1024*1024 Wiederholungen der Zeichenkette und versucht diese zu speichern, was fehl schlägt (OutOfMemoryException).

Besser wäre es, die Variablen vorher passend zu deklarieren oder eine Typumwandlung vorzunehmen.
flashback830
flashback830 14.02.2023 um 20:28:08 Uhr
Goto Top
Danke soweit schonmal, Out of memory wäre damit schonmal geklärt allerdings der Rest noch nicht

PS C:\Scripts> Set-Item wsman:\localhost\shell\maxmemoryperShellMB 2048
WARNING: The updated configuration might affect the operation of the plugins having a per plugin quota value greater than 2048. Verify the configuration of all the registered plugins and change the per plugin quota values for the affected plugins.
PS C:\Scripts> Get-Item wsman:\localhost\shell\maxmemoryperShellMB

   WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Shell

Type            Name                           SourceOfValue   Value
----            ----                           -------------   -----
System.String   MaxMemoryPerShellMB                            2048

PS C:\Scripts>
PS C:\Scripts> . 'c:\Scripts\Backup\VMerstellen.ps1'  
Gib den Namen der virtuellen Maschine ein: Test01
New-VM: C:\Scripts\Backup\VMerstellen.ps1:20:80
Line |
  20 |  … h -MemoryStartupBytes $MemoryBytesStartup -MemoryMinimumBytes $Memory …
     |                                              ~~~~~~~~~~~~~~~~~~~
     | A parameter cannot be found that matches parameter name 'MemoryMinimumBytes'.  
Add-VMDvdDrive: C:\Scripts\Backup\VMerstellen.ps1:23:1
Line |
  23 |  Add-VMDvdDrive -VMName $VMName -Path $IsoPath
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Von Hyper-V wurde kein virtueller Computer mit dem Namen "Test01" gefunden.  
Start-VM: C:\Scripts\Backup\VMerstellen.ps1:26:1
Line |
  26 |  Start-VM -Name $VMName
     |  ~~~~~~~~~~~~~~~~~~~~~~
     | Von Hyper-V wurde kein virtueller Computer mit dem Namen "Test01" gefunden.  
PS C:\Scripts> 

Die Umwandlung habe ich auch angepasst:
$MemoryBytesStartup = $MemoryGBStartup * 1GB
$MemoryBytesMinimum = $MemoryGBMinimum * 1GB
$MemoryBytesMaximum = $MemoryGBMaximum * 1GB
mbehrens
mbehrens 14.02.2023 um 20:38:00 Uhr
Goto Top
Zitat von @flashback830:
New-VM: C:\Scripts\Backup\VMerstellen.ps1:20:80
Line |
20 | … h -MemoryStartupBytes $MemoryBytesStartup -MemoryMinimumBytes $Memory …
| ~~~~~~~~~~~~~~~~~~~
| A parameter cannot be found that matches parameter name 'MemoryMinimumBytes'.

Wie man der Dokumentation zu New-VM entnehmen kann, gibt es keinen solchen Parameter.