App-V Buch
Unser App-V
Buch

- App-V Infrastruktur
- App-V Client
- App-V Sequenzierung
- Tools & Troubelshooting
- PowerShell mit App-V

Image is not available
Services
Image is not available
Image is not available
Image is not available
Image is not available
Image is not available
Image is not available

Hochwertige Lösungen mit bestem Kundenservice

Terminalserver- und Desktop Umgebungen mit der besten Usability

Schulungen und Workshops

Intuitive individuelle Lösungen

Standartanwendungen
App-V SaS über 20 Standardanwendungen

Alle wichtigen Browser

Wichtige Standardanwendungen

Wöchentlich aktuallisiert

Mit Support

Individuelle Anpassungen sind möglich

Schnell auf Sicherheitslücken reagieren

Bonus: Einige MSIX Pakete für WVD

App-V Buch
Services
Innovative IT-Lösungen
previous arrow
next arrow
Schriftgröße: +
7 minutes reading time (1490 words)

App-V mit Windows 10 1703 automatische Paketierung (Teil 2)

App-V mit Windows 10 1703 automatische Paketierung (Teil 2)

App-V mit Windows 10 1703 automatische Paketierung (Teil 2)

Im ersten Teil ist der automatischen Rollout eines Sequencers auf einem Hyper-V Host unter VMware Workstation beschrieben (also eine VM in einer VM). In diesem Teil beschreiben wir die neuen Möglichkeiten zu einer automatisierten Sequenzierung mit dem 1703 ADK. Voraussetzung ist eine Umgebung, die mit den Informationen aus Teil 1 aufgebaut wurde. Alle Aktionen müssen wiederum mit einer administrativen PowerShell durchgeführt werden. Wir zeigen, wie der Auto-Sequencer mit einer Steuerungsdatei zu nutzen ist. Weiterhin ein eigenes PowerShell Skript welches alle MSI und Setup.exe Dateien in einem Verzeichnis automatisiert sequenziert.

Weitere Neuerungen für App-V mit Windows 10 Enterprise 1703

Unveröffentlichte Pakete können jetzt automatisch aus dem Cache gelöscht werden. Dazu existiert die neue Konfigurationseinstellung “AutoCleanupEnabled”. Diese Funktion kann über die Gruppenrichtlinie “Enable automatic cleanup of unused appv packages” aktiviert werden oder über PowerShell mit:

Set-AppvClientConfiguration -AutoCleanupEnabled 1

Und in der Registrierung:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AppV\Client\PackageManagement AutoCleanupEnabled

Get-AppvClientPackage -all zeigt diese Pakete nicht mehr an. Zu berücksichtigen ist dabei, dass sich die Bereitstellungszeit für so ein Paket erhöht, wenn es doch einmal benötigt wird.

Ergänzung zu Teil 1

Zunächst einmal eine Ergänzung zum ersten Teil. Ich habe probiert mich mit Connect-AppVSequencerVM nach einem Neustart der VM noch einmal zu verbinden und habe gleich eine Fehlermeldung bekommen. Microsoft hat eine wichtige Variable AutoSequencingRoot nur unter der PowerShell Funktion New-AppVSequencerVM gesetzt. Wenn nun in einer neuen Sitzung keine neue VM angelegt wird, gibt es die Variable nicht. Zuvor hat das funktioniert, weil es sich um die gleiche PowerShell Sitzung gehandelt hat. Dadurch funktioniert in Zeile 9 im Modul „AutoSequencingTelemetry.psm1“ der Join-Path Befehl nicht mehr. Die Funktion Connect-AppVSequencerVM im Modul New-AppVSequencerVM.psm1 kann wie folgt ergänzt werden, damit es nicht zu dem Fehler kommt (Microsoft, here is a bug):

 

