Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz
- Holgi
- Elite
- Beiträge: 2663
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 324 Mal
- Danke erhalten: 410 Mal
- Gender:
Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz
ich habe jetzt mit dem Script von ct mal ein wenig rumgespielt. Funktioniert grds. gut.
Es ist zu beachten, dass zunächst eine Verknüpfung zum Script (*.cmd) hergestellt werden sollte/muss. Diese Verknüpfung dann mit Admin-Rechten ausstatten. Dann einfach z.B. die ISO auf die Verlinkung ziehen und schon geht es los.
Was mich stört:
ich habe mit einer Server vNExt Standard (Desktopdarstellung) experimentiert. Da wird der Dateiname der vhdx ellenlang und auch noch abgeschnitten. Darüberhinaus landet die vhdx nicht in meinem Standardverzeichnis für die Virtual Hard Disks (C:\Users\Public\Documents\Hyper-V\Virtual hard disks), sondern in "C:\ProgramData\Microsoft\Windows\Hyper-V\Windows_Server_2022_Standard_(Desktopdars_x64_de-DE_Gen2_10.0.20317"
Ich sag ja: viel zu lang!
Weiß jemand, wie man das ändern kann?
Noch ein Verbesserungvorschlag von mir zu dem ct-Script:
Die VM nicht nur starten, sondern auch gleich verbinden und bei den Integrationsdiensten auch gleich die Gastdienste mit integrieren:
english: Guest Service Interface
deutsch: Gastdienstschnittstelle
Es ist zu beachten, dass zunächst eine Verknüpfung zum Script (*.cmd) hergestellt werden sollte/muss. Diese Verknüpfung dann mit Admin-Rechten ausstatten. Dann einfach z.B. die ISO auf die Verlinkung ziehen und schon geht es los.
Was mich stört:
ich habe mit einer Server vNExt Standard (Desktopdarstellung) experimentiert. Da wird der Dateiname der vhdx ellenlang und auch noch abgeschnitten. Darüberhinaus landet die vhdx nicht in meinem Standardverzeichnis für die Virtual Hard Disks (C:\Users\Public\Documents\Hyper-V\Virtual hard disks), sondern in "C:\ProgramData\Microsoft\Windows\Hyper-V\Windows_Server_2022_Standard_(Desktopdars_x64_de-DE_Gen2_10.0.20317"
Ich sag ja: viel zu lang!
Weiß jemand, wie man das ändern kann?
Noch ein Verbesserungvorschlag von mir zu dem ct-Script:
Die VM nicht nur starten, sondern auch gleich verbinden und bei den Integrationsdiensten auch gleich die Gastdienste mit integrieren:
english: Guest Service Interface
deutsch: Gastdienstschnittstelle
Code: Alles auswählen
set operation=*** Temporaere Laufwerke wieder aushaengen ***
echo %weiss%%operation%%gruen%
echo.
if exist %workdir%%folder% rd /q /s %workdir%%folder%
if not %efilw%.==. if not %vhdlw%.==. if not %efilw%.==%vhdlw%. mountvol %efilw%: /d >nul 2>nul
if exist %vhdlw%: powershell dismount-vhd -path '%vmpfad%%vmname%\%vmname%.%format%'
if exist %isolw%: powershell "dismount-diskimage '%iso%'"
powershell Enable-VMIntegrationService -VMName '%vmname%' -Name 'Gastdienstschnittstelle'
set operation=*** Starte VM ***
echo %weiss%%operation%%gruen%
echo.
powershell Start-VM -name '%vmname%'
powershell vmconnect $env:COMPUTERNAME '%vmname%'
echo %weiss%*** Fertig! ***
echo.
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
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
Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz
Naja im Prinzip weißt du doch wie es geht. Selbst ist die Frau.
Das mit ISO auf … ziehen wollte ich dir auch für deine .msu Kürzung empfehlen.
Hier kann man doch einfach was weg löschen...
Zeile x: if "%vmpfad%."=="." set vmpfad=%allusersprofile%\Microsoft\Windows\Hyper-V\
Zeile y: echo create vdisk file=%vmpfad%%vmname%\%vmname%.%format% maximum=%vhdsize% type=%typ% > %workdir%%folder%\diskpart.txt
Das mit ISO auf … ziehen wollte ich dir auch für deine .msu Kürzung empfehlen.
Hier kann man doch einfach was weg löschen...
Zeile x: if "%vmpfad%."=="." set vmpfad=%allusersprofile%\Microsoft\Windows\Hyper-V\
Zeile y: echo create vdisk file=%vmpfad%%vmname%\%vmname%.%format% maximum=%vhdsize% type=%typ% > %workdir%%folder%\diskpart.txt
- Holgi
- Elite
- Beiträge: 2663
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 324 Mal
- Danke erhalten: 410 Mal
- Gender:
Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz
Aber eben nur im Prinzip.Naja im Prinzip weißt du doch wie es geht.
Ich bin jetzt soweit:
den Namen der VM habe ich in den Variablen des Scripts festgelegt > läuft!
Aber:
beim Verzeichnis für die VM gibt es Probleme. Liegt wohl irgendwie an den Leerzeichen von meinem Wunschverzeichnis (C:\Users\Public\Documents\Hyper-V\Virtual hard disks).
Mit dem u.a. abgeänderten Script schaffe ich es, die VM in "C:\Users\Public\Documents\Hyper-V\" abzulegen. Leider aber nicht in den Unterordner "Virtual hard disks". Da kommt immer eine Fehlermeldung. Ich habe schon hier und da Anführungszeichen gesetzt, aber leider ohne Erfolg.
Vlt hast du darüberhinaus auch noch eine Lösung parat, wie man die VM-Dateien mit der Endung .vmcx, .vmrs und .vmgs in das Standardverzeichnis bekommt (bei mir "C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines").
Das Script von ct trägt die Dateien zusammen mit der .vhdx-Datei ein (also im Augenblick
"C:\Users\Public\Documents\Hyper-V\" (Virtual hard disks)
Code: Alles auswählen
@echo off
setlocal enabledelayedexpansion
set Hinweis=Bitte lesen Sie unbedingt die Anleitung zu diesem Skript in c't 20/2020!
rem --------- Variablen fuer das Skript setzen -----------
rem *** Arbeitsverzeichnis ***
rem Pfad des Ordners, in dem das Skript liegt.
rem Falls eine Antwortdatei in die VHD-Datei soll, muss sie
rem als "autounattend.xml" ebenfalls hier liegen.
set workdir=%~d0%~p0
rem *** Temporaerer Unterordner ***
rem Wird standardmaessig im Arbeitsverzeichnis erstellt.
set folder=%~n0-tmp
rem --------- Variablen fuer die VM setzen -----------
rem *** VM: Anzahl der virtuellen CPUs
set cpu=4
rem *** VM: Start-RAM-Groesse in MByte ***
set startram=2048
rem *** VM: Minmale RAM-Groesse in MByte ***
set minram=1024
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 *** Namen der VM festlegen ***
set vmname=Server_vNext
rem --------- Variablen fuer die VHD(x) setzen -----------
rem *** VHD: (maximale) Dateigroesse in MByte ***
set vhdsize=127000
rem *** VHD-Typ: 0 (feste Groesse) oder 1 (dynamisch wachsend) ***
set vhdtyp=1
rem *** VHD: Partitionsgroesse Boot-/EFI-Partition ***
set partboot=500
rem *** VHD: Partitionsgroesse MSR-Partition ***
set partmsr=128
rem *** VHD: Partitionsgroesse Recovery-Partition ***
set partre=1000
rem --------- Variablen fuer die unbeaufsichtigte Installation -----------
rem *** 64-Bit-Antwortdatei ***
set autox64=Autounattendx64.xml
rem *** 32-Bit-Antwortdatei ***
set autox86=Autounattendx86.xml
rem ------------- Ende der Anpassungen -----------
set operation=*** Hilfe erwuenscht? ***
if /i %1.==. goto hilfe
if /i %1.==/?. goto hilfe
if /i %1.==-?. goto hilfe
if /i %1.==/h. goto hilfe
if /i %1.==-h. goto hilfe
if /i %1.==--h. goto hilfe
if /i %1.==/help. goto hilfe
if /i %1.==-help. goto hilfe
if /i %1.==--help. goto hilfe
rem *** Optik anpassen ***
cls
color 0F
set farbtmp=
for /f "tokens=3" %%b in ('reg query ^"HKLM^\Software^\Microsoft^\Windows NT^\CurrentVersion^" /v ^"ReleaseID^" 2^>nul') do set farbtmp=%%b >nul 2>nul
if "%farbtmp%."=="." goto start
set ESC=
set weiss=%esc%[97m
set gruen=%esc%[92m
set rot=%esc%[91m
set gelb=%esc%[93m
:start
echo.%gelb%
echo ****************************************************
echo *** Willkommen bei c't-Win2Hyper-V ***
echo ****************************************************
echo.
echo %hinweis%%weiss%
echo.
echo *** Einige Pruefungen vorab ... ***
echo.
set operation=*** Temporaerer Ordner bereits vorhanden? ***
if not exist %workdir%%folder% goto istfrei
set /a foldernr=1
set tempfolder=%folder%
:ring
set /a foldernr=%foldernr%+1
set folder=%tempfolder%-%foldernr%
if exist %workdir%%folder% goto ring
:istfrei
set operation=*** Skript braucht mindestens Windows 10 Versin 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 fehler1
set operation=*** Skript muss mit Administratorrechten laufen ***
whoami /groups | find "S-1-16-12288" > nul
if errorlevel 1 goto fehler1
set operation=*** Hyper-V muss aktiviert sein ***
dism /online /get-features /format:table | find "Microsoft-Hyper-V " | find "Aktiviert" > nul
if errorlevel 1 goto fehler1
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 fehler1
set operation=*** Es muss eine ISO-, WIM- oder ESD-Datei uebergeben werden ***
set pfad=%*
set pfad="%pfad:"=%"
if .%pfad:~-4,3% neq .wim if .%pfad:~-4,3% neq .esd if .%pfad:~-4,3% neq .iso goto fehler1
echo *** Keine Probleme gefunden, jetzt geht es los ***
echo.
if .%pfad:~-4,3% neq .iso (
set wim=%pfad%
goto wahl
)
set operation=*** ISO-Datei einbinden ***
echo %weiss%%operation%%gruen%
set iso="%pfad:"=%"
powershell "mount-diskimage '%iso%'"
if errorlevel 1 goto fehler2
set isolw=
for /f "skip=3" %%i in ('powershell "get-diskimage '%iso%' | get-volume | select driveletter"') do set isolw=%%i
if "%isolw%."=="." goto fehler2
set operation=*** ISO-Datei muss WIM- oder ESD-Datei enthalten ***
if exist %isolw%:\sources\install.esd (
set wim=%isolw%:\sources\install.esd
) else if exist %isolw%:\sources\install.wim (
set wim=%isolw%:\sources\install.wim
) else (
goto fehler1
)
if errorlevel 1 goto fehler2
:wahl
set operation=*** Image auswaehlen ***
echo %weiss%%operation%%gruen%
set index=1
set letztenummer=1
for /f "tokens=1,2* delims=: " %%L in ('%windir%\system32\dism /get-wiminfo /wimfile:%wim%') do (
if "%%L"=="Index" set /a letztenummer=%%M
)
if %letztenummer% equ 1 goto weiter
%windir%\system32\dism /english /get-wiminfo /wimfile:%wim%
if errorlevel 1 goto fehler2
echo.%gelb%
set /p Index=Nummer des Images eingeben:
echo.
set operation=*** Pruefe ausgewaehltes Image ***
echo %weiss%%operation%%gruen%
set operation=*** Ausgewaehltes Image muss vorhanden sein ***
if %index% gtr %letztenummer% goto fehler1
if %index% lss 1 goto fehler1
echo.
:weiter
set Operation=*** In Generation-2-VMs laeuft nur x64-Windows ***
for /f "tokens=*" %%L in ('%windir%\system32\dism /english /get-wiminfo /wimfile:%wim% /index:%index% ^| find "Architecture"') do (set archtmp=%%L)
set architektur=%archtmp:~15%
if %gen%==2 if not %architektur%==x64 goto fehler1
set Operation=*** In Generation-2-VMs laufen weder Vista noch Windows 7 ***
for /f "tokens=*" %%L in ('%windir%\system32\dism /english /get-wiminfo /wimfile:%wim% /index:%index% ^| find "Version"') do (set vertmp=%%L)
set version=%vertmp:~10%
set alter=neu
if not %version:~0,3%==6.2 if not %version:~0,3%==6.3 if not %version:~0,3%==6.4 if not %version:~0,3%==10. set alter=alt
if %gen%==2 if %alter%==alt goto fehler1
echo %gruen%OK
echo.
set Operation=*** Speicherpfad fuer VMs auslesen ***
echo %weiss%%operation%%gruen%
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\
echo Gespeichert wird die VM unter: %vmpfad%
echo.
pause
set Operation=*** Temporaeren Ordner anlegen ***
echo %weiss%%operation%%gruen%
echo.
md %workdir%%folder%
echo Temporaerer Ordner angelegt: %workdir%%folder%
echo.
set operation=*** Release-ID auslesen ***
echo %weiss%%operation%%gruen%
echo.
%workdir%7z.exe e %wim% -o%workdir%%folder% %index%\Windows\System32\config\Software >nul 2>nul
reg load HKLM\VHD %workdir%%folder%\software >nul 2>nul
if errorlevel 1 goto fehler2
set reltmp=
for /f "tokens=3" %%b in ('reg query ^"HKLM^\VHD^\Microsoft^\Windows NT^\CurrentVersion^" /v ^"ReleaseID^" 2^>nul') do set reltmp=%%b >nul 2>nul
if "%reltmp%."=="." echo Keine Release-ID gefunden. && goto unload
echo Release-ID ist %reltmp%
set release=%reltmp%_
:unload
reg unload HKLM\VHD >nul 2>nul
if errorlevel 1 goto fehler2
echo.
md %vmpfad%%vmname%
echo Als Name der VM wird festgelegt: %vmname%
echo.
set operation=*** Freien Laufwerksbuchstaben fuer Windows-Partition in VHD(X) suchen ***
echo %weiss%%operation%%gruen%
echo.
for %%l in (P Q R S T U V W X Y Z D E F G H I J K L M N O) do (
set vhdlw=%%l
mountvol %%l: /L >nul
if errorlevel 1 (
subst | findstr /B "%%l:" >nul
if errorlevel 1 (
net use %%l: >nul 2>&1
if errorlevel 1 goto weiter2
)
)
)
goto fehler1
:weiter2
echo Verwende %vhdlw%:
echo.
subst %vhdlw%: %workdir%%folder%
set operation=*** Freien Laufwerksbuchstaben fuer Boot-Partition in VHD(X) suchen ***
echo %weiss%%operation%%gruen%
echo.
for %%l in (P Q R S T U V W X Y Z D E F G H I J K L M N O) do (
set efilw=%%l
mountvol %%l: /L >nul
if errorlevel 1 (
subst | findstr /B "%%l:" >nul
if errorlevel 1 (
net use %%l: >nul 2>&1
if errorlevel 1 goto weiter3
)
)
)
goto fehler1
:weiter3
subst %vhdlw%: /d
echo Verwende %efilw%:
echo.
set operation=*** VHD erzeugen ***
echo %weiss%%operation%%gruen%
if %vhdtyp%==1 (set typ=expandable) else set typ=fixed
set format=vhd
if %gen%==2 set format=vhdx
echo create vdisk file=%vmpfad%%vmname%\%vmname%.%format% maximum=%vhdsize% type=%typ% > %workdir%%folder%\diskpart.txt
echo attach vdisk >> %workdir%%folder%\diskpart.txt
if %gen%==2 (
echo convert gpt >> %workdir%%folder%\diskpart.txt
echo create partition efi size=%partboot% >> %workdir%%folder%\diskpart.txt
echo format fs=fat32 quick label="System" >> %workdir%%folder%\diskpart.txt
) else (
echo create partition primary size=%partboot% >> %workdir%%folder%\diskpart.txt
echo format quick fs=ntfs label="System" >> %workdir%%folder%\diskpart.txt
echo active >> %workdir%%folder%\diskpart.txt
)
echo assign letter=%efilw% >> %workdir%%folder%\diskpart.txt
if %gen%==2 echo create partition msr size=%partmsr% >> %workdir%%folder%\diskpart.txt
echo create partition primary >> %workdir%%folder%\diskpart.txt
echo shrink minimum=%partre% >> %workdir%%folder%\diskpart.txt
echo format fs=ntfs quick label="Windows" >> %workdir%%folder%\diskpart.txt
echo assign letter=%vhdlw% >> %workdir%%folder%\diskpart.txt
echo create partition primary >> %workdir%%folder%\diskpart.txt
echo format quick fs=ntfs label="Recovery" >> %workdir%%folder%\diskpart.txt
if %gen%==1 (
echo set id=27 >> %workdir%%folder%\diskpart.txt
) else (
echo set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac" >> %workdir%%folder%\diskpart.txt
echo gpt attributes=0x8000000000000001 >> %workdir%%folder%\diskpart.txt
)
echo exit >> %workdir%%folder%\diskpart.txt
diskpart /s %workdir%%folder%\diskpart.txt
if errorlevel 1 goto fehler2
echo.
set operation=*** Image in VHD kopieren ***
echo %weiss%%operation%%gruen%
dism /apply-image /imagefile=%wim% /index:%index% /applydir=%vhdlw%:
if errorlevel 1 goto fehler2
echo.
set auto=%autox64%
if not %architektur%==x64 set auto=%autox86%
if not exist %~d0%~p0%auto% goto bcdboot
set operation=*** autounattend.xml ergaenzen ***
echo %weiss%%operation%%gruen%
echo.
md %vhdlw%:\windows\panther\unattend
copy %~d0%~p0%auto% %vhdlw%:\windows\panther\unattend\unattend.xml
:bcdboot
echo.
set operation=*** Bootloader ergaenzen ***
echo %weiss%%operation%%gruen%
echo.
if %gen%==1 bcdboot /d %vhdlw%:\windows /s %efilw%: /addlast /l de-de /f BIOS
if %gen%==2 bcdboot /d %vhdlw%:\windows /s %efilw%: /addlast /l de-de /f UEFI
if errorlevel 1 goto fehler2
echo.
set operation=*** Entfernen von Registry-Schluessel "MountedDevices" aus der VHD ***
reg load HKLM\VHD %vhdlw%:\windows\system32\config\system >nul 2>nul
if errorlevel 1 goto fehler2
reg query HKLM\VHD\MountedDevices >nul 2>nul
if errorlevel 1 goto unload
echo %weiss%%operation%%gruen%
echo.
reg delete HKLM\VHD\MountedDevices /f >nul 2>nul
if errorlevel 1 goto fehler2
echo Registry-Schluessel entfernt
echo.
:unload
reg unload HKLM\VHD >nul 2>nul
if errorlevel 1 goto fehler2
set operation=*** VM erzeugen ***
echo %weiss%%operation%%gruen%
powershell new-vm -name '%vmname%' -path '%vmpfad%%vmname%' -VHDpath '%vmpfad%%vmname%\%vmname%.%format%' -MemoryStartupBytes %startram%MB -generation %gen% %switch%
powershell set-vm -name '%vmname%' -ProcessorCount %cpu% -DynamicMemory -MemoryMaximumBytes %maxram%MB -MemoryMinimumBytes %minram%MB -AutomaticCheckpointsEnabled %autocheckpoints%
if %alter%==alt (
powershell Remove-VMNetworkAdapter -vmname '%vmname%'
powershell Add-VMNetworkAdapter -vmname '%vmname%' -IsLegacy $true
)
set operation=*** Temporaere Laufwerke wieder aushaengen ***
echo %weiss%%operation%%gruen%
echo.
if exist %workdir%%folder% rd /q /s %workdir%%folder%
if not %efilw%.==. if not %vhdlw%.==. if not %efilw%.==%vhdlw%. mountvol %efilw%: /d >nul 2>nul
if exist %vhdlw%: powershell dismount-vhd -path '%vmpfad%%vmname%\%vmname%.%format%'
if exist %isolw%: powershell "dismount-diskimage '%iso%'"
powershell Enable-VMIntegrationService -VMName '%vmname%' -Name 'Gastdienstschnittstelle'
set operation=*** Starte VM ***
echo %weiss%%operation%%gruen%
echo.
powershell Start-VM -name '%vmname%'
powershell vmconnect $env:COMPUTERNAME '%vmname%'
echo %weiss%*** Fertig! ***
echo.
goto :eof
rem *** Fehlerbehandlung ***
rem Bedingung nicht erfuellt
:fehler1
set text=Folgende Bedingung wurde nicht erfuellt:
goto Fehlerausgabe
rem Fehler bei der Durchfuehrung
:fehler2
set text=Operation fehlgeschlagen:
goto Fehlerausgabe
:fehlerausgabe
echo.
echo %rot%%text%
echo.
echo %rot%%operation%
echo.
echo %rot%%hinweis%
echo.
:aufraeumen
set operation=*** Raeume hinter mir auf ***
pause
echo.
echo %weiss%%operation%%gruen%
echo.
if exist %workdir%%folder% rd /q /s %workdir%%folder%
if not %efilw%.==. mountvol %efilw%: /d >nul 2>nul
if exist %vhdlw%: powershell dismount-vhd -path '%vmpfad%%vmname%\%vmname%.%format%' >nul 2>nul
if exist %isolw%: powershell "dismount-diskimage '%iso%'" >nul 2>nul
echo.
set operation=*** Fertig! ***
echo %weiss%%operation%%gruen%
echo.
pause
echo.
goto :eof
:hilfe
echo.
echo %~nx0 erzeugt Hyper-V-VMs
echo.
echo Als Quelle akzeptiert %~nx0 WIM- und ESD-Dateien sowie
echo ISOs und DVDs, die solche Dateien im Ordner "Sources" enthalten.
echo.
echo %~nx0 muss mit Administratorrechten gestartet werden!
echo.
echo %Hinweis%
echo.
pause
goto :eof
;
REM Erstellt 2020 von Axel Vahldiek/c't
REM mailto: axv@ct.de
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
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
- Holgi
- Elite
- Beiträge: 2663
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 324 Mal
- Danke erhalten: 410 Mal
- Gender:
Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz
Für alle diejenigen, welche auch gerne mit Hyper-V arbeiten und so wie ich täglich diese
Ich habe jetzt endlich eine Lösung dafür gefunden, diese Anzeige nicht mehr (oder höchtens einmalig) sehen zu müssen:
ein Eintrag in der Registry macht es möglich
bzw.
Nicht wundern: es ist nur der Eintrag in der Registry; kein DWORD, Zeichenfolge o.ä.
ehrlich gesagt, ich weiß nicht, welcher von beiden der richtige ist; deshalb lasse ich beide eintragen (per SetupComplete).
Noch ein Tip:
wer gerne mit RDP arbeitet, um auf die VM zuzugreifen, muss nicht unbedingt erst in die Einstellungen gehen um dort RemoteDesktop zu aktivieren. Ich lasse das mit 2 Powershell Befehlen (per SetupComplete) erledigen:
-Anzeige hatten.neues Netzwerk gefunden: möchten sie...
Ich habe jetzt endlich eine Lösung dafür gefunden, diese Anzeige nicht mehr (oder höchtens einmalig) sehen zu müssen:
ein Eintrag in der Registry macht es möglich
Code: Alles auswählen
REG ADD "HKCU\System\CurrentControlSet\Control\Network\NewNetworkWindowOff" /F
Code: Alles auswählen
REG ADD "HKLM\System\CurrentControlSet\Control\Network\NewNetworkWindowOff" /F
ehrlich gesagt, ich weiß nicht, welcher von beiden der richtige ist; deshalb lasse ich beide eintragen (per SetupComplete).
Noch ein Tip:
wer gerne mit RDP arbeitet, um auf die VM zuzugreifen, muss nicht unbedingt erst in die Einstellungen gehen um dort RemoteDesktop zu aktivieren. Ich lasse das mit 2 Powershell Befehlen (per SetupComplete) erledigen:
Code: Alles auswählen
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server'-name "fDenyTSConnections" -Value 0
Enable-NetFirewallRule -DisplayGroup "Remotedesktop"
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
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
- Holgi
- Elite
- Beiträge: 2663
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 324 Mal
- Danke erhalten: 410 Mal
- Gender:
Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz
ein weitere Möglichkeit, eine .vhd(x) Datei aus einer ISO (mit Wim!) oder direkt aus einer WIM zu erstellen, bietet MS selbst an.
Die haben mal ein Powershell-Script mit dem Namen Convert-WindowsImage.ps1 entwickelt. Das war wohl seinerzeit für die Nano-Server entwickelt worden. Zu finden ist das Script auf dem Server 2016 Bereitstellungsmedium, aber auch im Netz z.B. hier:
https://github.com/x0nn/Convert-WindowsImage
Beispiele hier: https://catonrug.blogspot.com/2019/12/w ... 0-vhd.html
die grafische Oberfläche von dem Script funktioniert nicht mehr. MS entwickelt es nicht mehr weiter!
Vorgehensweise:
1. open Powershell as admin
2. ins Verzeichnis mit dem PS-Script (Convert-WindowsImage.ps1) wechseln
3. ". .\Convert-WindowsImage.ps1" eingeben (Punkt, Leerzeichen, Punkt, Backslash); der Vorgang nennt sich DotSource(ing)
4. dann PS-Script mit Schaltern aufrufen
Beispiel:
Convert-WindowsImage -SourcePath $pwd\install.wim -Edition "Windows Server 2019 DataCenter (Desktopdarstellung)" -VHDFormat VHDX -VHDPath "C:\Users\Public\Documents\Hyper-V\Virtual hard disks\Server 2019.vhdx" -SizeBytes 40GB -DiskLayout UEFI -ExpandOnNativeBoot:$false -UnattendPath "$pwd\autounattend.xml" -RemoteDesktopEnable -Passthru
$pwd ist das aktuelle Verzeichnis (mit dem PS-Script). Dort also die WIM (oder ISO) und ggf. die autounattend.xml ablegen.
Schon wird aus der WIM (oder ISO mit WIM) eine Hyper-V virtuelle Maschine.
Wenn hier jemand mitliest und sich mit Powershell auskennt, hätte ich gerne mal folgende Frage beantwortet:
a) im Netz habe ich mal eine Abwandlung von dem Script gesehen, wo das Dotsourcing nicht mehr nötig war. Das Script war aber ansonsten veraltet. Weiß jemand, wie man die .ps verändern muss, damit das funktioniert? Hintergrund:
ich möchte nicht erst eine Powershell öffnen, sondern das ganze automatisiert per Batch machen.
b) Meine anderen PS-Scripte rufe ich per
weiß jemand, wie/wo/an welcher Stelle in dem Strang ich bei dem Convert-Image.ps1 Script da die Schalter (z.B. -SourcePath, -VHDFormat etc.) hierzu unterbringe? Was in Klammern, was in Anführungszeichen?
Die haben mal ein Powershell-Script mit dem Namen Convert-WindowsImage.ps1 entwickelt. Das war wohl seinerzeit für die Nano-Server entwickelt worden. Zu finden ist das Script auf dem Server 2016 Bereitstellungsmedium, aber auch im Netz z.B. hier:
https://github.com/x0nn/Convert-WindowsImage
Beispiele hier: https://catonrug.blogspot.com/2019/12/w ... 0-vhd.html
die grafische Oberfläche von dem Script funktioniert nicht mehr. MS entwickelt es nicht mehr weiter!
Vorgehensweise:
1. open Powershell as admin
2. ins Verzeichnis mit dem PS-Script (Convert-WindowsImage.ps1) wechseln
3. ". .\Convert-WindowsImage.ps1" eingeben (Punkt, Leerzeichen, Punkt, Backslash); der Vorgang nennt sich DotSource(ing)
4. dann PS-Script mit Schaltern aufrufen
Beispiel:
Convert-WindowsImage -SourcePath $pwd\install.wim -Edition "Windows Server 2019 DataCenter (Desktopdarstellung)" -VHDFormat VHDX -VHDPath "C:\Users\Public\Documents\Hyper-V\Virtual hard disks\Server 2019.vhdx" -SizeBytes 40GB -DiskLayout UEFI -ExpandOnNativeBoot:$false -UnattendPath "$pwd\autounattend.xml" -RemoteDesktopEnable -Passthru
$pwd ist das aktuelle Verzeichnis (mit dem PS-Script). Dort also die WIM (oder ISO) und ggf. die autounattend.xml ablegen.
Schon wird aus der WIM (oder ISO mit WIM) eine Hyper-V virtuelle Maschine.
Wenn hier jemand mitliest und sich mit Powershell auskennt, hätte ich gerne mal folgende Frage beantwortet:
a) im Netz habe ich mal eine Abwandlung von dem Script gesehen, wo das Dotsourcing nicht mehr nötig war. Das Script war aber ansonsten veraltet. Weiß jemand, wie man die .ps verändern muss, damit das funktioniert? Hintergrund:
ich möchte nicht erst eine Powershell öffnen, sondern das ganze automatisiert per Batch machen.
b) Meine anderen PS-Scripte rufe ich per
auf. Wenn das Script selbst keine Schalter zum Funktionieren braucht läuft das prima.PowerShell.exe -NoProfile -Command "& {Start-Process PowerShell.exe -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%~dpn0.ps1""' -Verb RunAs}"
weiß jemand, wie/wo/an welcher Stelle in dem Strang ich bei dem Convert-Image.ps1 Script da die Schalter (z.B. -SourcePath, -VHDFormat etc.) hierzu unterbringe? Was in Klammern, was in Anführungszeichen?
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
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
- Holgi
- Elite
- Beiträge: 2663
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 324 Mal
- Danke erhalten: 410 Mal
- Gender:
Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz
nun ist wieder fast ein Jahr ins Land gegangen. Mittlerweile ist Windows 11 erschienen. Seit Windows 11 Build 22458 wird auch in der VM TPM (Trusted Platform Module) vorausgesetzt (sofern man nicht eine angepasste Version verwendet, die diese Beschränkung umgeht).
Also habe ich mein PS-Script entsprechend angepasst und stelle es euch hier zur Verfügung. Viel Spaß!
Also habe ich mein PS-Script entsprechend angepasst und stelle es euch hier zur Verfügung. Viel Spaß!
Code: Alles auswählen
param($VMName)
Get-VM "$VMName" | select -Property VMName, State
Stop-VM -Name "$VMName" -Force | out-null
Remove-VM -Name "$VMName" -Force | out-null
Remove-Item "C:\Users\Public\Documents\Hyper-V\Virtual hard disks\$VMName.vhdx" -Force | out-null
cls
# Switch is nothing but network adapter
$Switch = (Get-VMSwitch).Name
# OS Iso file should be assigned to InstallMedia
# $InstallMedia = 'Hyper V.iso'
# Create New Virtual Machine
# MemoryStartupBytes contents the RAM size of VM.
# NewVHDSizeBytes contents the size of HD.
New-VM -Name $VMName -MemoryStartupBytes 4GB -Generation 2 -NewVHDPath "$VMName.vhdx" -NewVHDSizeBytes 50GB -SwitchName (Get-VMSwitch).Name
# Add DVD Drive to Virtual Machine
Add-VMScsiController -VMName $VMName
Add-VMDvdDrive -VMName $VMName -Path "C:\Users\Darth Vader\Downloads\Create VM Hyper-V\$VMName.iso"
# Mount Installation Media
$DVDDrive = Get-VMDvdDrive -VMName $VMName
# Configure Virtual Machine to Boot from DVD
Set-VMFirmware -VMName $VMName -FirstBootDevice $DVDDrive
# Die VM bekommt 2 virtuelle Prozessoren
Set-VMProcessor -VMName $VMName -Count 2
# Checkpoints nicht automatisch erstellen
Set-VM -VMName $VMName -AutomaticCheckpointsEnabled $false
Set-VM -VMName $VMName -CheckpointType Disabled
# Gastdienste aktivieren (WINDOWS English, WINDOWS German)
# Enable-VMIntegrationService -VMName $VMName -Name 'Guest Service Interface'
Enable-VMIntegrationService -VMName $VMName -Name 'Gastdienstschnittstelle'
# Zeitsynchronisation (WINDOWS English, WINDOWS German)
# Disable-VMIntegrationService -VMName $VMName -Name "Time Synchronization"
# Disable-VMIntegrationService -VMName $VMName -Name "Zeitsynchronistation"
# Videoauflösung einstellen
set-vmvideo -VMName $VMName -ResolutionType Maximum -HorizontalResolution 1366 -VerticalResolution 768
# Dynamischen Arbeitsspeicher einrichten
Set-VM -VMName $VMName -DynamicMemory -MemoryMinimumBytes 1024mb -MemoryMaximumBytes 4GB -Confirm:$false
# automatische Start-/StoppAktionen einrichten
Set-VM -VMName $VMName -AutomaticStartAction StartIfRunning -AutomaticStopAction Save -Confirm:$false
# ExposeVirtualizationExtensions
# Set-VMProcessor -VMName $VMName -ExposeVirtualizationExtensions $true
# TPM aktivieren
$owner = Get-HgsGuardian UntrustedGuardian
$kp = New-HgsKeyProtector -Owner $owner -AllowUntrustedRoot
Set-VMMemory -DynamicMemoryEnabled $false -VMName $VMName
Set-VMKeyProtector -VMName $VMName -KeyProtector $kp.RawData
# Set-VMSecurityPolicy -VMName $VMName -Shielded $true
Enable-VMTPM -VMName $VMName
Set-VMSecurity -VMName $VMName -EncryptStateAndVmMigrationTraffic $true
# Start the VM and connect to it
Start-VM -Name $VMName
vmconnect $env:COMPUTERNAME $VMName
Zuletzt geändert von Holgi am 18.01.2022, 08:17, insgesamt 1-mal geändert.
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
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
- Holgi
- Elite
- Beiträge: 2663
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 324 Mal
- Danke erhalten: 410 Mal
- Gender:
Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz
nicht zu vergessen:
das Script von MS zur Erstellung einer VHD(x) aus einer WIM (Convert-WindowsImage.ps1) https://github.com/x0nn/Convert-WindowsImage wurde aktualisiert und funktioniert jetzt auch mit Windows 11. Darüberhinaus geht jetzt auch der PARAMETER ShowUI wieder.
das Script von MS zur Erstellung einer VHD(x) aus einer WIM (Convert-WindowsImage.ps1) https://github.com/x0nn/Convert-WindowsImage wurde aktualisiert und funktioniert jetzt auch mit Windows 11. Darüberhinaus geht jetzt auch der PARAMETER ShowUI wieder.
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
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
- Holgi
- Elite
- Beiträge: 2663
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 324 Mal
- Danke erhalten: 410 Mal
- Gender:
Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz
c’t hat sein Script c’t-Win2Hyper-V ebenfalls an Windows 11 angepasst:
https://www.heise.de/ratgeber/c-t-Win2H ... 21599.html
https://www.heise.de/ratgeber/c-t-Win2H ... 21599.html
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
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
- g-force
- Elite
- Beiträge: 2380
- Registriert: 07.10.2016, 19:30
- Hat sich bedankt: 353 Mal
- Danke erhalten: 355 Mal
- Gender:
Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz
Wo trage ich denn die Pfade und Namen für die Variablen ein? Es wäre schön, wenn das direkt oben im Script wäre.Holgi hat geschrieben: ↑09.01.2022, 13:50
Code: Alles auswählen
param($VMName) Get-VM "$VMName" | select -Property VMName, State Stop-VM -Name "$VMName" -Force | out-null Remove-VM -Name "$VMName" -Force | out-null Remove-Item "C:\Users\Public\Documents\Hyper-V\Virtual hard disks\$VMName.vhdx" -Force | out-null cls # Switch is nothing but network adapter $Switch = (Get-VMSwitch).Name # OS Iso file should be assigned to InstallMedia # $InstallMedia = 'Hyper V.iso' # Create New Virtual Machine # MemoryStartupBytes contents the RAM size of VM. # NewVHDSizeBytes contents the size of HD. New-VM -Name $VMName -MemoryStartupBytes 4GB -Generation 2 -NewVHDPath "$VMName.vhdx" -NewVHDSizeBytes 50GB -SwitchName (Get-VMSwitch).Name # Add DVD Drive to Virtual Machine Add-VMScsiController -VMName $VMName Add-VMDvdDrive -VMName $VMName -Path "C:\Users\Darth Vader\Downloads\Create VM Hyper-V\$VMName.iso" # Mount Installation Media $DVDDrive = Get-VMDvdDrive -VMName $VMName # Configure Virtual Machine to Boot from DVD Set-VMFirmware -VMName $VMName -FirstBootDevice $DVDDrive # Die VM bekommt 2 virtuelle Prozessoren Set-VMProcessor -VMName $VMName -Count 2 # Checkpoints nicht automatisch erstellen Set-VM -VMName $VMName -AutomaticCheckpointsEnabled $false Set-VM -VMName $VMName -CheckpointType Disabled # Gastdienste aktivieren (WINDOWS English, WINDOWS German) # Enable-VMIntegrationService -VMName $VMName -Name 'Guest Service Interface' Enable-VMIntegrationService -VMName $VMName -Name 'Gastdienstschnittstelle' # Zeitsynchronisation (WINDOWS English, WINDOWS German) # Disable-VMIntegrationService -VMName $VMName -Name "Time Synchronization" # Disable-VMIntegrationService -VMName $VMName -Name "Zeitsynchronistation" # Videoauflösung einstellen set-vmvideo -VMName $VMName -ResolutionType Maximum -HorizontalResolution 1366 -VerticalResolution 768 # Dynamischen Arbeitsspeicher einrichten Set-VM -VMName $VMName -DynamicMemory -MemoryMinimumBytes 1024mb -MemoryMaximumBytes 4GB -Confirm:$false # automatische Start-/StoppAktionen einrichten Set-VM -VMName $VMName -AutomaticStartAction StartIfRunning -AutomaticStopAction Save -Confirm:$false # ExposeVirtualizationExtensions # Set-VMProcessor -VMName $VMName -ExposeVirtualizationExtensions $true # TPM aktivieren $owner = Get-HgsGuardian UntrustedGuardian $kp = New-HgsKeyProtector -Owner $owner -AllowUntrustedRoot Set-VMMemory -DynamicMemoryEnabled $false -VMName $VMName Set-VMKeyProtector -VMName $VMName -KeyProtector $kp.RawData # Set-VMSecurityPolicy -VMName $VMName -Shielded $true Enable-VMTPM -VMName $VMName Set-VMSecurity -VMName $VMName -EncryptStateAndVmMigrationTraffic $true # Start the VM and connect to it Start-VM -Name $VMName vmconnect $env:COMPUTERNAME $VMName
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
Mein Home-Server: http://gofile.me/7psKS/mVZltKndw
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
Mein Home-Server: http://gofile.me/7psKS/mVZltKndw
- DK2000
- Legende
- Beiträge: 9604
- Registriert: 03.04.2018, 00:07
- Hat sich bedankt: 187 Mal
- Danke erhalten: 602 Mal
- Gender:
Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz
Da param($VMName) verwendet wurde, wird $VMName beim starten des Scripst übergeben, also
Script BlaBla bzw. Script -VMName BlaBla
Wenn das nicht gewünscht ist. Dann param($VMName) löschen und direkt $VMName="BlaBla" schreiben.
Script BlaBla bzw. Script -VMName BlaBla
Wenn das nicht gewünscht ist. Dann param($VMName) löschen und direkt $VMName="BlaBla" schreiben.
- g-force
- Elite
- Beiträge: 2380
- Registriert: 07.10.2016, 19:30
- Hat sich bedankt: 353 Mal
- Danke erhalten: 355 Mal
- Gender:
Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz
Kann ich auch Variablen setzen für "InstallMedia" und "VMPath"? Etwa so:
Code: Alles auswählen
$VMName="MeineNeueVM"
$VMPath="C:\NTLITE\VM"
$ISOPath="C:\NTLITE\ISO"
$ISOName="NTLITE.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
Mein Home-Server: http://gofile.me/7psKS/mVZltKndw
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
Mein Home-Server: http://gofile.me/7psKS/mVZltKndw
- g-force
- Elite
- Beiträge: 2380
- Registriert: 07.10.2016, 19:30
- Hat sich bedankt: 353 Mal
- Danke erhalten: 355 Mal
- Gender:
Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz
Das ist mein aktueller Stand, funktioniert leider nicht, das PS-Fenster schließt sich sofort wieder:
Mag da mal jemand drüberschauen?
Code: Alles auswählen
$VMName="MeineNeueVM"
$VMPath="C:\NTLITE\VM"
$ISOPath="C:\NTLITE\ISO"
$ISOName="PREMIUM_ESD.iso"
$PCName="Win10-WORK"
Get-VM "$VMName" | select -Property VMName, State
Stop-VM -Name "$VMName" -Force | out-null
Remove-VM -Name "$VMName" -Force | out-null
Remove-Item "$VMPath\$VMName.vhdx" -Force | out-null
cls
# Switch is nothing but network adapter
$Switch = (Get-VMSwitch).Name
# OS Iso file should be assigned to InstallMedia
# $InstallMedia = §ISOName
# Create New Virtual Machine
# MemoryStartupBytes contents the RAM size of VM.
# NewVHDSizeBytes contents the size of HD.
New-VM -Name $VMName -MemoryStartupBytes 4GB -Generation 2 -NewVHDPath "$VMName.vhdx" -NewVHDSizeBytes 50GB -SwitchName (Get-VMSwitch).Name
# Add DVD Drive to Virtual Machine
Add-VMScsiController -VMName $VMName
Add-VMDvdDrive -VMName $VMName -Path $ISOPath\$ISOName
# Mount Installation Media
$DVDDrive = Get-VMDvdDrive -VMName $VMName
# Configure Virtual Machine to Boot from DVD
Set-VMFirmware -VMName $VMName -FirstBootDevice $DVDDrive
# Die VM bekommt 2 virtuelle Prozessoren
Set-VMProcessor -VMName $VMName -Count 2
# Checkpoints nicht automatisch erstellen
Set-VM -VMName $VMName -AutomaticCheckpointsEnabled $false
Set-VM -VMName $VMName -CheckpointType Disabled
# Gastdienste aktivieren (WINDOWS English, WINDOWS German)
# Enable-VMIntegrationService -VMName $VMName -Name 'Guest Service Interface'
Enable-VMIntegrationService -VMName $VMName -Name 'Gastdienstschnittstelle'
# Zeitsynchronisation (WINDOWS English, WINDOWS German)
# Disable-VMIntegrationService -VMName $VMName -Name "Time Synchronization"
# Disable-VMIntegrationService -VMName $VMName -Name "Zeitsynchronistation"
# Videoauflösung einstellen
set-vmvideo -VMName $VMName -ResolutionType Maximum -HorizontalResolution 1366 -VerticalResolution 768
# Dynamischen Arbeitsspeicher einrichten
Set-VM -VMName $VMName -DynamicMemory -MemoryMinimumBytes 1024mb -MemoryMaximumBytes 4GB -Confirm:$false
# automatische Start-/StoppAktionen einrichten
Set-VM -VMName $VMName -AutomaticStartAction StartIfRunning -AutomaticStopAction Save -Confirm:$false
# ExposeVirtualizationExtensions
# Set-VMProcessor -VMName $VMName -ExposeVirtualizationExtensions $true
# TPM aktivieren
$owner = Get-HgsGuardian UntrustedGuardian
$kp = New-HgsKeyProtector -Owner $owner -AllowUntrustedRoot
Set-VMMemory -DynamicMemoryEnabled $false -VMName $VMName
Set-VMKeyProtector -VMName $VMName -KeyProtector $kp.RawData
# Set-VMSecurityPolicy -VMName $VMName -Shielded $true
Enable-VMTPM -VMName $VMName
Set-VMSecurity -VMName $VMName -EncryptStateAndVmMigrationTraffic $true
# Start the VM and connect to it
Start-VM -Name $VMName
vmconnect $env:$PCName $VMName
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
Mein Home-Server: http://gofile.me/7psKS/mVZltKndw
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
Mein Home-Server: http://gofile.me/7psKS/mVZltKndw
- Holgi
- Elite
- Beiträge: 2663
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 324 Mal
- Danke erhalten: 410 Mal
- Gender:
Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz
ich kann dein Script gerade nicht testen, da ich selber gerade einer neue VM erstelle.
Aber schau mal hier:
https://my330space.wordpress.com/2017/0 ... owershell/
danach:
Open PowerShell window as admin.
Paste below script and hit enter.
Meine Vorgehensweise ist ja eine andere:
cmd-batch mit u.a diesem Inhalt:
demnach müsen die Batch und das Powershell Script den selben Namen haben und im gleichen Ordner liegen.
Oder den Namen des PS-Scripts angeben:
Aber schau mal hier:
https://my330space.wordpress.com/2017/0 ... owershell/
danach:
Open PowerShell window as admin.
Paste below script and hit enter.
Meine Vorgehensweise ist ja eine andere:
cmd-batch mit u.a diesem Inhalt:
Code: Alles auswählen
@ECHO OFF
PowerShell.exe -NoProfile -Command "& {Start-Process PowerShell.exe -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%~dpn0.ps1""' -Verb RunAs}"
Oder den Namen des PS-Scripts angeben:
Code: Alles auswählen
pushd "%CD%"
CD /D "%~dp0"
SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%dein_gewählter_PS-Script_Name.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -file "%PowerShellScriptPath%"
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
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
- g-force
- Elite
- Beiträge: 2380
- Registriert: 07.10.2016, 19:30
- Hat sich bedankt: 353 Mal
- Danke erhalten: 355 Mal
- Gender:
Re: Hyper-V Virtuelle Maschine per Script erstellen; mein Lösungsansatz
Mit "Powershell" habe ich keine Erfahrung, selbst bei CMD blicke ich nur ansatzweise durch, nie richtig gelernt.
Eine CMD wäre mir tatsächlich lieber, weil ich da etwas besser durchblicke bei Veränderungen. Für "VirtualBox" bekomme ich das einigermaßen hin, da hatten Holgi und ich mal was gebastelt. Nun würde ich das gerne auf "Hyper-V" übertragen. Leider gibt mir das PS-Script keine Fehlermeldung aus, sondern schließt sich sofort wieder. Ich habe das "Mein Script.ps1" per "Rechtsklick - Ausführen" gestartet, vielleicht liege ich ja schon da falsch?
EDIT: Mit der CMD (um die .ps1 zu starten) leider derselbe Effekt.
Eine CMD wäre mir tatsächlich lieber, weil ich da etwas besser durchblicke bei Veränderungen. Für "VirtualBox" bekomme ich das einigermaßen hin, da hatten Holgi und ich mal was gebastelt. Nun würde ich das gerne auf "Hyper-V" übertragen. Leider gibt mir das PS-Script keine Fehlermeldung aus, sondern schließt sich sofort wieder. Ich habe das "Mein Script.ps1" per "Rechtsklick - Ausführen" gestartet, vielleicht liege ich ja schon da falsch?
EDIT: Mit der CMD (um die .ps1 zu starten) leider derselbe Effekt.
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
Mein Home-Server: http://gofile.me/7psKS/mVZltKndw
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
Mein Home-Server: http://gofile.me/7psKS/mVZltKndw