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

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

MSP Productcode mit Powershell auslesen

MSPPS 180x180Ein Windows Installer-Patch (MSP-Datei) ist eine Paketdatei, ein die Updates für eine bestimmte Anwendung enthält und beschreibt, welche Versionen der Anwendung gepatcht werden kann. Der Vorteil eines MSPs ist, dass nur die Dateien enthalten sind, die sich zu einem MSI ändern. MSP werden für Minor Releases eingesetzt (i.d.R. kleine Updates). Ich selber habe ein Tool in der Hinterhand, dass  binäre Differenzen für extrem kleine Patches verteilen kann (wird denn demnächst veröffentlicht).

In dem Patch enthalten ist u.a. ein Productcode und ein Patchcode für die zu ändernde Anwendung. Passt der Productcode zu einer installierten Anwendung, kann gepatched werden. Es ist also praktisch, diesen Code schon vor einer Installation zu ermitteln, um eine Softwareverteilung zu optimieren. Im Folgenden werden zwei Lösungen mit Powershell gezeigt.


Wie bekommt man den Productcode heraus? Eine Variante ist die Installation auf Codeplex: MSI Powershell Module. Der Nachteil dieses Modules ist, dass dafür auch wieder ein MSI installiert werden muss. Dies beinhaltet wiederum Komponenten des Windows Installer XML. Also nichts, was einfach in ein Paket eingebunden werden kann.Das MSI Powershell Module ist im übrigen sehr gut und ich kann das sehr empfehlen für komplexere Dinge. Nach der Installation bekommt man beispielsweise so die Daten einer MSI Datei:

get-msicomponentinfo `
    | where { $_.Path -like 'C:\Program Files\*\Common7\IDE\devenv.exe'} `
    | get-msiproductinfo

Vor kurzen habe ich nach einer Möglichkeit, gesucht, den Productcode eines eines MSP auszulesen, ohne diesen Overhead. Das COM Object "WindowsInstaller.Installer" bietet diese Möglichkeit. Der Vorteil ist, dass diese Funktionen leicht bei Installationen eingesetzt werden können. Also zum Abgleich, ob ein Patch für ein System geeigent ist. Demnächst baue ich das genau so in unseren Citrix XenApp Patcher ein.

Auslesen des "Display Name" des Patches mit Powershell. Achtung, dieser ist nicht immer im MSP enthalten:

