Re: Probleme mit Remot-PowerShell-Sitzung wegen GPOs
Verfasst: 07.04.2024, 19:54
jetzt geht gar nichts mehr:
Code: Alles auswählen
param($VMName)
Write-Host "der Name der VM ist" $VMName -BackgroundColor Black -ForegroundColor White
Get-VM "$VMName" | select -Property VMName, State
Stop-Process -Name 'vmconnect' | out-null
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
Remove-Item "$env:ProgramData\Microsoft\Windows\Virtual Hard Disks\$VMName.vhdx" -Force
cls
Write-Host "$VMName deleted!!" -BackgroundColor Black -ForegroundColor White
# Switch is nothing but network adapter
# $Switch = (Get-VMSwitch).Name
$Switch = "Default Switch"
# -SwitchName (Get-VMSwitch).Name
# set Switch = 'VLAN'
# set Switch = 'default switch'
# OS Iso file should be assigned to InstallMedia
# $InstallMedia = 'Hyper V.iso'
Set-VMHost -VirtualMachinePath "$env:public\documents\Hyper-V\Virtual hard disks"
# Create New Virtual Machine
# MemoryStartupBytes contents the RAM size of VM.
# NewVHDSizeBytes contents the size of HD.
Write-Host "Erstelle VM $VMName" -BackgroundColor Black -ForegroundColor White
New-VM -Name $VMName -MemoryStartupBytes 4GB -Generation 2 -NewVHDPath "$VMName.vhdx" -NewVHDSizeBytes 60GB -SwitchName $Switch
# New-VM -Name $VMName -MemoryStartupBytes 2GB -Generation 2 -NewVHDPath "C:\Users\Public\Documents\Hyper-V\Virtual hard disks\$VMName.vhdx" -NewVHDSizeBytes 60GB -SwitchName $Switch
# New-VM -Name $VMName -MemoryStartupBytes 2GB -Generation 2 -NewVHDPath "$env:public\documents\Hyper-V\Virtual hard disks\$VMName.vhdx" -NewVHDSizeBytes 60GB -SwitchName $Switch
Write-Host "Virtual Maschine anpassen..." -BackgroundColor Black -ForegroundColor Green
# Add DVD Drive to Virtual Machine
Add-VMScsiController -VMName $VMName
Add-VMDvdDrive -VMName $VMName -Path $PSScriptRoot\$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 512mb -MemoryMaximumBytes 2GB -Confirm:$false
Set-VM -VMName $VMName -DynamicMemory -MemoryMinimumBytes 512mb -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
# https://charbelnemnom.com/how-to-enable-virtual-tpm-vtpm-in-windows-server-2016-hyper-v-vm-hyperv-ws2016/
# https://docs.microsoft.com/en-us/answers/questions/566006/hyper-v-2019-server-enable-tpm.html
# https://deploywindows.com/2015/11/13/add-virtual-tpm-in-windows-10-hyper-v-guest-with-powershell/
Set-VMKeyProtector -VMName $VMName -NewLocalKeyProtector
Enable-VMTPM -VMName $VMName
# Set-VMSecurity –VMName $VMName -EncryptStateAndVmMigrationTraffic $true
Write-Host "Virtual Maschine: $VMName... starten" -BackgroundColor Black -ForegroundColor Green
# Start the VM and connect to it
Start-VM -Name $VMName
Write-Host "Der Virenschutz wird wieder aktiviert" -BackgroundColor Black -ForegroundColor White
Set-MpPreference -PUAProtection Enabled
Set-MpPreference -DisableRealtimeMonitoring $false
Set-MpPreference -MAPSReporting Advanced
Set-MpPreference -SubmitSamplesConsent SendAllSamples
Set-MpPreference -EnableControlledFolderAccess Disabled
# powershell.exe -command "Set-MpPreference -EnableControlledFolderAccess enabled
powercfg /setactive 381b4222-f694-41f0-9685-ff5bb260df2e
Set-MpPreference -DisableRealtimeMonitoring $false
vmconnect $env:COMPUTERNAME $VMName
Code: Alles auswählen
# DVD-Laufwerk hinzufügen und ISO mounten
Add-VMScsiController -VMName $VMName
Set-VMDvdDrive -VMName $VMName -Path $WorkPath\$ISOOutput
$DVDDrive = Get-VMDvdDrive -VMName $VMName
Set-VMFirmware -VMName $VMName -FirstBootDevice $DVDDrive
wegen dem umbenennen kannst Dir vllt mal den Link https://learn.microsoft.com/de-de/power ... ps-modules durchlesen.g-force hat geschrieben: 07.04.2024, 20:29 Was soll es bringen, die Funktionen umzubenennen? Bis dahin funktioniert das Script auch, die neue ISO wird erstellt. Auch wird anschließend die neue VM erstellt. Es wird nur die neue ISO nicht als DVD-Laufwerk in der VM eingebaut. Der Fehler liegt irgendwo im Bereich Zeile 85-89:
Code: Alles auswählen
# DVD-Laufwerk hinzufügen und ISO mounten Add-VMScsiController -VMName $VMName Set-VMDvdDrive -VMName $VMName -Path $WorkPath\$ISOOutput $DVDDrive = Get-VMDvdDrive -VMName $VMName Set-VMFirmware -VMName $VMName -FirstBootDevice $DVDDrive
Code: Alles auswählen
Add-VMDvdDrive -VMName $VMName-ControllerNumber 0
Set-VMDvdDrive -VMName $VMName -Path $WorkPath\$ISOOutput -ControllerLocation 1
Set-VMFirmware -VMName $VMName -FirstBootDevice (Get-VMDvdDrive -VMName $VMName)
Code: Alles auswählen
Add-VMDvdDrive -VMName $VMName-ControllerNumber 0
Code: Alles auswählen
Add-VMDvdDrive -VMName $VMName -ControllerNumber 0
Code: Alles auswählen
Add-VMDvdDrive -VMName $VMName -Path XXXXXX
Set-VMFirmware -VMName $VMName -FirstBootDevice (Get-VMDvdDrive -VMName $VMName)
Code: Alles auswählen
# Pfade definieren
$WorkPath = "C:\ISO2VM" # Hier den Pfad zum Arbeitsordner angeben
$ISOname = "Server2022" # Hier den Namen der Quell-ISO angeben (ohne .iso)
$VMPath = "C:\ISO2VM" # Hier den Pfad zu den VM angeben
$PCName = "$env:COMPUTERNAME" # Hier den Namen des Host-PC angeben
$SwitchName = "Default Switch" # Hier den Namen der VM-NIC angeben
$ISOPath = "$WorkPath\$ISOname.iso"
$XMLpath = "$WorkPath\autounattend.xml"
$TempPath = "$WorkPath\Temp"
$Toolspath = "$WorkPath\tools"
$ISOOutput = "$ISOName-Unattend.iso"
# Funktion zum Entpacken der ISO in ein temporäres Verzeichnis mit 7-Zip
function Invoke-IsoExtraction {
param (
[string]$IsoPath,
[string]$TempPath
)
# Pfad zur 7-Zip-Executable (anpassen, falls erforderlich)
$zipExe = "$ToolsPath\7-Zip\7z.exe"
# Erstelle das temporäre Verzeichnis, falls es nicht existiert
if (-not (Test-Path $TempPath)) {
New-Item -ItemType Directory -Path $TempPath | Out-Null
Write-Host "Temp-Verzeichnis erstellt" -ForegroundColor Green
}
# Entpacke die ISO in das temporäre Verzeichnis mit 7-Zip
Write-Host "ISO wird entpackt" -ForegroundColor Green
& $zipExe x "$ISOPath" -o"$TempPath" -aoa | Out-Null
Write-Host "ISO wurde entpackt" -ForegroundColor Green
}
# Funktion zum Kopieren der XML-Datei
function Copy-XMLToTempPath {
param (
[string]$XmlPath,
[string]$TempPath
)
# Kopiere die XML-Datei nach $TempPath
Copy-Item -Path $XMLPath -Destination $TempPath | Out-Null
Write-Host "Autounattend.xml wurde kopiert" -ForegroundColor Green
}
# Funktion zum Erzeugen des Ausgabe-ISO mit oscdimg.exe
function New-OutputISO {
param (
[string]$TempPath,
[string]$ISOOutput
)
# oscdimg.exe-Befehl zum Erzeugen des Ausgabe-ISO
& "$ToolsPath\oscdimg\oscdimg.exe" -b"$ToolsPath\oscdimg\efisys_noprompt.bin" -h -m -o -u2 -udfver102 "$TempPath" "$WorkPath\$ISOOutput" | Out-Null
# Meldung ausgeben, wenn der Vorgang abgeschlossen ist
Write-Host "Neue ISO wurde erfolgreich erstellt: $ISOOutput" -ForegroundColor Green
}
# Erstelle neue VM
function New-MyVirtualMachine {
param (
[string]$VMName, # Name der virtuellen Maschine
[string]$VMPath, # Pfad, in dem die virtuelle Festplatte gespeichert wird
[string]$WorkPath, # Pfad zum ISO-Image
[string]$ISOOutput, # Name des ISO-Images
[string]$PCName # Name des PCs
)
# Überprüfen, ob eine VM mit dem angegebenen Namen vorhanden ist
$existingVM = Get-VM -Name $VMName -ErrorAction SilentlyContinue
# Falls eine VM mit dem angegebenen Namen vorhanden ist, stoppen und entfernen
if ($existingVM) {
Stop-VM -Name $VMName -Force -Confirm:$false
Remove-VM -Name $VMName -Force -Confirm:$false
Remove-Item "$VMPath\$VMName.vhdx" -Force -ErrorAction SilentlyContinue
}
# Neue VM erstellen
New-VM -Name $VMName -MemoryStartupBytes 4GB -Generation 2 -NewVHDPath "$VMPath\$VMName.vhdx" -NewVHDSizeBytes 50GB -SwitchName $SwitchName
# DVD-Laufwerk hinzufügen und ISO mounten
Add-VMDvdDrive -VMName $VMName -Path C:\ISO2VM\Server2022-Unattend.iso
Set-VMFirmware -VMName $VMName -FirstBootDevice (Get-VMDvdDrive -VMName $VMName)
# VM-Einstellungen konfigurieren
Set-VMProcessor -VMName $VMName -Count 2
Set-VM -VMName $VMName -AutomaticCheckpointsEnabled $false -CheckpointType Disabled
Enable-VMIntegrationService -VMName $VMName -Name 'Gastdienstschnittstelle'
Set-VMVideo -VMName $VMName -ResolutionType Maximum -HorizontalResolution 1366 -VerticalResolution 768
Set-VM -VMName $VMName -DynamicMemory -MemoryMinimumBytes 1024mb -MemoryMaximumBytes 4GB -Confirm:$false
Set-VM -VMName $VMName -AutomaticStartAction StartIfRunning -AutomaticStopAction Save -Confirm:$false
# 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
Enable-VMTPM -VMName $VMName
Set-VMSecurity -VMName $VMName -EncryptStateAndVmMigrationTraffic $true
# VM starten und darauf zugreifen
Start-VM -Name $VMName
vmconnect $PCName $VMName
}
# Starte Funktionen
Invoke-IsoExtraction -IsoPath $ISOPath -TempPath $TempPath # ISO mit 7-Zip entpacken
Copy-XMLToTempPath -XmlPath $XMLPath -TempPath $TempPath # Kopiere die XML-Datei in das temporäre Verzeichnis
New-OutputISO -TempPath $TempPath -ISOOutput $ISOOutput # Neue ISO mit OSCDIMG erstellen
Remove-Item -Path $TempPath -Recurse -Force # Lösche Temp-Ordner
New-MyVirtualMachine -VMName "$ISOName" -VMPath "$VMPath" -WorkPath "$WorkPath" -ISOName "$ISOOutput" -PCName "$PCName"
PAUSE
Code: Alles auswählen
# Pfade definieren
$WorkPath = "C:\ISO2VM" # Hier den Pfad zum Arbeitsordner angeben
$ISOname = "Windows10" # Hier den Namen der Quell-ISO angeben (ohne .iso)
$VMPath = "C:\ISO2VM" # Hier den Pfad zu den VM angeben
$PCName = "$env:COMPUTERNAME" # Hier den Namen des Host-PC angeben
$SwitchName = "Default Switch" # Hier den Namen der VM-NIC angeben
$ISOPath = "$WorkPath\$ISOname.iso"
$XMLpath = "$WorkPath\autounattend.xml"
$TempPath = "$WorkPath\Temp"
$Toolspath = "$WorkPath\tools"
$ISOOutput = "$ISOName-Unattend.iso"
# Funktion zum Entpacken der ISO in ein temporäres Verzeichnis mit 7-Zip
function Invoke-IsoExtraction {
param (
[string]$IsoPath,
[string]$TempPath
)
# Pfad zur 7-Zip-Executable (anpassen, falls erforderlich)
$zipExe = "$ToolsPath\7-Zip\7z.exe"
# Erstelle das temporäre Verzeichnis, falls es nicht existiert
if (-not (Test-Path $TempPath)) {
New-Item -ItemType Directory -Path $TempPath | Out-Null
Write-Host "Temp-Verzeichnis erstellt" -ForegroundColor Green
}
# Entpacke die ISO in das temporäre Verzeichnis mit 7-Zip
Write-Host "ISO wird entpackt" -ForegroundColor Green
& $zipExe x "$ISOPath" -o"$TempPath" -aoa | Out-Null
Write-Host "ISO wurde entpackt" -ForegroundColor Green
}
# Funktion zum Kopieren der XML-Datei
function Copy-XMLToTempPath {
param (
[string]$XmlPath,
[string]$TempPath
)
# Kopiere die XML-Datei nach $TempPath
Copy-Item -Path $XMLPath -Destination $TempPath | Out-Null
Write-Host "Autounattend.xml wurde kopiert" -ForegroundColor Green
}
# Funktion zum Erzeugen des Ausgabe-ISO mit oscdimg.exe
function New-OutputISO {
param (
[string]$TempPath,
[string]$ISOOutput
)
# oscdimg.exe-Befehl zum Erzeugen des Ausgabe-ISO
& "$ToolsPath\oscdimg\oscdimg.exe" -b"$ToolsPath\oscdimg\efisys_noprompt.bin" -h -m -o -u2 -udfver102 "$TempPath" "$WorkPath\$ISOOutput" | Out-Null
# Meldung ausgeben, wenn der Vorgang abgeschlossen ist
Write-Host "Neue ISO wurde erfolgreich erstellt: $ISOOutput" -ForegroundColor Green
}
# Erstelle neue VM
function New-MyVirtualMachine {
param (
[string]$VMName, # Name der virtuellen Maschine
[string]$VMPath, # Pfad, in dem die virtuelle Festplatte gespeichert wird
[string]$WorkPath, # Pfad zum ISO-Image
[string]$ISOOutput, # Name des ISO-Images
[string]$PCName # Name des PCs
)
# Überprüfen, ob eine VM mit dem angegebenen Namen vorhanden ist
$existingVM = Get-VM -Name $VMName -ErrorAction SilentlyContinue
# Falls eine VM mit dem angegebenen Namen vorhanden ist, stoppen und entfernen
if ($existingVM) {
Stop-VM -Name $VMName -Force -Confirm:$false
Remove-VM -Name $VMName -Force -Confirm:$false
Remove-Item "$VMPath\$VMName.vhdx" -Force -ErrorAction SilentlyContinue
}
# Neue VM erstellen
New-VM -Name $VMName -MemoryStartupBytes 4GB -Generation 2 -NewVHDPath "$VMPath\$VMName.vhdx" -NewVHDSizeBytes 50GB -SwitchName $SwitchName
# DVD-Laufwerk hinzufügen und ISO mounten
Add-VMDvdDrive -VMName $VMName -Path $WorkPath\$ISOName-Unattend.iso
Set-VMFirmware -VMName $VMName -FirstBootDevice (Get-VMDvdDrive -VMName $VMName)
# VM-Einstellungen konfigurieren
Set-VMProcessor -VMName $VMName -Count 2
Set-VM -VMName $VMName -AutomaticCheckpointsEnabled $false -CheckpointType Disabled
Enable-VMIntegrationService -VMName $VMName -Name 'Gastdienstschnittstelle'
Set-VMVideo -VMName $VMName -ResolutionType Maximum -HorizontalResolution 1366 -VerticalResolution 768
Set-VM -VMName $VMName -DynamicMemory -MemoryMinimumBytes 1024mb -MemoryMaximumBytes 4GB -Confirm:$false
Set-VM -VMName $VMName -AutomaticStartAction StartIfRunning -AutomaticStopAction Save -Confirm:$false
# 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
Enable-VMTPM -VMName $VMName
Set-VMSecurity -VMName $VMName -EncryptStateAndVmMigrationTraffic $true
# VM starten und darauf zugreifen
Start-VM -Name $VMName
vmconnect $PCName $VMName
}
# Starte Funktionen
Invoke-IsoExtraction -IsoPath $ISOPath -TempPath $TempPath # ISO mit 7-Zip entpacken
Copy-XMLToTempPath -XmlPath $XMLPath -TempPath $TempPath # Kopiere die XML-Datei in das temporäre Verzeichnis
New-OutputISO -TempPath $TempPath -ISOOutput $ISOOutput # Neue ISO mit OSCDIMG erstellen
Remove-Item -Path $TempPath -Recurse -Force # Lösche Temp-Ordner
New-MyVirtualMachine -VMName "$ISOName" -VMPath "$VMPath" -WorkPath "$WorkPath" -ISOName "$ISOOutput" -PCName "$PCName"
Ist das jetzt noch interessant, oder hat sich das für dich erledigt?Cyber-Mike hat geschrieben: 06.04.2024, 20:48 Wenn das für den Server und Client funktionieren sollte, sollte beim Server aber auch die beiden PS Befehle ausgeführt werden und die Einstellungen für den NetAdapter gesetzt und er umbenannt werden nach Eingabe vom User, bzw. der Name würde sich ja anhand vom Skript aus dem Namen der Laborumgebung und dem Kürzel SRV für den Server zusammensetzen. Keine Ahnung ob man dass dann in die xml automatisiert einbinden könnte.
Wir haben ja auch schon den Server 2025 mit GUI:Server 2025 (hab übrigens schon ne Version ohne GUI davon)
Das hat sich ja mit dem Script von @g-force erledigt. Press Any Key entfällt.Sag nur "Press any Key.... was soll ich jetzt da drücken", oder "oh wieder zu spät mitbekommen dass ich eine Taste drücken sollte"
Code: Alles auswählen
# Pfade definieren
$ISOname = "Windows10" # Hier den Namen der Quell-ISO angeben (ohne .iso)
$WorkPath = "$PSScriptRoot" # Hier den Pfad zum Arbeitsordner angeben (aktuell: automatisch)
$VMPath = "$PSScriptRoot" # Hier den Pfad zu den VM angeben (aktuell: automatisch)
$PCName = "$env:COMPUTERNAME" # Hier den Namen des Host-PC angeben (aktuell: automatisch)
Hi @g-force; das wäre natürlich genial.g-force hat geschrieben: 08.04.2024, 13:13 Wenn man die Struktur noch etwas ändert, kann man auch einen $OEM$-Ordner incl. Regtweaks, Scripten und SetupComplete mit integrieren. Da die WIM bzw. ESD dabei nicht verändert wird, funktioniert das eigentlich bei allen gängigen ISO, auch AIO. Durch eine eigene "autounattend.xml" kann man das dann wunderbar anpassen.