Probleme mit Remot-PowerShell-Sitzung wegen GPOs

Interessante, alltägliche Themen und Diskussionen.
Benutzeravatar
Holgi
Elite
Elite
Beiträge: 2217
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 231 Mal
Danke erhalten: 309 Mal
Gender:

Re: Probleme mit Remot-PowerShell-Sitzung wegen GPOs

Beitrag von Holgi » 07.04.2024, 19:54

jetzt geht gar nichts mehr:
ISO2VM_2.JPG
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
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: Probleme mit Remot-PowerShell-Sitzung wegen GPOs

Beitrag von Tante Google » 07.04.2024, 19:54


Cyber-Mike
Nullposter
Beiträge: 0
Registriert: 30.03.2024, 00:19
Hat sich bedankt: 11 Mal
Danke erhalten: 2 Mal
Gender:

Re: Probleme mit Remot-PowerShell-Sitzung wegen GPOs

Beitrag von Cyber-Mike » 07.04.2024, 19:54

Ups ganz übersehen, Du musst dann natürlich am Ende vom Skript deine Starte Funktionen auch umbenennen xD

Cyber-Mike
Nullposter
Beiträge: 0
Registriert: 30.03.2024, 00:19
Hat sich bedankt: 11 Mal
Danke erhalten: 2 Mal
Gender:

Re: Probleme mit Remot-PowerShell-Sitzung wegen GPOs

Beitrag von Cyber-Mike » 07.04.2024, 19:58

Zeile 15 Extract-IsoWith7Zip in Invoke-IsoExtraction
Zeile 49 Erzeuge-OutputISO in New-OutputISO
115 und 117 ebenfalls

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

Re: Probleme mit Remot-PowerShell-Sitzung wegen GPOs

Beitrag von Holgi » 07.04.2024, 20:28

jetzt läuft das Script wieder, aber die ISO wird immer noch nicht eingehängt.
Ich stelle hier mal mein Script zur Verfügung. Da läuft das Ganze ohne murren ab. Der Anfang vom Script ist anders, da der VMName aus einer Batch-Datei (mit der das PS-Script aufgerufen wird) übergeben wird.
Vlt. kann jemand von euch - der sich besser mit Powershell auskennt - davon einen Nutzen ziehen und das Script von Kollege @g-force entsprechend umschreiben.
Das mit dem Computer-Host-Namen finde ich in meinem Script ganz gut gelöst:
$env:COMPUTERNAME
So ist man flexibel und muss die Variablen nicht da auch noch anpassen.

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
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: 248 Mal
Gender:

Re: Probleme mit Remot-PowerShell-Sitzung wegen GPOs

Beitrag von g-force » 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
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

Cyber-Mike
Nullposter
Beiträge: 0
Registriert: 30.03.2024, 00:19
Hat sich bedankt: 11 Mal
Danke erhalten: 2 Mal
Gender:

Re: Probleme mit Remot-PowerShell-Sitzung wegen GPOs

Beitrag von Cyber-Mike » 07.04.2024, 20:52

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
wegen dem umbenennen kannst Dir vllt mal den Link https://learn.microsoft.com/de-de/power ... ps-modules durchlesen.
Du erstellst eine Gen2 VM was ich raus gelesen hatte, wieso fügst dann noch einen Scsi Controller hinzu ? der is doch Standard dabei, lass die Zeile mal weg, dafür könntest das aber mal testen

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)
So sparst Dir auch die $DVDDrive

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

Re: Probleme mit Remot-PowerShell-Sitzung wegen GPOs

Beitrag von Holgi » 07.04.2024, 22:27

Das könnte es sein. In meiner Vhdx hängen virt. Festplatte und DVD an einem Scsi Controller.
Allerdings konnte ich keinen großen Unterschied diesbezüglich in den Scripten erkennen.
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: Probleme mit Remot-PowerShell-Sitzung wegen GPOs

Beitrag von Holgi » 08.04.2024, 10:52

da ist noch ein Fehler drin:

Code: Alles auswählen

Add-VMDvdDrive -VMName $VMName-ControllerNumber 0
muss lauten:

Code: Alles auswählen

Add-VMDvdDrive -VMName $VMName -ControllerNumber 0
aber es geht tatsächlich noch einfacher:

Code: Alles auswählen

	Add-VMDvdDrive -VMName $VMName -Path XXXXXX
	Set-VMFirmware -VMName $VMName -FirstBootDevice (Get-VMDvdDrive -VMName $VMName)
