Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Deine Frage passt nicht in die anderen Bereiche, dann stelle sie hier.
Benutzeravatar
Holgi
Elite
Elite
Beiträge: 2217
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 231 Mal
Danke erhalten: 309 Mal
Gender:

Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von Holgi » 01.03.2023, 01:07

g-force hat geschrieben: 01.03.2023, 00:43 Lässt sich das nicht auch komplett über CMD lösen? Geht bei VirtualBox doch auch?
jein, CMD ja, aber mit Powershell Befehlen.
z.B. so:

Code: Alles auswählen

@echo off
setlocal enabledelayedexpansion
COLOR 0a
chcp 1252 >nul

:: BatchGetAdmin
:-------------------------------------
REM  --> Check for permissions
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params= %*
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params:"=""%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"

    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"

rem --------- Variablen fuer die VM setzen  -----------

rem *** VM: Anzahl der virtuellen CPUs
set cpu=4

rem *** VM: Start-RAM-Groesse in MByte ***
set startram=4096

rem *** VM: Minmale RAM-Groesse in MByte ***
set minram=2048

rem *** VM: Maximale RAM-Groesse in MByte ***
set maxram=4096

rem *** VM: Netzwerkswitch auswaehlen. Zum Aktivieren "rem" vor der naechsten Zeile entfernen und bei Bedarf Switchname in Anfuehrungsstrichen (') anpassen
set switch=-switchname 'default switch'

rem *** VM: Automatische Pruefpunkte an (1) oder aus (0)
set autocheckpoints=0

rem *** VM: Generation 1 (Legacy BIOS) oder 2 (UEFI)? ***
set gen=2

rem *** Nur für Generation 2: TPM aktiv? (0: aus, 1: an) ***
set TPM=0
if %gen%==2 set TPM=1

rem *** VHD Größe in GB
set VHDSize=64GB 

rem *** GEN1=vhd GEN2=vhdx
set format=vhd
if %gen%==2 set format=vhdx

rem *** Speicherpfad fuer VMs auslesen ***
echo.
set vmpfad=
for /f "tokens=3" %%a in ('reg query ^"HKLM^\SOFTWARE^\Microsoft^\Windows NT^\CurrentVersion^\Virtualization^" /v ^"DefaultExternalDataRoot^" 2^>nul') do set vmpfad=%%a
if "%vmpfad%."=="." set vmpfad=%public%\Documents\Hyper-V\Virtual hard disks\
cls
echo Gespeichert wird die VM unter: 
echo %vmpfad%
echo.

rem --------- Ende Variablen fuer die VM setzen  -----------
echo.
ECHO                                    \\!//
ECHO                                    (o o)
ECHO -------------------------------oOOo-(_)-oOOo-------------------------------
echo 		Im folgenden Schritt geben Sie der VM einen Namen.
echo 	      Sollte eine VM mit gleichem Namen bereits existieren,
echo 		   wird diese unwiederbringlich entfernt...
Echo ---------------------------------------------------------------------------
set /p VMName="geben Sie der VM einen Namen (z.B. Windows11Pro): "
echo.
cls
rem set /p ISO="Pfad zu den Windows Installationsdateien (z.B. C:\Windows11_TPM): "
set ISO=C:\%VMName%
echo.

echo *** Einige Pruefungen vorab ... ***
echo.

IF NOT EXIST C:\%VMName% (
echo Das Verzeichnis C:\%VMName% ist nicht vorhanden
goto Fehler
)

set operation=*** Skript braucht mindestens Windows 10 Version 1709 ***
for /f "tokens=3" %%a in ('reg query ^"HKLM^\SOFTWARE^\Microsoft^\Windows NT^\CurrentVersion^" /v ^"ReleaseID^"') do set versionhost=%%a
if %versionhost% lss 1709 goto fehler

set operation=*** Skript muss mit Administratorrechten laufen ***
whoami /groups | find "S-1-16-12288" > nul
if errorlevel 1 goto fehler

set operation=*** Hyper-V muss aktiviert sein ***
dism /online /get-features /format:table | find "Microsoft-Hyper-V " | find "Aktiviert" > nul
if errorlevel 1 goto fehler

set operation=*** Hyper-V-Modul fuer Windows PowerShell muss aktiviert sein ***
dism /online /get-features /format:table | find "Microsoft-Hyper-V-Management-PowerShell" | find "Aktiviert" > nul
if errorlevel 1 goto fehler

cls
echo 	    *** Keine Probleme gefunden, jetzt geht es los ***
echo.

Echo ********************************************************************
Echo                Erstelle virtuelle Maschine %VMName%           
echo			   aus dem Verzeichnis %ISO%                                                               
Echo                bitte warten Sie einen Augenblick ...             
Echo ********************************************************************

echo Der Virenschutz wird de-aktiviert
echo bitte warten ...
powershell.exe -command "Set-MpPreference -DisableRealtimeMonitoring $true"
powershell.exe -command "Set-MpPreference -MAPSReporting Disabled"
powershell.exe -command "Set-MpPreference -SubmitSamplesConsent NeverSend"
powershell.exe -command "Set-MpPreference -DisableIntrusionPreventionSystem $true"
powershell.exe -command "Set-MpPreference -DisableIOAVProtection $true" 
powershell.exe -command "Set-MpPreference -DisableScriptScanning $true"
powershell.exe -command "Set-MpPreference -EnableControlledFolderAccess Disabled"
powershell.exe -command "Set-MpPreference -EnableNetworkProtection Disabled" 
powershell.exe -command "Set-MpPreference -ScanOnlyIfIdleEnabled $false"
powershell.exe -command "Set-MpPreference -DisableRemovableDriveScanning $true"
powershell.exe -command "Set-MpPreference -DisableEmailScanning $true" 
powershell.exe -command "Set-MpPreference -PUAProtection Disabled"

powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c


PowerShell Stop-VM -Name "%VMName%" -Force >nul
PowerShell Remove-VM -Name "%VMName%" -Force >nul
PowerShell Remove-Item "$env:public\Documents\Hyper-V\Virtual hard disks\%VMName%.vhdx" -Force >nul
del "%public%\Documents\Hyper-V\Virtual hard disks\%VMName%.vhdx" /f /q 1>nul 2>nul
Echo "%VMName%" deleted !!

del "%systemdrive%\%VMName%.iso" /f /q >nul 2>nul

timeout /T 10 /NOBREAK >nul 2>nul

if exist "%ISO%\efi\microsoft\boot\cdboot-prompt.efi" goto burn

Ren "%ISO%\efi\microsoft\boot\cdboot.efi" "cdboot-prompt.efi"
Ren "%ISO%\efi\microsoft\boot\cdboot_noprompt.efi" "cdboot.efi"
Ren "%ISO%\efi\microsoft\boot\efisys.bin" "efisys_prompt.bin"
Ren "%ISO%\efi\microsoft\boot\efisys_noprompt.bin" "efisys.bin"

:burn
"%~dp0Oscdimg\X64\oscdimg.exe" -m -o -u2 -udfver102 -bootdata:2#p0,e,b"%~dp0Oscdimg\X64\etfsboot.com"#pEF,e,b"%~dp0Oscdimg\X64\efisys.bin" "%ISO%" "%systemdrive%\%VMName%.iso"
cls
echo Erstelle VM %VMName%
powershell new-vm -name '%vmname%' -NewVHDPath "%VMName%.vhdx" -NewVHDSizeBytes %VHDSize% -MemoryStartupBytes %startram%MB -generation %gen% %switch%

Echo Virtuelle Maschine anpassen...
powershell set-vm -name '%vmname%' -ProcessorCount %cpu% -DynamicMemory -MemoryMaximumBytes %maxram%MB -MemoryMinimumBytes %minram%MB -AutomaticCheckpointsEnabled %autocheckpoints% -CheckpointType Disabled
powershell Enable-VMIntegrationService -VMName '%vmname%' -Name 'Gastdienstschnittstelle'

if %gen%==2 (
	if %TPM%==1 (
		powershell Set-VMKeyProtector -VMName '%vmname%' -NewLocalKeyProtector
		powershell Enable-VMTPM -vmname '%vmname%' 
		)
	)
if %gen%==1 (
  powershell Remove-VMNetworkAdapter -vmname '%vmname%'
  powershell Add-VMNetworkAdapter -vmname '%vmname%' -IsLegacy $true
)

rem Add DVD Drive to Virtual Machine
powershell Add-VMDvdDrive -VMName '%vmname%' -Path $env:systemdrive\%VMName%.iso

rem Configure Virtual Machine to Boot from DVD
powershell Set-VMFirmware -VMname '%vmname%' -FirstBootDevice (Get-VMDvdDrive -VMName '%vmname%')[0]

rem Videoauflösung einstellen
powershell set-vmvideo -VMName '%vmname%' -ResolutionType Maximum -HorizontalResolution 1366 -VerticalResolution 768

rem automatische Start-/StoppAktionen einrichten
powershell Set-VM -VMName '%vmname%' -AutomaticStartAction StartIfRunning -AutomaticStopAction Save -Confirm:$false

rem ExposeVirtualizationExtensions
rem powershell Set-VMProcessor -VMName '%vmname%' -ExposeVirtualizationExtensions $true

echo.
powershell Start-VM -name '%vmname%'

echo.
powershell vmconnect $env:COMPUTERNAME '%vmname%'
goto eof


rem *** Fehlerbehandlung ***

:fehler
echo Es wurde ein Fehler gefunden
pause
:eof
echo Der Virenschutz wird aktiviert
echo bitte warten ...
powershell.exe -command "Set-MpPreference -DisableRealtimeMonitoring $false"
powershell.exe -command "Set-MpPreference -MAPSReporting Advanced"
powershell.exe -command "Set-MpPreference -SubmitSamplesConsent SendAllSamples"
powershell.exe -command "Set-MpPreference -DisableIntrusionPreventionSystem $false"
powershell.exe -command "Set-MpPreference -DisableIOAVProtection $false" 
powershell.exe -command "Set-MpPreference -DisableScriptScanning $false"
powershell.exe -command "Set-MpPreference -EnableControlledFolderAccess Enabled"
powershell.exe -command "Set-MpPreference -EnableNetworkProtection Enabled" 
powershell.exe -command "Set-MpPreference -ScanOnlyIfIdleEnabled:$false"
powershell.exe -command "Set-MpPreference -DisableRemovableDriveScanning:$false"
powershell.exe -command "Set-MpPreference -DisableEmailScanning:$false" 
powershell.exe -command "Set-MpPreference -PUAProtection Enabled"

powercfg /setactive 381b4222-f694-41f0-9685-ff5bb260df2e

exit

REM Credits to Axel Vahldiek/c't

oder das Original von c´t:
https://www.heise.de/ratgeber/c-t-Win2H ... 21599.html
https://ftp.heise.de/ct/listings/2021/2 ... _win11.zip
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114

Tante Google

Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von Tante Google » 01.03.2023, 01:07


Benutzeravatar
g-force
Elite
Elite
Beiträge: 2052
Registriert: 07.10.2016, 19:30
Hat sich bedankt: 282 Mal
Danke erhalten: 247 Mal
Gender:

Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von g-force » 01.03.2023, 01:11

Sorry, das ist mir zu hoch, geht nicht mehr in der 66er-Grips.
Es war als eine Vereinfachung zum Testen im "NTlite-Thread" gedacht.
Windows VISTA x64 - Integration ALLER Updates: viewtopic.php?t=29624
Windows 7 x86/x64 - Integration ALLER Updates: viewtopic.php?t=26485
Windows 8.1 x86/x64 - Integration ALLER Updates: viewtopic.php?t=28193
Windows XP x86/x64 ISO mit allen Updates: viewtopic.php?t=28348
Windows XP x86/x64 - Setup von WIM (XP2ESD): viewtopic.php?t=28372

Benutzeravatar
Holgi
Elite
Elite
Beiträge: 2217
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 231 Mal
Danke erhalten: 309 Mal
Gender:

Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von Holgi » 01.03.2023, 01:18

einfach mal als cmd abspeichern und auf einem Testrechner ausführen. Erklärt sich fast von selbst.
Löscht bereits vorhandene ISO und Hyper-V mit gleichem Namen -falls vorhanden- und erstellt dann die VM mit dem vorgegeben Namen und aus dem Verzeichnis mit den Windows Installationsdateien.
So teste ich eine neue VM nach der anderen.
Mehr nicht.
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114

Benutzeravatar
g-force
Elite
Elite
Beiträge: 2052
Registriert: 07.10.2016, 19:30
Hat sich bedankt: 282 Mal
Danke erhalten: 247 Mal
Gender:

Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von g-force » 01.03.2023, 01:26

Die "xxx.ps1" als CMD abspeichern? Oder habe ich das jetzt falsch verstanden?
Windows VISTA x64 - Integration ALLER Updates: viewtopic.php?t=29624
Windows 7 x86/x64 - Integration ALLER Updates: viewtopic.php?t=26485
Windows 8.1 x86/x64 - Integration ALLER Updates: viewtopic.php?t=28193
Windows XP x86/x64 ISO mit allen Updates: viewtopic.php?t=28348
Windows XP x86/x64 - Setup von WIM (XP2ESD): viewtopic.php?t=28372

Benutzeravatar
Holgi
Elite
Elite
Beiträge: 2217
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 231 Mal
Danke erhalten: 309 Mal
Gender:

Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von Holgi » 01.03.2023, 01:37

Das script von 1:07uhr ist als .cmd abzuspeichern.
Name egal. Du wolltest ja kein .ps1 mehr.
Wenn Powershell bei dir gar nicht geht? Mal schauen, ob es so geht. Sind aber Powershell Befehle drin.
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114

Benutzeravatar
Holgi
Elite
Elite
Beiträge: 2217
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 231 Mal
Danke erhalten: 309 Mal
Gender:

Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von Holgi » 01.03.2023, 10:07

vlt. wäre ja auch die wim2vhd(x) Lösung etwas wie dich? Erspart den Umweg über die ISO Erstellung.
Hatte ich hier irgendwo auch schon mal vorgestellt.
Ansonsten hier:
https://www.windowspro.de/wolfgang-somm ... ll-hyper-v
https://www.windowspro.de/tool/wim-imag ... ndowsimage
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114

Benutzeravatar
g-force
Elite
Elite
Beiträge: 2052
Registriert: 07.10.2016, 19:30
Hat sich bedankt: 282 Mal
Danke erhalten: 247 Mal
Gender:

Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von g-force » 01.03.2023, 22:11

Mein aktuelles Script sieht so aus, ich mußte einiges ändern:

Code: Alles auswählen

@echo off
setlocal enabledelayedexpansion
COLOR 0a
chcp 1252 >nul

:: BatchGetAdmin
:-------------------------------------
REM  --> Check for permissions
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params= %*
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params:"=""%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"

    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"

rem --------- Variablen fuer die VM setzen  -----------

rem *** VM: Anzahl der virtuellen CPUs
set cpu=2

rem *** VM: Start-RAM-Groesse in MByte ***
set startram=2048

rem *** VM: Minmale RAM-Groesse in MByte ***
set minram=2048

rem *** VM: Maximale RAM-Groesse in MByte ***
set maxram=8192

rem *** VM: Netzwerkswitch auswaehlen. Zum Aktivieren "rem" vor der naechsten Zeile entfernen und bei Bedarf Switchname in Anfuehrungsstrichen (') anpassen
set switch=-switchname 'VLAN'

rem *** VM: Automatische Pruefpunkte an (1) oder aus (0)
set autocheckpoints=0

rem *** VM: Generation 1 (Legacy BIOS) oder 2 (UEFI)? ***
set gen=2

rem *** Nur für Generation 2: TPM aktiv? (0: aus, 1: an) ***
set TPM=0
if %gen%==2 set TPM=0

rem *** VM: Sicherer Start
set secure=0

rem *** VHD Größe in GB
set VHDSize=64GB 

rem *** GEN1=vhd GEN2=vhdx
set format=vhd
if %gen%==2 set format=vhdx

rem *** Speicherpfad fuer VMs auslesen ***
echo.
set vmpfad=V:\HYPER-V
cls
echo Gespeichert wird die VM unter: 
echo %vmpfad%
echo.

rem --------- Ende Variablen fuer die VM setzen  -----------
echo.
ECHO                                    \\!//
ECHO                                    (o o)
ECHO -------------------------------oOOo-(_)-oOOo-------------------------------
echo 		Im folgenden Schritt geben Sie der VM einen Namen.
echo 	      Sollte eine VM mit gleichem Namen bereits existieren,
echo 		   wird diese unwiederbringlich entfernt...
Echo ---------------------------------------------------------------------------
set /p VMName="geben Sie der VM einen Namen (z.B. Windows11Pro): "
echo.
cls
rem set /p ISO="Pfad zu den Windows Installationsdateien (z.B. C:\Windows11_TPM): "
set ISO=C:\NTLITE\ISO
echo.

echo *** Einige Pruefungen vorab ... ***
echo.

IF NOT EXIST %VMPFAD% (
echo Das Verzeichnis %VMPFAD% ist nicht vorhanden
goto Fehler
)

set operation=*** Skript braucht mindestens Windows 10 Version 1709 ***
for /f "tokens=3" %%a in ('reg query ^"HKLM^\SOFTWARE^\Microsoft^\Windows NT^\CurrentVersion^" /v ^"ReleaseID^"') do set versionhost=%%a
if %versionhost% lss 1709 goto fehler

set operation=*** Skript muss mit Administratorrechten laufen ***
whoami /groups | find "S-1-16-12288" > nul
if errorlevel 1 goto fehler

set operation=*** Hyper-V muss aktiviert sein ***
dism /online /get-features /format:table | find "Microsoft-Hyper-V " | find "Aktiviert" > nul
if errorlevel 1 goto fehler

set operation=*** Hyper-V-Modul fuer Windows PowerShell muss aktiviert sein ***
dism /online /get-features /format:table | find "Microsoft-Hyper-V-Management-PowerShell" | find "Aktiviert" > nul
if errorlevel 1 goto fehler

cls
echo 	    *** Keine Probleme gefunden, jetzt geht es los ***
echo.

Echo ********************************************************************
Echo                Erstelle virtuelle Maschine %VMName%           
echo			   aus dem Verzeichnis %ISO%                                                               
Echo                bitte warten Sie einen Augenblick ...             
Echo ********************************************************************

powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c


PowerShell Stop-VM -Name "%VMName%" -Force >nul
PowerShell Remove-VM -Name "%VMName%" -Force >nul
PowerShell Remove-Item "%VMPFAD%\%VMName%.vhdx" -Force >nul
del "%VMPFAD%\%VMName%.vhdx" /f /q 1>nul 2>nul
Echo "%VMName%" deleted !!


echo Erstelle VM %VMName%
powershell new-vm -name '%vmname%' -NewVHDPath "%VMName%.vhdx" -NewVHDSizeBytes %VHDSize% -MemoryStartupBytes %startram%MB -generation %gen% %switch%

Echo Virtuelle Maschine anpassen...
powershell set-vm -name '%vmname%' -ProcessorCount %cpu% -DynamicMemory -MemoryMaximumBytes %maxram%MB -MemoryMinimumBytes %minram%MB -AutomaticCheckpointsEnabled %autocheckpoints% -CheckpointType Disabled
powershell Enable-VMIntegrationService -VMName '%vmname%' -Name 'Gastdienstschnittstelle'

if %gen%==2 (
	if %TPM%==1 (
		powershell Set-VMKeyProtector -VMName '%vmname%' -NewLocalKeyProtector
		powershell Enable-VMTPM -vmname '%vmname%' 
		)
	)
if %gen%==1 (
  powershell Remove-VMNetworkAdapter -vmname '%vmname%'
  powershell Add-VMNetworkAdapter -vmname '%vmname%' -IsLegacy $true
)

rem Add DVD Drive to Virtual Machine
powershell Add-VMDvdDrive -VMName '%vmname%' -Path '%ISO%\%VMName%.iso'

rem Configure Virtual Machine to Boot from DVD
powershell Set-VMFirmware -VMname '%vmname%' -FirstBootDevice (Get-VMDvdDrive -VMName '%vmname%')[0]

rem Videoauflösung einstellen
powershell set-vmvideo -VMName '%vmname%' -ResolutionType Maximum -HorizontalResolution 1600 -VerticalResolution 1200

rem automatische Start-/StoppAktionen einrichten
powershell Set-VM -VMName '%vmname%' -AutomaticStartAction StartIfRunning -AutomaticStopAction Save -Confirm:$false

rem ExposeVirtualizationExtensions
rem powershell Set-VMProcessor -VMName '%vmname%' -ExposeVirtualizationExtensions $true

echo.
powershell Start-VM -name '%vmname%'

echo.
powershell vmconnect $env:COMPUTERNAME '%vmname%'
goto eof


rem *** Fehlerbehandlung ***

:fehler
echo Es wurde ein Fehler gefunden
pause
:eof

exit

REM Credits to Axel Vahldiek/c't
Es funktioniert fast alles, die alte VM wird gelöscht, die neue VM eingerichtet und gestartet.
Obwohl die neue VHDX leer ist, kommt trotzdem ganz kurz die Abfrage "Zum Start von CD/DVD drücken Sie bitte den ANY KEY...".
Das geht leider so schnell, daß man nicht drücken kann - und ich will auch nicht drücken müssen. Wie kann ich das umgehen?

Außerdem suche ich noch den richtigen Parameter, um "Secure Boot" auszuschalten.
Windows VISTA x64 - Integration ALLER Updates: viewtopic.php?t=29624
Windows 7 x86/x64 - Integration ALLER Updates: viewtopic.php?t=26485
Windows 8.1 x86/x64 - Integration ALLER Updates: viewtopic.php?t=28193
Windows XP x86/x64 ISO mit allen Updates: viewtopic.php?t=28348
Windows XP x86/x64 - Setup von WIM (XP2ESD): viewtopic.php?t=28372

Benutzeravatar
Holgi
Elite
Elite
Beiträge: 2217
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 231 Mal
Danke erhalten: 309 Mal
Gender:

Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von Holgi » 01.03.2023, 22:26

dafür nutze ich die folgenden Zeilen in meinem .cmd batch:

Code: Alles auswählen

cls
rem altes ISO löschen
del "%~dp0%VMName%.iso" /f /q 

rem etwas warten
timeout /T 10 /NOBREAK >nul 2>nul

rem zum Verzeichnis mit den Windows Installationsdateien wechseln
cd %ISO%
cd efi\microsoft\boot

rem schauen ob noch Änderungen vorgenommen werden müssen (Press any Key)
if exist cdboot-prompt.efi goto burn

rem wenn ja, Dateien austauschen
Ren "cdboot.efi" "cdboot-prompt.efi"
Ren "cdboot_noprompt.efi" "cdboot.efi"
Ren "efisys.bin" "efisys_prompt.bin"
Ren "efisys_noprompt.bin" "efisys.bin"

neue ISO erstellen
:burn

"%ThisScriptsDirectory%Oscdimg\X64\oscdimg.exe" -m -o -u2 -udfver102 -bootdata:2#p0,e,b"%ThisScriptsDirectory%Oscdimg\X64\etfsboot.com"#pEF,e,b"%ThisScriptsDirectory%Oscdimg\X64\efisys.bin" %ISO% "%ThisScriptsDirectory%%VMName%.iso"
das mal nur so als Muster; ggf. müssen die Variablen noch angepasst werden
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114

Benutzeravatar
Holgi
Elite
Elite
Beiträge: 2217
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 231 Mal
Danke erhalten: 309 Mal
Gender:

Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von Holgi » 01.03.2023, 22:46

g-force hat geschrieben: 01.03.2023, 22:11 Außerdem suche ich noch den richtigen Parameter, um "Secure Boot" auszuschalten.
Set-VMFirmware -VMName %VMNAME% -DisableSecureBoot
SecureBoot ist bei einer Hyper-V Gen2 voreingestellt.
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114

Benutzeravatar
g-force
Elite
Elite
Beiträge: 2052
Registriert: 07.10.2016, 19:30
Hat sich bedankt: 282 Mal
Danke erhalten: 247 Mal
Gender:

Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von g-force » 01.03.2023, 23:09

Könntest Du mal versuchen, daß in mein Script einzubauen? Ich kriege es nicht hin.
Außerdem verstehe ich nicht ganz, was das Script macht. Wird die ISO gemountet, untersucht, verändert, dann wieder erstellt?
Windows VISTA x64 - Integration ALLER Updates: viewtopic.php?t=29624
Windows 7 x86/x64 - Integration ALLER Updates: viewtopic.php?t=26485
Windows 8.1 x86/x64 - Integration ALLER Updates: viewtopic.php?t=28193
Windows XP x86/x64 ISO mit allen Updates: viewtopic.php?t=28348
Windows XP x86/x64 - Setup von WIM (XP2ESD): viewtopic.php?t=28372

Benutzeravatar
Holgi
Elite
Elite
Beiträge: 2217
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 231 Mal
Danke erhalten: 309 Mal
Gender:

Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von Holgi » 02.03.2023, 00:00

g-force hat geschrieben: 01.03.2023, 23:09 Außerdem verstehe ich nicht ganz, was das Script macht. Wird die ISO gemountet, untersucht, verändert, dann wieder erstellt?
der Grundgedanke hinter dem Ganzen ist, wie wir beide es gerne hätten:
schnell mal eben ein Windows System (vornehmlich Windows 10 bzw. Windows 11 mit TPM) in einer neu angelegten Hyper-VM (Gen2) anzulegen, ohne den Hyper-V Manager bemühen zu müssen.
Darüberhinaus soll, - wenn denn der Name der VM bzw. das Verzeichnis mit den Windows Installationsdateien (aus den nachfolgend immer erst eine ISO erzeugt wird - die alte ISO und die VM gelöscht werden.

Wenn also beispielsweise mal eine Änderung an der autounattend.xml oder an der install.wim bzw. install.esd in dem Verzeichnis (deinem Beispiel folgenden NTLite) mit den Windows Installationsdateien vorgenommen wurde und es soll getestet werden, ob und oder wie sich das nun verhält, dann einfach das Script aufgerufen:
- alte ISO löschen
- ISO neu erstellen
- VM löschen
- VM neu anlegen

usw. usw. >
Ich nenne es "fire and forget"

Da ja auch noch die autounattend.xml mit eingebunden ist, kann man sich nach dem Start des Scripts anderen Dingen widmen.
Irgendwann kommt man an den PC zurück und bestenfalls läuft dann schon die neue VM in einem neuen Fenster.

Ich gehe in meinem Script so weit, dass alles den gleichen Namen hat:
- die ISO
- das Verzeichnis mit den Windows Installationsdateien (bei mir immer unter C:\; wäre also hier C:\NTLite)
- der Name der VM

so behalte ich am besten den Überblick, was / wozu gehört (welche vhdx, zu welcher iso, mit welchen Installationsdateien erzeugt)

Einige Sachen kann man sicherlich weglassen:
- Energieschema auf High Performance setzen (powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c)
- bei mir noch: den Defender kurzfristig ausschalten
usw.
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114

Benutzeravatar
Holgi
Elite
Elite
Beiträge: 2217
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 231 Mal
Danke erhalten: 309 Mal
Gender:

Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von Holgi » 02.03.2023, 00:48

Könntest Du mal versuchen, daß in mein Script einzubauen? Ich kriege es nicht hin.
Gehst du in deinem Script von einer bereits vorliegenden fertigen ISO aus (z.B. PREMIUM_ESD.iso) oder soll die ISO erst noch aus einem Verzeichnis mit den Windows Installationsdateien (z.B. C:\NTLITE\ISO\) erstellt werden?

Der VM wird ja mit der Zeile:

Code: Alles auswählen

rem Add DVD Drive to Virtual Machine
powershell Add-VMDvdDrive -VMName '%vmname%' -Path '%ISO%\%VMName%.iso'
eine (Windows-)ISO als Installationslaufwerk zugeordnet.
Dann müßte aber unter C:\NTLITE\ISO
(wegen der Zeile)

Code: Alles auswählen

set ISO=C:\NTLITE\ISO
bereits eine fertige ISO liegen, welche den Namen trägt, den du zu Beginn des Scripts vergeben hast

Code: Alles auswählen

set /p VMName="geben Sie der VM einen Namen (z.B. Windows11Pro): "
Deshalb habe ich ja in meinem Script noch die Burn-Zeilen mit drin:

Code: Alles auswählen

:burn
rem "%~dp0Oscdimg\X64\oscdimg.exe" -m -o -u2 -udfver102 -bootdata:2#p0,e,b"%~dp0Oscdimg\X64\etfsboot.com"#pEF,e,b"%~dp0Oscdimg\X64\efisys.bin" %ISO% "%VMName%.iso"

"%ThisScriptsDirectory%Oscdimg\X64\oscdimg.exe" -m -o -u2 -udfver102 -bootdata:2#p0,e,b"%ThisScriptsDirectory%Oscdimg\X64\etfsboot.com"#pEF,e,b"%ThisScriptsDirectory%Oscdimg\X64\efisys.bin" %ISO% "%ThisScriptsDirectory%%VMName%.iso"
Es wird damit erst noch eine ISO (%VMNAME%) aus dem Verzeichnis (%ISO%) mit dem MS eigenen Befehl oscdimg.exe erzeugt.
Dieses OSCDIMG - Zeugs (etfsboot.com, efisys.bin, oscdimg.exe liegt in der X64 Variante im gleichen Verzeichnis mit dem auszuführenden Script (Oscdimg\X64\...)

Die Zeile

Code: Alles auswählen

del "%~dp0%VMName%.iso" /f /q 

macht da also keinen Sinn, da ja dort eine ISO im Scriptverzeichnis gelöscht wird (wenn überhaupt vorhanden).
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114

Benutzeravatar
g-force
Elite
Elite
Beiträge: 2052
Registriert: 07.10.2016, 19:30
Hat sich bedankt: 282 Mal
Danke erhalten: 247 Mal
Gender:

Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von g-force » 02.03.2023, 07:04

Vielen Dank für die gute Erklärung!
Ja, wie gewohnt habe ich eine fertige ISO im Verzeichnis "C:\NTLITE\ISO" liegen. Auf die Idee, daß das Script einen entpackten ISO-Ordner erwatertet, bin ich gar nicht gekommen. Das erklärt nun auch meine Verwunderung bei Durchsicht des Scripts. Ich trage am Anfang der Script-Verarbeit den Namen der ISO (ohne Dateiendung) ein.
Das EFI-Zeugs kann ich mir dann ja schenken, ich suche mir eine Lösung, die das schon vorher bearbeitet. Ich meine sogar, daß es da was in NTlite gibt. Den Defender-Teil hatte ich schon rausgenommen.
Zuletzt geändert von g-force am 02.03.2023, 08:12, insgesamt 1-mal geändert.
Windows VISTA x64 - Integration ALLER Updates: viewtopic.php?t=29624
Windows 7 x86/x64 - Integration ALLER Updates: viewtopic.php?t=26485
Windows 8.1 x86/x64 - Integration ALLER Updates: viewtopic.php?t=28193
Windows XP x86/x64 ISO mit allen Updates: viewtopic.php?t=28348
Windows XP x86/x64 - Setup von WIM (XP2ESD): viewtopic.php?t=28372

Benutzeravatar
g-force
Elite
Elite
Beiträge: 2052
Registriert: 07.10.2016, 19:30
Hat sich bedankt: 282 Mal
Danke erhalten: 247 Mal
Gender:

Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von g-force » 02.03.2023, 08:11

Hier habe ich wohl noch einen Fehler drin, es wird keine ISO erstellt in "%ISO%":

Code: Alles auswählen

rem zum Verzeichnis mit den Windows Installationsdateien wechseln
cd %ISO%\%VMNAME%
cd efi\microsoft\boot

rem schauen ob noch Änderungen vorgenommen werden müssen (Press any Key)
if exist cdboot-prompt.efi goto burn

rem wenn ja, Dateien austauschen
Ren "cdboot.efi" "cdboot-prompt.efi"
Ren "cdboot_noprompt.efi" "cdboot.efi"
Ren "efisys.bin" "efisys_prompt.bin"
Ren "efisys_noprompt.bin" "efisys.bin"

rem neue ISO erstellen
:burn
rem "%~dp0Oscdimg\X64\oscdimg.exe" -m -o -u2 -udfver102 -bootdata:2#p0,e,b"%~dp0Oscdimg\X64\etfsboot.com"#pEF,e,b"%~dp0Oscdimg\X64\efisys.bin" %ISO% "%VMName%.iso"

"%ISO%\%VMName%Oscdimg\X64\oscdimg.exe" -m -o -u2 -udfver102 -bootdata:2#p0,e,b"%ISO%\%VMName%Oscdimg\X64\etfsboot.com"#pEF,e,b"%ISO%\%VMName%Oscdimg\X64\efisys.bin" "%VMName%.iso"
Windows VISTA x64 - Integration ALLER Updates: viewtopic.php?t=29624
Windows 7 x86/x64 - Integration ALLER Updates: viewtopic.php?t=26485
Windows 8.1 x86/x64 - Integration ALLER Updates: viewtopic.php?t=28193
Windows XP x86/x64 ISO mit allen Updates: viewtopic.php?t=28348
Windows XP x86/x64 - Setup von WIM (XP2ESD): viewtopic.php?t=28372

Benutzeravatar
Holgi
Elite
Elite
Beiträge: 2217
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 231 Mal
Danke erhalten: 309 Mal
Gender:

Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von Holgi » 02.03.2023, 08:28

NTLite wollte das mit "Press any Key" erwägen einzubinden. Ist wohl nichts draus geworden:
https://www.ntlite.com/community/index. ... -dvd.2147/
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114

Antworten