Jump to content

WinPE 5.0 einrichten nativer VHD boot mit Powershell


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo,

ich nutze bis jetzt ein Batch-Skript welches in WindowsPE ausgeführt wird, um auf einer blanken Maschine eine Master-VHD zu erstellen und eine darauf Differenzierende-VHD anzulegen.

Diese VHD kann dann nativ gebootet werden. Hier kann dann auf echter Hardware mit virtueller Festplatte geändert, getestet ... usw. werden.

 

Nun bin ich dabei das Skript auf Powershell umzustricken und auch gleich eine einfache Benutzerfreundliche Oberfläche (WPF) anzulegen.

post-60361-0-40252200-1442475345_thumb.png

 

Die Ausführung des Skript dauert relativ lange und die GUI "scheint" deswegen einzufrieren, was den Benutzer suggeriert, dass etwas nicht stimmt.

Außerdem möchte ich gerne den Fortschritt und Statusmeldungen des Skripts in die GUI zurückgeben.

 

Nun habe ich mich mit den Runspaces beschäftigt um Skript und GUI auszulagern. Beispiel hier: http://learn-powershell.net/2012/10/14/powershell-and-wpf-writing-data-to-a-ui-from-a-different-runspace/

 

Ich nutze also den Code aus den Beispiel welcher lokal in Windows 8.1 ISE funktioniert.

$syncHash = [hashtable]::Synchronized(@{})
$newRunspace =[runspacefactory]::CreateRunspace()
$newRunspace.ApartmentState = "STA"
$newRunspace.ThreadOptions = "ReuseThread"         
$newRunspace.Open()
$newRunspace.SessionStateProxy.SetVariable("syncHash",$syncHash)          
$psCmd = [PowerShell]::Create().AddScript({   
    [xml]$xaml = @"
    <Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Name="Window" Title="Initial Window" WindowStartupLocation = "CenterScreen"
        Width = "600" Height = "800" ShowInTaskbar = "True">
        <TextBox x:Name = "textbox" Height = "400" Width = "600"/>
    </Window>
"@
  
    $reader=(New-Object System.Xml.XmlNodeReader $xaml)
    $syncHash.Window=[Windows.Markup.XamlReader]::Load( $reader )
    $syncHash.TextBox = $syncHash.window.FindName("textbox")
    $syncHash.Window.ShowDialog() | Out-Null
    $syncHash.Error = $Error
})
$psCmd.Runspace = $newRunspace
$data = $psCmd.BeginInvoke()
Function Update-Window {
    Param (
        $Title,
        $Content,
        [switch]$AppendContent
    )
    $syncHash.textbox.Dispatcher.invoke([action]{
        $syncHash.Window.Title = $title
        If ($PSBoundParameters['AppendContent']) {
            $syncHash.TextBox.AppendText($Content)
        } Else {
            $syncHash.TextBox.Text = $Content
        }
    },
    "Normal")
}

Update-Window -Title ("Services on {0}" -f $Env:Computername) `
              -Content (Get-Service | Sort Status -Desc| out-string)

Nur leider bekomme ich es nicht unter WindowsPE zum laufen. Hat jemand eine Idee warum ich das dispatcher object hier nicht nutzen kann?

post-60361-0-82034400-1442475653_thumb.png

 

Oder gibt es noch eine andere Variante wie ich Meldungen aus dem Skript in die GUI zurückgeben kann Bsp. mit Windows.Forms, da WPF ja eigentlich nicht in Winpe unterstützt wird?

bearbeitet von michelo82
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...