irgendwie scheint das Script nicht zurechtzukommen mit
$WorkPath\$ISOOutput
Ich nehme an, weil die beiden Variablen mit Anführungszeichen versehen sind.
Die Ausgabe wäre ja: "C:\ISO2VM"\"Server2022"-Unattend.iso"
So funktioniert das Script, wenn man den Pfad auflöst:

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
wenn man das Script umschreibt und dabei keine Anführungszeichen benutzt (voraussetzt), müßte es funktionieren.
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: 248 Mal
Gender:

Re: Probleme mit Remot-PowerShell-Sitzung wegen GPOs

Beitrag von g-force » 08.04.2024, 12:32

Erstmal vielen Dank für eure Hilfe!
Ich habe mir die letzte Version von @Holgi nochmal vorgenommen und ein paar Sachen angepasst.

Versuch 1:
- $ISIName = "Windows10" (das ist die ISO, die ich verwende)
- Add-VMDvdDrive -VMName $VMName -Path $WorkPath\$ISOOutput
Ergebnis: funktioniert nicht (wie gehabt)

Versuch 2:
- Add-VMDvdDrive -VMName $VMName -Path $WorkPath\Windows10-Unattend.iso
Ergebnis: funktioniert

Versuch 3:
- Add-VMDvdDrive -VMName $VMName -Path $WorkPath\$ISOName-Unattend.iso
Ergebnis: funktioniert

Fazit: Es liegt also an der Variable "$ISOOutput" bei der VM-Erstellung. Weiter oben im Script wird mit dieser Variablen die neue ISO erstellt, da funktioniert es noch. Egal, die Konfiguration aus Versuch 3 erfüllt den Zweck - es sollten ja so wenig wie möglich Anpassungen des End-Users nötig sein (eigentlich nur "$ISOName = ???")

Hier das funktionierende Script:

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"
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
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: 248 Mal
Gender:

Re: Probleme mit Remot-PowerShell-Sitzung wegen GPOs

Beitrag von g-force » 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.
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: Probleme mit Remot-PowerShell-Sitzung wegen GPOs

Beitrag von Holgi » 08.04.2024, 13:35

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.
Ist das jetzt noch interessant, oder hat sich das für dich erledigt?
Powershell Befehle lassen sich ja ebenfalls in die autounattend.xml integrieren.
Und das mit den Einstellungen für den Netadapter sollte eigentlich auch möglich sein. Das wäre jedoch Neuland für mich.
Server 2025 (hab übrigens schon ne Version ohne GUI davon)
Wir haben ja auch schon den Server 2025 mit GUI:
https://www.deskmodder.de/blog/2024/03/ ... h-als-iso/
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"
Das hat sich ja mit dem Script von @g-force erledigt. Press Any Key entfällt.
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: 248 Mal
Gender:

Re: Probleme mit Remot-PowerShell-Sitzung wegen GPOs

Beitrag von g-force » 08.04.2024, 13:50

Hier noch eine kleine Verbesserung zum Script, der "$WorkPath" wird jetzt automatisch ausgelesen - egal, wo man den Ordner "ISO2VM" liegen hat.

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)
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: Probleme mit Remot-PowerShell-Sitzung wegen GPOs

Beitrag von Holgi » 08.04.2024, 14:10

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.
Hi @g-force; das wäre natürlich genial.
Könntest du das hier noch integrieren? Du kennst dich ja mittlerweile besser mit Powershell aus als ich.
Wenn ich denn könnte, würde ich eine Abfrage machen in der Art:
if exist $PSScriptRoot Ordner §OEM§ than copy Ordner §OEM§ to TempPath\sources
Dann wäre man flexibel.
Danke!
Holgi
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: 248 Mal
Gender:

Re: Probleme mit Remot-PowerShell-Sitzung wegen GPOs

Beitrag von g-force » 08.04.2024, 14:48

Da bin ich gerade bei. :victory:
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

Cyber-Mike
Nullposter
Beiträge: 0
Registriert: 30.03.2024, 00:19
Hat sich bedankt: 11 Mal
Danke erhalten: 2 Mal
Gender:

Re: Probleme mit Remot-PowerShell-Sitzung wegen GPOs

Beitrag von Cyber-Mike » 08.04.2024, 14:59

Hallo zusammen,

hab eben mit einem der Dozenten gesprochen und er meinte das mit xml ist zwar schön und gut, aber ist für ein Projekt nicht geeignet.
Es geht darum, dass man nicht die Installation automatisiert, sondern das automatische erstellen der VMs und das anschließende implementieren der GPOs mit dem Skript. Passwörter udg soll der Benutzer selber eintragen.

Sry falls Du schon was in der Richtung wegen Netadapter usw. probiert hättest.

VG Mike

Antworten