function Connect-AppVSequencerVM
{
param(
..
)
process {
Import-module …
Import-module …
Write-Host "set Root for Connect" -ForegroundColor Green #new
$Script:AutoSequencingRoot = "$PSScriptRoot\.." #new
..

Anschließend hat Connect-SequencerVM wieder funktioniert. 

 

Automatisierte Sequenzierung

Für die automatische Sequenzierung von einem oder mehreren Installationspaketen hat Microsoft den neuen Befehl „New-BatchAppVSequencerPackages“ implementiert, der über eine XML Datei steuert, was auf dem remote Sequencer passieren soll. Der offizielle Technet Artikel dazu ist hier zu finden: https://technet.microsoft.com/en-us/itpro/windows/manage/appv-auto-batch-sequencing

Der Aufruf ist wie folgt definiert:

New-BatchAppVSequencerPackages –ConfigFile –VMName -OutputPath

In diesem Artikel haben sich wiederum einige Fehler eingeschlichen, die den Prozess unmöglich machen. Derjenige, der den Artikel geschrieben hat, hat den Vorgang vermutlich nicht getestet. Hier wird es nun korrekt dokumentiert. Das Tag im Artikel ist , die xml Steuerungsdatei wird nicht mit beendet. Die Anweisung „True“ darf nicht großgeschrieben werden. Die Beispieldatei ist somit unbrauchbar und es kommt zu den folgenden Fehlermeldungen:

(The 'Cmdlet' element is invalid - The value 'True' is invalid according to its datatype oder so The element 'Application' has invalid child element 'Name'. List of possible elements expected.

Selbst das Beispiel im Installationsverzeichnis des ADK ist nicht korrekt (sample_config.xml).

Error App V Autosequencer

Die Steuerungsdatei kann mehrere Aufrufe zur Sequenzierung enthalten und kennt die folgenden „korrekten“ Anweisungen:

  • AppName: der Name, den das automatisiert erstellte App-V Paket bekommt
  • InstallerFolder: der Ordner auf dem Host, der die Installationsdatei enthält. Die Datei wird auf den Sequencer kopiert
  • Installer: Setup.exe oder ein MSI in dem InstallerFolder
  • TimeoutInMinutes: Timeout, wenn ein Paket mal hängen sollte
  • Cmdlet: Bei „true“ (klein geschrieben) wird eine Commandline aufgerufen. Mit „false“ wird der Sequencer gestartet. Wenn der Sequencer gestartet wird sind die anderen Anweisungen eigentlich unwichtig, da die Angaben nicht übernommen werden. Die Installationsquellen sind auf dem Sequencer unter „c:\Users\Public\Documents\ProductInstaller“ zu finden, wann man die Funktion nutzen möchte
  • Enabled: „true“, die Anwendung wird sequenziert. „false“ (klein geschrieben), die Anwendung wird nicht sequenziert
    Es dürfen mehrere Blöcke existieren, die innerhalb des Tags „“ definiert werden.

 Es können mehrere Applikationen in der Konfigurationsdatei existieren:

 App V Auto Sequencer Config1a

 Im Folgenden eine funktionierende Beispieldatei:

  App V Auto Sequencer Config2a

Anmerkung: Vor jedem Start die VM manuell auf einen neutralen Snapshot zurücksetzen!

 Mit dem Aufruf wird ein Snapshot der Sequencer VM erstellt und bei jedem Paket zurückgesetzt, die Dateien unter dem Ordner „InstallFolder“ werden automatisch auf den Sequencer kopiert und eine Sequenzierung eingeleitet. Nach Abschluss des Vorgangs wird das erstellte „.appv“ Paket mit alles dazugehörenden Dateien in einen Unterordner im Ordner „OutputPath“ auf den Host kopiert. 

Für diesen Vorgang wird zunächst ein Ordner „c:\Packages“ mit den Unterordnern MSI und Output auf dem Hyper-V Host angelegt. In den MSI-Ordner werden in diesem Beispiel die beiden Pakete XmlNotepad.msi und Free_AppDeploy_Repackager.msi gelegt (andere Dateien sind möglich).

Der Vorgang wird mit eingeleitet:

 

New-BatchAppVSequencerPackages -ConfigFile C:\packages\sequence.xml -VMName SEQ1 -OutputPath C:\packages\output\
Log file: C:\Users\Andreas\AppData\Local\Temp\AutoSequencer\Logs\New-BatchAppVSequencerPackages-04-14-2017-18-43-25.txt
Report file: C:\packages\output\\New-BatchAppVSequencerPackages-report-04-14-2017-18-43-27.txt
Number of applications in the batch 2
-- Start sequencing XmlNotepad  --
Applying checkpoint sequencer-base to VM..
Waiting for VM to finish starting up...
Waiting for VM session......
Copying installer to VM..
Scheduling sequencing task..
DNS Resolving for SEQ1
DNS Resolved SEQ1.localdomain
Waiting for sequencing task to start....
Sequencing task is running..........................
Sequencing task has finished running
-- Done sequencing XmlNotepad --
-- Start sequencing Free_AppDeploy_Repackager  --
Applying checkpoint sequencer-base to VM..
Waiting for VM to finish starting up...
Waiting for VM session......
Copying installer to VM..
Scheduling sequencing task..
DNS Resolving for SEQ1
DNS Resolved SEQ1.localdomain
Waiting for sequencing task to start....
Sequencing task is running.......................
Sequencing task has finished running
-- Done sequencing Free_AppDeploy_Repackager --
Sequencing complete.

Irgendwann ist das Ganze hoffentlich erfolgreich abgeschlossen und die beiden Pakete sind im Outputverzeichnis zu finden:

 

App V Auto Sequencer Outpunt
Zusätzlich existieren zwei Log Dateien in dem Verzeichnis. Weitere Logs sind unter %temp%\AutoSequencer\Logs zu finden.
Im App-V Anwendungsverzeichnis findet sich zusätzlich eine Log.txt. Darin ist zu sehen, dass jedes Paket mit dem FullLoad Parameter erzeugt wird. Was aus meiner Sicht überflüssig ist. Meist wird ein FullLoad über eine Gruppenrichtlinie erzwungen. Oft nutzen wir für unsere Umgebungen den SCS-Mode.

Update

Das Batch Update ermöglicht es, ein ganzes Verzeichnis von App-V Paketen mit einem Aufruf einem Update zu unterziehen. Dabei nutzen wir die gleichen Anweisungen, wie schon bei der Batch Paketierung. Der Technet Artikel dazu ist hier zu finden:

https://technet.microsoft.com/en-us/itpro/windows/manage/appv-auto-batch-updating 

Zusätzlich existiert der Tag Packages unter dem das App-V Paket hinterlegt ist, auf welches das Update angewendet werden soll. Der Tag „Name“ aus dem TechNet Artikel ist wiederum durch AppName zu ersetzen.

  • Packags: Name des App-V Paketes auf dem Sequencer

Automatische Generierung der XML Datei mit PowerShell

Es ist eine kleine Fingerübung für MSI-Dateien in einem Verzeichnis eine passende XML Datei zu generieren. Also, wenn massenhaft MSI-Pakete oder Setup Dateien nach App-V gewandelt werden sollen, kann das beispielsweise mit dem folgenden Skript durchgeführt werden (vereinfacht).

 

<#
	.SYNOPSIS
		Create a xml file to für the 1703 Auto-Sequencer to sequence msi or setup.exe files in a folder 
        Try to sequence every file!
	.PARAMETER  SetupPath
		Path to teh msi (or setup) files on the host
	.PARAMETER  XmlFile
		Output path for the xml file
	.EXAMPLE
		Create-AutoSequencerxml.ps1 -SetupPath c:\Packages\msi
	.LINK
		http://www.software-virtualisierung.de
    -Author
		Andreas Nick 2017
#>

[CmdletBinding()]
param(
	[Parameter(Position=0, Mandatory=$true)]
	[System.IO.FileInfo]$SetupPath,
	[Parameter(Position = 1, Mandatory = $true)]
	[System.IO.FileInfo] $XmlPath
)

# Create a new XML 
[System.XML.XMLDocument]$AppvXML = New-Object System.XML.XMLDocument
[System.XML.XmlNode]$AppvNode = $AppvXML.CreateXmlDeclaration("1.0", $null, $null)
$AppvXML.appendChild($AppvNode)
$AppVApps = [System.XML.XMLElement]$AppvXMLRoot = $AppvXML.CreateElement("Applications")
$AppvXML.appendChild($AppvXMLRoot)

foreach ($file in Get-ChildItem $SetupPath -Recurse -Include *.exe, *.msi)
{
	
	Write-Host "Add application :" $file.FullName -ForegroundColor Blue
	[System.XML.XMLElement]$AppNode = $AppvXML.CreateElement("Application")
	$AppVApps.AppendChild($AppNode)
	$AppNode.AppendChild($AppvXML.CreateElement("AppName")).InnerText = $file.Name.Substring(0, $file.Name.Length - 4)
	$AppNode.AppendChild($AppvXML.CreateElement("InstallerFolder")).InnerText = Split-Path $file.FullName -Parent
	$AppNode.AppendChild($AppvXML.CreateElement("Installer")).InnerText = $file.name
	if ($file.Name -match '.exe$')
	{
		$AppNode.AppendChild($AppvXML.CreateElement("InstallerOptions")).InnerText = "/s"
	}
	else
	{
		$AppNode.AppendChild($AppvXML.CreateElement("InstallerOptions")).InnerText = "/qn"
	}
	
	$AppNode.AppendChild($AppvXML.CreateElement("Cmdlet")).InnerText = "true"
	$AppNode.AppendChild($AppvXML.CreateElement("Enabled")).InnerText = "true"
}

$AppvXML.Save($XmlPath)

Für eine automatische Sequenzierung schaut das wie folgt aus:

 

 

 

Create-AutoSequencerxml.ps1 -SetupPath C:\packages\msi\ -XmlPath C:\packages\autoseq.xml | Out-Null
Add application : C:\packages\msi\Free_AppDeploy_Repackager.msi
Add application : C:\packages\msi\XmlNotepad.msi

New-BatchAppVSequencerPackages -ConfigFile C:\packages\autoseq.xml -VMName SEQ1 -OutputPath C:\packages\output\
Log file: C:\Users\Andreas\AppData\Local\Temp\AutoSequencer\Logs\New-BatchAppVSequencerPackages-04-14-2017-21-43-54.txt
Report file: C:\packages\output\\New-BatchAppVSequencerPackages-report-04-14-2017-21-43-56.txt
Number of applications in the batch 2
-- Start sequencing Free_AppDeploy_Repackager  --
Applying checkpoint sequencer-base to VM..
Waiting for VM to finish starting up...
Waiting for VM session......
Copying installer to VM..
Scheduling sequencing task..
DNS Resolving for SEQ1
DNS Resolved SEQ1.localdomain
Waiting for sequencing task to start.....
Sequencing task is running..........................
Sequencing task has finished running
-- Done sequencing Free_AppDeploy_Repackager --
-- Start sequencing XmlNotepad  --
Applying checkpoint sequencer-base to VM..
Waiting for VM to finish starting up...
Waiting for VM session....

Fazit

 

Im Allgemeinen funktioniert das Verfahren gut. Zwischenzeitlich war die Sequencer VM aber nicht mehr zu gebrauchen, weil eine Anmeldung nicht mehr möglich war (warum auch immer) – die Änderung war im Snapshot und die Vorlage musste neue erstellt werden. Was mit der Anleitung aus Teil 1 wieder sehr schnell ging. Leider scheint die Paketerstellung einige Defizite zu haben denn ein App-V Template (Filetype appvt) kann nicht angegeben werden. Damit fehlt die Möglichkeit, beispielsweise COM Interaktion zu erlauben oder Schreibrechte im VFS. Dafür wird jedes Paket mit dem Fulload Parameter erstellt, ohne die Möglichkeit dieses zu deaktivieren. Naja, wer diese Funktionen möchte, schaut sich bitte meinen Blog zur automatisierten MSI Erstellung an. Statt eines MSI Pakets oder einer Setup.exe ist übrigens ein Skript zur Sequenzierung viel sinnvoller. Dort kann man beispielsweise auch Desktopverknüpfungen automatisiert löschen und es wird zumindest in unseren weiter entwickelten Paketierungsskripten (beispielsweise für den AppBot) auch auf eine deutsche Codepage geachtet.

UE-V (Teil 2) für Windows 10, Version 1607 konfigu...
Auto-Sequencer App-V mit Windows 10 1703 auf VMwar...

Ähnliche Beiträge

 

Kommentare 2

Gäste - Christian am Mittwoch, 05. Juli 2017 09:41

Nachdem ich die ganze Umgebung am Montag zum laufen gebracht habe und die ersten Pakete (Firefox und Adobe Reader) automatisch zum laufen gebracht habe war ich echt glücklich.

Zwei Tage später: Beide Pakete starten nicht mehr sondern fallen auf die Nase mit der Meldung "Die Anwendung konnte nicht korrekt gestartet werden (0xc0000142)."
Die bekannten probleme sind es nicht (https://blogs.msdn.microsoft.com/sgern/2013/11/14/0xc0000142-beim-starten-von-app-v-anwendungen-vom-netzwerk-oder-auch-nicht/). Pakete, die Manuell auf einem anderen Sequencer erstellt wurden, funktionieren weiterhin.
AppV Log ist nicht sehr hilfreich, gibt keinen erkenntlichen Fehler:
[3]0F80.1760::‎2017‎-‎07‎-‎05 09:40:18.101 [Microsoft-AppV-ServiceLog]Container: --> AppV::Client::Container::ContainerDispatcher::VirtualProcessCreated()
[3]0F80.1760::‎2017‎-‎07‎-‎05 09:40:18.101 [Microsoft-AppV-ServiceLog]Container: --> AppV::Client::Container::ContainerManager::LookupContainer()
[3]0F80.1760::‎2017‎-‎07‎-‎05 09:40:18.101 [Microsoft-AppV-ServiceLog]Container: AppV::Client::Container::Container::AddProcess()
[3]0F80.1760::‎2017‎-‎07‎-‎05 09:40:18.101 [Microsoft-AppV-ServiceLog]Container: Adding process C:\ProgramData\App-V\300D17AA-FE5D-44EE-A2BC-DCFD449F0461\E93E5980-C24B-40C5-B708-38902C875E45\Root\VFS\ProgramFilesX86\Mozilla Firefox\firefox.exe with ID = 6276 to container {300D17AA-FE5D-44EE-A2BC-DCFD449F0461} - {E93E5980-C24B-40C5-B708-38902C875E45}. [AppV::Client::Container::Container::AddProcess; 174]
[3]0F80.1760::‎2017‎-‎07‎-‎05 09:40:18.101 [Microsoft-AppV-ServiceLog]Container: Process 6276 is not in a job. No processes have been added to container {300D17AA-FE5D-44EE-A2BC-DCFD449F0461} - {E93E5980-C24B-40C5-B708-38902C875E45}. Originating process is 6276, Jit-V VE: false, Last Error: 0. [AppV::Client::Container::Container::AddProcess; 207]
[3]0F80.1760::‎2017‎-‎07‎-‎05 09:40:18.101 [Microsoft-AppV-ServiceLog]Container:

Nachdem ich die ganze Umgebung am Montag zum laufen gebracht habe und die ersten Pakete (Firefox und Adobe Reader) automatisch zum laufen gebracht habe war ich echt glücklich. Zwei Tage später: Beide Pakete starten nicht mehr sondern fallen auf die Nase mit der Meldung "Die Anwendung konnte nicht korrekt gestartet werden (0xc0000142)." Die bekannten probleme sind es nicht (https://blogs.msdn.microsoft.com/sgern/2013/11/14/0xc0000142-beim-starten-von-app-v-anwendungen-vom-netzwerk-oder-auch-nicht/). Pakete, die Manuell auf einem anderen Sequencer erstellt wurden, funktionieren weiterhin. :( AppV Log ist nicht sehr hilfreich, gibt keinen erkenntlichen Fehler: [3]0F80.1760::‎2017‎-‎07‎-‎05 09:40:18.101 [Microsoft-AppV-ServiceLog]Container: --> AppV::Client::Container::ContainerDispatcher::VirtualProcessCreated() [3]0F80.1760::‎2017‎-‎07‎-‎05 09:40:18.101 [Microsoft-AppV-ServiceLog]Container: --> AppV::Client::Container::ContainerManager::LookupContainer() [3]0F80.1760::‎2017‎-‎07‎-‎05 09:40:18.101 [Microsoft-AppV-ServiceLog]Container: AppV::Client::Container::Container::AddProcess() [3]0F80.1760::‎2017‎-‎07‎-‎05 09:40:18.101 [Microsoft-AppV-ServiceLog]Container: Adding process C:\ProgramData\App-V\300D17AA-FE5D-44EE-A2BC-DCFD449F0461\E93E5980-C24B-40C5-B708-38902C875E45\Root\VFS\ProgramFilesX86\Mozilla Firefox\firefox.exe with ID = 6276 to container {300D17AA-FE5D-44EE-A2BC-DCFD449F0461} - {E93E5980-C24B-40C5-B708-38902C875E45}. [AppV::Client::Container::Container::AddProcess; 174] [3]0F80.1760::‎2017‎-‎07‎-‎05 09:40:18.101 [Microsoft-AppV-ServiceLog]Container: Process 6276 is not in a job. No processes have been added to container {300D17AA-FE5D-44EE-A2BC-DCFD449F0461} - {E93E5980-C24B-40C5-B708-38902C875E45}. Originating process is 6276, Jit-V VE: false, Last Error: 0. [AppV::Client::Container::Container::AddProcess; 207] [3]0F80.1760::‎2017‎-‎07‎-‎05 09:40:18.101 [Microsoft-AppV-ServiceLog]Container:
Andreas Nick am Mittwoch, 05. Juli 2017 10:03

Die Frage ist dann eher was Microsoft anders macht. Mit unseren Skripten hatte ich nie solche Probleme bei Massenkonvertierungen. Vielleicht kannst Du mir ein Paket zuschicken, dass Du einmal mit dem Auto-Sequencer und einmal mit dem Sequencer selber paktiert hast? Ich könnte dann mal analysieren. Die Fehlernummer schaue ich mir einmal genauer an. Hast Du einmal einen Mount des Paketes getestet?

Die Frage ist dann eher was Microsoft anders macht. Mit unseren Skripten hatte ich nie solche Probleme bei Massenkonvertierungen. Vielleicht kannst Du mir ein Paket zuschicken, dass Du einmal mit dem Auto-Sequencer und einmal mit dem Sequencer selber paktiert hast? Ich könnte dann mal analysieren. Die Fehlernummer schaue ich mir einmal genauer an. Hast Du einmal einen Mount des Paketes getestet?
Bereits registriert? Hier einloggen
Dienstag, 03. Dezember 2024

Sicherheitscode (Captcha)

Nick Informationstechnik GmbH
Dribusch 2
30539 Hannover

+49 (0) 511 165 810 190
+49 (0) 511 165 810 199

infonick-it.de

Newsletter

Anmeldung zum deutschen M.A.D. Newsletter mit Informationen zur Anwendungsvirtualisierung!