function Get-MSPDisplayName {
<# 
.SYNOPSIS 
    Get the Display Name from an Microsoft Installer Patch MSP
.DESCRIPTION 
    Get Display Name from an Microsoft Installer Patch MSP (Andreas Nick 2015)
.NOTES 
    $NULL for an error
.LINK
.RETURNVALUE
  [String] Display Name
.PARAMETER
  [IO.FileInfo] Path to the msp file
#>
function Get-MSPDisplayName {
	param (
		[IO.FileInfo] $patchnamepath
	)
	try {
		$wi = New-Object -com WindowsInstaller.Installer
		$mspdb = $wi.GetType().InvokeMember("OpenDatabase", "InvokeMethod", $Null, $wi, $($patchnamepath.FullName, 32))
		$su = $mspdb.GetType().InvokeMember("SummaryInformation", "GetProperty", $Null, $mspdb, $Null)
		[String] $displayName = $su.GetType().InvokeMember("Property", "GetProperty", $Null, $su, 6)
		return $displayName
	}
	catch {
		Write-Output $_.Exception.Message
		return $NULL
	}
}

Auslesen des Productcodes eines Microsoft Patches (MSP) mit Powershell:

<# 
.SYNOPSIS 
    Get the Product Code from an Microsoft Installer Patch MSP
.DESCRIPTION 
    Get a Product Code from an Microsoft Installer Patch MSP (Andreas Nick 2015)
.NOTES 
    $NULL for an error
.LINK
.RETURNVALUE
  [String] Product Code
.PARAMETER
  [IO.FileInfo] Path to the msp file
#>
function Get-MSPProductcode {
	param (
		[IO.FileInfo] $patchnamepath
	)
	try {
		$wi = New-Object -com WindowsInstaller.Installer
		$mspdb = $wi.GetType().InvokeMember("OpenDatabase", "InvokeMethod", $Null, $wi, $($patchnamepath.FullName, 32))
		$su = $mspdb.GetType().InvokeMember("SummaryInformation", "GetProperty", $Null, $mspdb, $Null)
		#$pc = $su.GetType().InvokeMember("PropertyCount", "GetProperty", $Null, $su, $Null)
		
		[String] $productcode = $su.GetType().InvokeMember("Property", "GetProperty", $Null, $su, 7)
		return $productcode
	}
	catch {
		Write-Output $_.Exception.Message
		return $NULL
	}
}

Auslesen des Patchcodes eines MSP Patches mit Powershell:

<# 
.SYNOPSIS 
    Get the Patch Code from an Microsoft Installer Patch MSP
.DESCRIPTION 
    Get a Patch Code from an Microsoft Installer Patch MSP (Andreas Nick 2015)
.NOTES 
    $NULL for an error
.LINK
.RETURNVALUE
  [String] Product Code
.PARAMETER
  [IO.FileInfo] Path to the msp file
#>
function Get-MSPPatchcode {
	param (
		[IO.FileInfo] $patchnamepath
		
	)
	try {
		$wi = New-Object -com WindowsInstaller.Installer
		$mspdb = $wi.GetType().InvokeMember("OpenDatabase", "InvokeMethod", $Null, $wi, $($patchnamepath.FullName, 32))
		$su = $mspdb.GetType().InvokeMember("SummaryInformation", "GetProperty", $Null, $mspdb, $Null)
		$pc = $su.GetType().InvokeMember("PropertyCount", "GetProperty", $Null, $su, $Null)
		#Write-Host $pc
		[String] $patchcode = $su.GetType().InvokeMember("Property", "GetProperty", $Null, $su, 9)
		return $patchcode
	}
	catch {
		Write-Output $_.Exception.Message
		return $NULL
	}
}

 

Weiterlesen
  21512 Aufrufe

Citrix XenApp 7.6, AppSense EM, Mandatory User Profile und App-V langsame Erstanmeldung

Cube Silver 180x180

In einer größeren neuen Kundenumgebung mit Citrix XenApp 7.6 sollten die Anmeldezeiten und die Profile klein gehalten werden. In der neuen XenApp Umgebung werden Anwendungen über App-V 5 (SP3) bereitgestellt. Die Veröffentlichung erfolgt im Citrix Studio. Andere Anwendungen sind direkt im „Golden Image“ für den Citrix Provisioning Server integriert. Wir haben 120 Veröffentlichungen, von denen rund 90% über App-V 5.0 bereitgestellt werden.
Alle Anwender bekommen ein „schlankes“ Mandatory Profile. Die Einstellungen der Anwendungen sind mit dem Appsense Environment Manager im Profile Manager konfiguriert und werden nach einer Anmeldung automatisch von einem Microsoft SQL Server geladen und bei einer Abmeldung wieder gespeichert.Die Grupenrichtlinien wurden speziell Terminalserver optimiert.
Die Umgebung hatte nach den Daten des Directors eigentlich recht gute Startzeiten. Nur leider nicht bei der morgentlichen Erstanmeldung beim Start einer App-V Anwendung.

Weiterlesen
  16353 Aufrufe

mit Powershell die Gruppen und die SIDs der Gruppen holen

Hier ein kleines Skript, dass neben dem Gruppennamen über "Get-ACL" auch die SID holt. Das ist dann sinnvoll, wenn mehrsprachige Systeme voeliegen. Zumindest die lokalen SIDs sind eindeutig, auch wenn sich die Systemsprache unterscheidet.

# Andreas Nick 2015
param ([String] $Folder)

[System.Reflection.Assembly]::LoadWithPartialName("System.Security.Principal") | Out-Null

$List = get-acl $Folder

$List.Access | ForEach-Object {
    #[System.Security.AccessControl.FileSystemAccessRule] $r = $_; !
   
    $AdObj = New-Object System.Security.Principal.NTAccount -ArgumentList $_.IdentityReference
    $strSID = $AdObj.Translate([System.Security.Principal.SecurityIdentifier])
    
    Write-Host "Group :" $_.IdentityReference "     SID:" $strSID.Value
    
}




 

PS C:\Users\Andreas\Desktop> & .\GetACL-SID.ps1  -Folder C:\temp
Group : Jeder      SID: S-1-1-0
Group : VORDEFINIERT\Administratoren      SID: S-1-5-32-544
Group : NT-AUTORITÄT\SYSTEM      SID: S-1-5-18
Group : VORDEFINIERT\Benutzer      SID: S-1-5-32-545
Group : NT-AUTORITÄT\Authentifizierte Benutzer      SID: S-1-5-11
Group : NT-AUTORITÄT\Authentifizierte Benutzer      SID: S-1-5-11

 

 

 

Weiterlesen
  14796 Aufrufe

App-V Pakete High Availability HA bereitstellen


Cube180x180Im Folgenden eine Zusammenfassung zu den Möglichkeiten App-V mit „Bortmitteln“ redundant bereitzustellen. Generell kann diese Verfahren auch auf die Bereitstellung mit SCCM übertragen werden. Die Distribution Points fungiert dabei als Streaming Server. Mit Citrix XenApp/Desktop gibt es bei Bereitstellung einige Probleme. Diese werden untem im Artikel seperat erleutert.

Weiterlesen
  17894 Aufrufe

Teil 2: AppDna Kurzvorstellung – Konfiguration und Analyse von Anwendungen

DNA180x180Im ersten Teil unserer Kurzvorstellung haben wir eine Einführung zu dem Produkt und zu den Möglichkeiten zur Softwareanalyse erstellt. Im zweiten Teil geht es um die Erstkonfiguration und die Analysemöglichkeiten von Anwendungen mit Citrix AppDna.

Mit der Analysefunktion erleichtert AppDNA die Migration von Anwendungen auf eine neue Zielplattform erheblich. Es werden Anwendungsberichte für verschiedene Paketierungsszenarien erstellt und für die Meisten Fälle auch Lösungsvorschläge erstellt. Funktionen im Einzelnen:

- Kompatibilitätsberichte
- Testen von Abängigkeiten der Anwendungen untereinander
- Testen der App-V Fähigkeit einer Anwendung
- Import und Analyse von Paketen aus SCCM und anderen Softwareverteilungen
- Direkter Import von MSI Paketen
- „Effort Calculator“, um Projektkosten abschätzen zu können
- Erstellung eigener Berichte

Weiterlesen
  12735 Aufrufe

Teil 1: AppDna Kurzvorstellung – Einführung und Installation von Citrix AppDna

DNA180x180Nachdem Citrix AppDNA  in der XenApp/XenDesktop Platinum Lizenz inkludiert hat, wird die Nutzung für alle Umgebungen mit einer entsprechenden Lizenz Interessant. Dabei ermöglicht AppDna nicht nur die genaue Analyse von Anwendungen für eine Zielumgebung, sondern auch eine automatische, sehr einfach zu nutzende Sequenzierung mit App-V 5 und App-V 4.6. Dies ist der erste von Drei Artikeln zu AppDna. Vertiefende Informationen sind auf der Citrix Produktseite und in den E-Docs zu finden.

Besonders die Möglichkeit mit AppDNA schnell an App-V Pakete zu kommen, um diese direkt zu nutzen oder durch die Kundeninterne Paketierung weiter zu verarbeiten (Branding) ist ein sehr interessanter Aspekt von AppDna. Die Paketierung bekommt neben dem Anwendungsreport also schon ein vorgefertigtes Paket. Die Zeiteinsparungen sind enorm.AppDna ermöglicht es in kürzester Zeit hunderte von Anwendungen an eine Zielumgebung zu analysieren. Dabei liefert AppDNA Informationen, die es der Citrix Administration ermöglichen, die Risiken von Updates und Installationen neuer Software in der eigenen Umgebung einzuschätzen. 

Weiterlesen
  16921 Aufrufe

Sign XML with Digital Signatures and Powershell

 CodeSnip180x180The code example in this procedure demonstrates how to digitally sign an entire XML document with Powershell and attach the signature to the document in a <Signature> element.

The example creates an RSA signing key, and adds the key to a "non persistent" container.

After this, we verify the signatur on a example xml

  

 

Weiterlesen
  19051 Aufrufe

AppVFileFormatLibrary eine C# Libary für den direkten Zugriff auf AppV 4.6 Files unter einer BSD Lizenz

App V SFT Examinier 180x180Für den geplanten eigenen App-V 4.6 nach App-V 5 Konverter suchen wir nach einer Möglichkeit für den direkten Zugriff auf die Dateien und die Registrierung in einem App-V File. Wir sind fündig geworden. Unter dem Link:

http://appvlib.codeplex.com/SourceControl/latest

Weiterlesen
  13828 Aufrufe

Recrusiv Verzeichnisse vergleichen

ShellMöchte man wissen, welche Dateien und Verzeichnisse nach einem Update verschwinden, hilft das folgende Powershell Codefragment.

 

Weiterlesen
  11753 Aufrufe

Feste GUID aus einem String generieren

Powershell bietet eine schöne Möglichkeit, um bei Beispielsweise für App-V eine neue GUID zu generieren unter der man im Dateisystem Daten ablegen möchte.

Weiterlesen
  12698 Aufrufe

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!

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.