Quantcast
Channel: sepago
Viewing all 385 articles
Browse latest View live

PowerShell: Sprachkonstrukte (For-Schleife) - Part 17.2

$
0
0

4.4.2     For-Schleife

Die For-Schleife ist eine einfache numerische Schleife. In der PowerShell ist sie als eine ausdrucksorientierte Schleife implementiert. Das hört sich kompliziert an, bedeutet aber nur, dass sie auch Pipelines verarbeiten kann. Die For-Schleife hat die folgende Syntax:



For
(

For Schlüsselwort
<Pipeline1>;
<Pipeline2>;

Initialisierungspipeline
Testpipeline

<Pipeline3>   
)   
{
Inkrementpipeline
<StatementList>
Anweisungsblock

Die erste und die dritte Pipeline können aus mehreren, durch Komma getrennten, Ausdrucken bestehen. Die Pipelines selbst werden durch Semikolons voneinander getrennt. Die Initialisierungspipeline dient meistens zum Initialisieren einer Laufvariablen. Die Testpipeline wertet zu jedem Durchlauf der For-Schleife einen logischen Ausdruck aus. Die Inkrementpipeline verändert in den meisten Fällen die Laufvariable oder sollte das zumindest tun. Alle Pipelines sind optional, sind alle nicht vorhanden, entsteht eine Endlosschleife. Der Anweisungsblock wird solange ausgeführt, solange die Testpipeline zu dem Wert $True evaluiert werden kann. Die gesamte For-Schleife kann auch in einer einzigen Zeile geschrieben werden.

Beispiele:

1.	For ($i = 1;$i -le 5;$i++){"Zeile_$i"}
Zeile_1
Zeile_2
Zeile_3
Zeile_4
Zeile_5
2.	For ($i = 0;$($y = $i*2; $i -lt 5);$i++){$y}
0
2
4
6
8
3.	For ($i = (Get-ChildItem).count;$i -gt 0;$i--){"File_$i"}
File_9
File_8
File_7
File_6
File_5
File_4
File_3
File_2
File_1
4.	For ($($Total = 0;$i = 0),$($IExplore = Get-Process iexplore);$i -lt $IExplore.Count;$i++){$Total+=$IExplore[$i].Handles}
5.	$total
10048



Im ersten Beispiel (Zeile 1.) wird die Variable $i mit dem Wert 1 initiiert. Die Testbedingung ist, ob $i kleiner als fünf ist. Die Inkrementpipeline erhöht bei jedem Durchlauf der Schleife den Wert von $i um eins. Der Anweisungsblock gibt einen String aus, dessen Bestandteil die Variable $i ist (sie wird hier expandiert, da der String in doppelten Anführungszeichen steht).

Im zweiten Beispiel wird in der Testpipeline, neben der Testbedingung, noch ein Ausdruck für $y eingegeben, welcher den Wert von $i mit zwei multipliziert und $y zuweist. Dies wird bei jedem Durchlauf der Schleife ausgeführt. Schließlich wird im Anweisungsblock der Wert von $y ausgegeben. Das Ergebnis sind die ersten fünf geraden Zahlen.

Im dritten Beispiel wird die $i Variable mit der Anzahl der Dateien im aktuellen Verzeichnis initialisiert ((Get-ChildItem).Count). Geprüft wird, ob die Variable $i größer als Null ist. In der Inkrementpipeline wird die $i Variable in jedem Durchlauf um eins dekrementiert und der Anweisungsblock gibt schließlich, ähnlich wie im ersten Beispiel, einen String aus.

Im vierten Beispiel werden in der Initialisierungspipeline zwei Ausdrucke verwendet. In dem ersten werden die Variablen $Total und $i auf Null gesetzt. In dem zweiten Ausdruck wird die Variable $IExplore mit allen laufenden Prozessen des Internet Explorers initialisiert. Dabei entsteht ein Objekt vom Typ [System.Object[]], welches sich wie ein Array verhält. Die Elemente sind die einzelnen Process-Objekte ([System.Diagnostics.Process]) des Internet Explorers. Die Testbedingung prüft, ob $i kleiner als die Anzahl der Prozesse ist. Im Anweisungsblock werden schließlich die Handles der einzelnen Prozesse summiert. Die Prozesse selbst werden über die Indizes des Arrays mit Hilfe von $i angesprochen.



Eine Übersicht aller Artikel dieser Windows PowerShell Blogserie findet ihr hier.

Zurück zu Part 17.1 - Sprachkonstrukte (If/ElseIF/Else Anweisung)


Windows 10 Enterprise Serie: Device Guard

$
0
0

Überblick

Der Device Guard wurde mit der Einführung von Windows 10 als zusätzliches Sicherheitsfeatureset released. Angeboten wird es ausschließlich unter Windows 10 Enterprise. Durch die Nutzung von Virtualisierungstechnologien und softwarebasierenden Sicherheitsfeatures wird ein System vor der Ausführung von unerwünschten Anwendungen geschützt. Der Administrator legt fest, welche Applikation als vertrauenswürdig gilt, und nur diese wird auf dem System ausgeführt.

Voraussetzungen für die Nutzung von Device Guard

  • Windows 10 Enterprise
  • UEFI firmware Version 2.3.1 oder höher
  • Virtualisierungskomponenten (Intel VT-x oder AMD-V) und Second Level Address Translation (SLAT)
  • Firmware lock (Die Firmware verhindert in diesem Fall den Boot von anderen Betriebssystemen und Veränderungen in der UEFI Firmware. Zudem sollten alle anderen Bootoptionen deaktiviert werden.)
  • X64 System Architektur
  • IOMMU (Inout/output memory management unit) Komponente (Intel VT-d oder AMD-Vi)
  • Secure firmware update process

Warum sollte ich Device Guard einsetzen und warum nicht?

Der Device Guard bietet dem Unternehmen eine richtliniengesteuerte Möglichkeit sich vor Malware zu schützen. Traditionelle Methoden zum Schutz vor Malware waren zumeist signaturgesteuert, was allerdings keinen hundertprozentigen Schutz bietet. Microsoft hat mit dem Release vom Device Guard eine Möglichkeit bereitgestellt, mit der der Administrator exakt festlegt, welcher Code auf den Maschinen ausgeführt werden darf.

Ob man nun auf jedem System in seinem Unternehmen den Device Guard nutzen möchte, steht jedem frei. Der Device Guard ist nicht unbedingt empfehlenswert für Clients mit Konfigurationsaufwand und häufig wechselnden Softwareständen. Auf Kiosk Rechnern oder ATM's sollte man allerdings den Einsatz in Betracht ziehen.

Funktionsweise

  • Der Systemstart wird durch UEFI Secure Boot geschützt. Diese Funktion schützt das System davor, dass Bootkits ausgeführt werden bevor Windows 10 gestartet wurde.
  • Nachdem die Windows 10 Bootkomponenten geladen wurden, werden die Hyper-V Sicherheitsbestandteile geladen. In Kombination mit „Kernel Mode Code Integrity“ (KMCI) wird der Systemkern (Kernel), die Treiber und die Anti-Malware Komponenten vor dem Befall von Schadcode geschützt, welcher in einem frühen Stadium des Bootprozesses, oder im Kernel, ausgeführt werden könnte.
  • Device Guard verhindert durch „User Mode Code Integrity“ (UMCI), dass sich Schadcode im Nutzerkontext (einschließlich Administrative User) ausführen lässt. Ausschließlich Code, welcher als vertrauenswürdig definiert wurde, kann geladen werden. Universal Apps werden von Windows 10 als sicher eingestuft. Um diese zu blockieren, kann man auf den AppLocker zurückgreifen.
  • Mit Hilfe der „Virtual Based Security” (VBS) und dem TPM wird eine virtuelle Instanz erzeugt (Isolated User Mode), welche besonders sicherheitskritische Komponenten des Systems schützt. Dazu zählen unter anderem Zertifikate und die Credentials (Credential Guard).

Konfiguration

Aktivierung der benötigten Windows Features

Die benötigten Betriebssystemkomponenten, welche aktiviert werden müssen, sind „Isolated User Mode“ und Hyper-V Hypervisor.

Natürlich lässt sich das Feature auch über die Kommandozeile aktivieren:

dism.exe /NoRestart /Online /Enable-Feature:IsolatedUserMode /All

dism.exe /NoRestart /Online /Enable-Feature:Microsoft-hyper-v-hypervisor /ALL

Konfiguration der Code Integritäts / Secure Boot Features

Man hat an dieser Stelle die Möglichkeit die Features über Group Policy oder Local über die Registry zu konfigurieren.

Deployment via Group-Policy

Deployment via Registry

Die folgenden Keys müssen in der Registry eingetragen werden:

HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" 

  • EnableVirtualizationBasedSecurity
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "EnableVirtualizationBasedSecurity" /t REG_DWORD /d 1 /f

  • RequirePlatformSecurityFeatures
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "RequirePlatformSecurityFeatures" /t REG_DWORD /d 2 /f

  • HypervisorEnforcedCodeIntegrity
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "HypervisorEnforcedCodeIntegrity" /t REG_DWORD /d 1 /f

Deployment via Configuration Manager

Um die Device Guard Settings via Configuration Manager an die Clients zu verteilen, erstellt man z.B. eine Task Sequenz:

  • Enable Isolated User Mode:
dism.exe /NoRestart /Online /Enable-Feature:IsolatedUserMode /All

  • Enable Virtualization Based Security:
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "EnableVirtualizationBasedSecurity" /t REG_DWORD /d 1 /f

  • Require Platform Security Features:
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "RequirePlatformSecurityFeatures" /t REG_DWORD /d 2 /f

  • Hypervisor Enforced Code Integrity:
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v "HypervisorEnforcedCodeIntegrity" /t REG_DWORD /d 1 /f

  • copy CI-Policy:
Kopieren der CI-Policy: Ziel %WinDir%\System32\CodeIntegrity

  • Restart Computer

Anzeige der Device Guard Systeme im Configuration Manager

Um Clients, die die Device Guard Settings aktiviert haben, muss man zunächst in der Configuration Manager Konsole die Client Settings bearbeiten und die „Hardware Discovery Settings“ anpassen. Dazu sind folgende Schritte nötig:

Zu Testzwecken kann man die Default Client Settings nutzen, in produktiven Systemen nutzt man eigenständige Client Settings.

Öffnen der Eigenschaften der Default Client Settings

Hardware Inventory --> Set Classes --> ADD

Klick "Connect"

  • Computer name:            System mit Windows 10 eintragen
  • WMI namespace:           root\Microsoft\Windows\DeviceGuard

Mit einem Klick auf Connect wird eine Verbindung zu der Maschine hergestellt. Bei Bedarf müssen noch Username und Kennwort angegeben werden.

An dieser Stelle den Eintrag „Win32_DeviceGuard“ anhaken und auf OK klicken.

Jetzt die Settings speichern.

Nachdem die geänderten Settings nun auf den Clients angewendet wurden, kann man nun im Ressource Explorer die DeviceGuard Konfiguration einsehen.

Als nächstes muss eine Collection angelegt werden. Diese zeigt die Clients an, welche die Settings anzeigt.

Edit Query Settings --> Show Query Language

An dieser Stelle folgende Query eintragen:

SELECT SMS_R_SYSTEM.ResourceID, SMS_R_SYSTEM.ResourceType, SMS_R_SYSTEM.Name, SMS_R_SYSTEM.SMSUniqueIdentifier, SMS_R_SYSTEM.ResourceDomainORWorkgroup, SMS_R_SYSTEM.Client
FROM SMS_R_System
INNER JOIN SMS_G_System_DEVICE_GUARD ON SMS_G_System_DEVICE_GUARD.ResourceId = SMS_R_System.ResourceId
WHERE (SMS_G_System_DEVICE_GUARD.AvailableSecurityProperties like "%1%"
 and SMS_G_System_DEVICE_GUARD.AvailableSecurityProperties like "%3%")

Die in der Query verwendeten Klasseneigenschaften von Win32_DeviceGuard werden in diesem Artikel beschrieben:

https://technet.microsoft.com/en-us/library/mt463091(v=vs.85).aspx#configure_hardware#

Konfiguration der Code Integritäts Richtlinien

Erstellung eines „Golden Systems“

Um eine Code Integritäts Richtlinie zu erstellen, nutzt man eine Maschine, die den aktuellen Softwarebestand besitzt. Zudem sollten keine Device Guard Komponenten aktiviert sein.

Die Erstellung erfolgt ausschließlich über PowerShell Commandlets, welche mit Windows 10 released wurden. 

  • Erstellen einer Schattenkopie von Laufwerk C:
$s1 = (gwmi -List Win32_ShadowCopy).Create("C:\","ClientAccessible")
$s2 = gwmi Win32_ShadowCopy | ? { $_.ID -eq $s1.ShadowID }
$d  = $s2.DeviceObject + "\"
cmd /c mklink /d C:\shadowcopy_of_c "$d"

 

  • Auf Basis dieser Kopie wird die Code Integrity Policy erstellt und als xml Datei abgelegt:
New-CIPolicy -level PcaCertificate –fallback hash -filepath C:\CIPolicy.xml -scanpath C:\shadowcopy_of_c –u

Dieser TechNet-Artikel beschreibt die Eigenschaften von "New-CIPolicy":

https://technet.microsoft.com/en-us/library/mt634473.aspx

  • Innerhalb der Policy sollte zu Debuggingzwecken der Audit Modus aktiviert werden:
Set-RuleOption –option 3 –FilePath C:\CIPolicy.xml

Dieser TechNet-Artikel beschreibt die Eigenschaften von "Set-RuleOption":

https://technet.microsoft.com/en-us/library/mt634483.aspx

  • Das XML File muss nun in ein BIN File konvertiert werden:
ConvertFrom-CIPolicy C:\CIPolicy.xml C:\CIPolicy.bin

  • Der Installationsvorgang ist ein einfacher CopyJob:
Copy-Item -Path C:\CIPolicy.bin -Destination c:\Windows\System32\CodeIntegrity\SIPolicy.p7b

  • Neustart des Systems

Nach dem Neustart kann man auf dem Testsystem die Policy testen. Dazu öffnet man den Event Viewer. Unter „Applications and services log“ --> „Microsoft“ --> „Windows“ --> „CodeIntegrity“ lassen sich die Informationen ablesen.

Zu Testzwecken wurde eine Applikation gestartet, welche zuvor nicht im Golden System vorhanden war und aufgrund dessen nicht gestartet werden darf. Im Eventviewer findet sich nun folgender Eintrag:

Code Integrity determined that a process
(\Device\HarddiskVolume2\temp\npp.6.8.8.Installer.exe) attempted to load \Device\HarddiskVolume2\Users\administrator.BORLAB\AppData\Local\Temp\nsr1071.tmp\LangDLL.dll that did not meet the Enterprise signing level requirements or violated code integrity policy. However,
due to code integrity auditing policy, the image was allowed to load.

Falls man nun den Audit Mode deaktiviert, wird die Anwendung nicht gestartet. Zur Deaktivierung des Audit Modes muss die vorhandene XML Datei bearbeitet werden. 

  • Nachdem alle Tests abgeschlossen sind kann man den Audit Mode entfernen (Delete Parameter).
Set-RuleOption -FilePath C:\ CIPolicy.xml -Option 3 -Delete

  • Convert XML to Binary
ConvertFrom-CIPolicy -XmlFilePath C:\ CIPolicy.xml -BinaryFilePath C:\ CIPolicy.bin

  • Copy Binary
Copy-Item -Path C:\ CIPolicy.bin -Destination c:\Windows\System32\CodeIntegrity\SIPolicy.p7b

Nach einem Neustart wird die Anwendung erneut gestartet:

Um eine bestehenden „Golden Image“ Richtlinie zu aktualisieren, muss nicht unbedingt erneut ein vollständiger Systemscan ausgeführt werden, es können auch Policies zusammengefasst werden.

Um also diese App in die Policy aufzunehmen, kann man nun auf Basis des Audit Logs eine neue Policy erstellen.

New-CIPolicy -Audit -Level Hash -FilePath C:\TRPolicy_Audit.xml –UserPEs 3> C:\CIPolicylog.txt

Merge-CIPolicy -PolicyPaths C:\TRPolicy.xml, C:\TRPolicy_Audit.xml -OutputFilePath C:\TRPolicyMerged.xml

Dieser TechNet-Artikel beschreibt die Eigenschaften von "Merge-CIPolicy":

https://technet.microsoft.com/en-us/library/mt634485.aspx

WSUS Service stopped - do not install KB3148812 on Configuration Manager or WSUS servers

$
0
0

Last week Microsoft released Patch KB3148812 on Windows update. So this week we installed it on a customer ConfigMgr Sites (1x CAS, 2x Primary) due to an maintenance job.
The KB article says something about enabling ESD encryption for WSUS:

https://support.microsoft.com/en-us/kb/3148812

So here is my advice:

DO NOT INSTALL THIS UPDATE on WSUS or SCCM Servers!!!

At our environment it broke the WSUS Service completely. You can verify this by the following:

In the WSUSCTL.log you will find an "System.IndexOutOfRangeException - Index was outside the bounds of the array....." error. If you try to open the WSUS console there will be the same error. The WSUS service is stopped and if you try to remotely start the service it will stop after a few seconds.

 So if it's to late don't worry. The easy fix is to deinstall the Update. Deinstalling needs a reboot and takes a few minutes but everything will be up and running. Phew!

The WSUS Team wrote a blogpost on Technet this week:

http://blogs.technet.com/b/wsus/archive/2016/04/20/known-issues-with-kb3148812.aspx#pi47623=1

We should get a workaround on this soon!

Private Preview der Deutschen Azure Cloud - Erste Eindrücke

$
0
0

Die Private Preview der Deutschen Azure Cloud unter der Datentreuhänderschaft der T-Systems sieht schon recht gut aus. Was aktuell implementiert ist, zeigt dieses Video. Die Azure Cloud wird Schritt für Schritt erweitert und der Funktionsumfang ausgebaut.

Daher auf das aktuelle Datum achten: Im Juni 2016 oder später ist diese Video sicherlich überholt.

04/2016: Aktuell lassen sich als IaaS nur Typ-1 virtuelle Maschinen bereitstellen. Die Bereitstellung über ARM (Azure Ressource Manager) steht noch aus.

Die deutsche Azure Cloud:

https://www.microsoft.com/de-de/cloud/deutschland/default.aspx

Wir sind 5-facher Microsoft Gold Partner!

$
0
0
Tags: Microsoft

Auch 2016 erreicht sepago die höchste Kompetenzstufe in den fünf wichtigsten Kernkompetenzen und darf sich weiterhin als zertifizierter Gold-Partner des Weltmarktführers Microsoft präsentieren. Die Gold Kompetenz stellt kontinuierliche Höchstleistungen in einem bzw. mehreren Bereichen heraus. Es ist die höchste Auszeichnung die Microsoft an Partner vergibt. Hierbei bemisst der Branchenführer die Qualität, Fachkompetenz und Kundenzufriedenheit des Partners. 

In diesem Jahr ist es uns gelungen, neben der bereits 2015 erreichten Kompetenz "Datacenter", vier weitere Kompetenzspektren mit Bestleistung zu belegen. Das verdeutlicht, wie intensiv wir uns 2015 mit der Weiterentwicklung des Microsoft Kompetenzbereiches innerhalb der sepago aufgestellt haben.

„sepago ist ein Beratungshaus, welches sich seit 2002 auf wegweisende Technologien konzentriert und dementsprechende Investitionen getätigt hat. Genauso konsequent verfolgt sepago die Adaption der Microsoft Cloud Strategie für seine Kunden, indem die hierfür notwendigen Zertifizierungen erlangt werden. Diese Qualitätsauszeichnung ist ein direkter Mehrwert für unsere Kunden, indem sepago hierdurch effizient und strategisch beraten kann.“ so Paul Lütke Wissing - Managing Director.

Wir freuen uns, somit nachweislich über Expertenwissen und zertifizierte Fähigkeiten zu verfügen, um eine Vielzahl von Microsoft-Lösungen bei unseren Kunden zu implementieren und zu administrieren bzw. weiterentwickeln zu dürfen.

Erläuterungen zu den Kompetenzen:

Devices & Deployment:

Mit dem Erwerb der Microsoft-Kompetenz Gold Devices & Deployment demonstrieren wir unsere geschäftsbezogene Expertise und branchenführenden Kenntnisse auf dem Gebiet der Client-Infrastrukturen. Dies schlägt sich besonders in den Bemühungen rund um Windows 10 nieder, wie beispielsweise unserer Blogserie, den MVA Kursen und zahlreichen Kundenworkshops und Events.

Datacenter:

Bei der "Datacenter" Kompetenz erkennt Microsoft Partner an, die Rechenzentren in flexiblere, skalierbare und kosteneffektive Lösungen verwandeln. Unter dem Schirm der Private Cloud fasst diese Kompetenz das Know-How und die Zertifizierungen der System Center Produktfamilie zusammen. Nicht zuletzt unsere Kundenreferenzen haben uns zu dieser Auszeichnung geführt.

Identity &Access:

Hinter Identity und Access steht unsere Erfahrung beim Schutz von Unternehmensdaten über Rechenzentrumsgrenzen hinaus in die Cloud. Im Spotlight stehen hierbei Lösungen, die es unseren Kunden ermöglichen sicher auf (sensitive) Daten und Applikationen zuzugreifen, unabhängig von welcher Lokation oder dem verwendeten Device. 

Application Integration:

Die Kompetenz „Application Integration“ erkennt Partner  an, die einzigartige Anwendungen und Lösungen in die verschiedenen Produkte innerhalb des Microsoft-Ökosystems integrieren. Hierbei sind sowohl gängige Applikationen gemeint, als auch ihre Line of Business Apps. 

Midmarket Solution Provider:

In einer Vielzahl von erfolgreich abgeschlossenen Windows Server Technologieprojekten haben wir uns für diese Kompetenz qualifiziert, die den Fokus auf das Entwerfen, Bereitstellen und Anpassen von Netzwerkinfrastrukturlösungen mit Windows Server legt. 

PowerShell: Sprachkonstrukte (Foreach- und While Schleife) - Part 17.3

$
0
0

4.4.3     Foreach-Schleife

Die Foreach-Schleife eignet sich, im Gegensatz zur For-Schleife, für die Verarbeitung von Sammlungen (Collections), welche eine unbekannte Anzahl von Elementen aufweisen. Für jedes Element der Sammlung kann innerhalb der Foreach-Schleife ein Anweisungsblock ausgeführt werden.

Foreach   
 (   
Foreach Schlüsselwort
<Varlable> 
In   
SchleifenvariableIn
Schlüsselwort
<Pipeline>  
)   
{   
Pipeline zur Verarbeitung
<StatementList>  
}
Anweisungsblock

Es gilt an dieser Stelle noch einen Namenskonflikt aufzulösen. Es existiert standardmäßig ein Alias mit dem Namen „Foreach“. Dieser ist für das Cmdlet Foreach-Objekt definiert. Wenn die Shell das Wort „Foreach“ am Anfang einer Zeile erkennt, wird das als das Schlüsselwort der Foreach-Schleife behandelt. Wird es hingegen irgendwo anders gefunden, handelt es sich um das Cmdlet.

Beim Durchlaufen der Foreach-Schleife wird der Schleifenvariable jeweils ein Objekt aus der Sammlung (Pipeline) zugewiesen. Über diese Variable kann das Objekt dann im Anweisungsblock angesprochen werden. Die Pipeline selbst wird nicht „stückweise“ verarbeitet, wie das beim Senden an einen weiteren Befehl der Fall wäre, sondern wird komplett ausgeführt und erst dann abgearbeitet.


Beispiele:

1.	Foreach ($s in Get-Service){if ((Get-ItemProperty -Path HKLM:\system\CurrentControlSet\services\$($s.Name) -Name start).start -eq 2 -and $($s.Status) -ne "running") {$s.DisplayName}}
Microsoft .NET Framework NGEN v4.0.30319_X86
Microsoft .NET Framework NGEN v4.0.30319_X64
Google Update Service (gupdate)
Lenovo Microphone Mute
Net Driver HPZ12
Software Protection
Windows Biometric Service
2.	$Total=0
3.	ForEach ($P In Get-Process){If ($($p.Name) -like "iexplore"){$Total+=$p.Handles}}
4.	$Ttotal
4136



Das erste Beispiel soll auf der Konsole diejenigen Dienste ausgeben, welche automatisch starten sollen, jedoch zur Zeit nicht laufen. Dieses Beispiel ist auch ein Beispiel für eine gewisse Inkonsequenz des Befehls Get-Service: dort fehlt die Information über die Startart! Aus diesem Grund wird hier einfach der entsprechende Registry Eintrag für den jeweils verarbeiteten Dienst ausgewertet. Die Quelle besteht aus der Sammlung aller Dienste, die auf dem Computer installiert sind (Get-Service). Im Anweisungsblock wird zunächst nach der Startart des Dienstes in der Registry geschaut. Dabei wird direkt der interne Name des Dienstes (Rückgabe von Get-Service) für den Pfad verwendet ($s.Name). Der Wert zwei steht für den automatischen Start des Dienstes. Gib es an dieser Stelle einen Treffer, wird weiter der gegenwärtige Status des Dienstes überprüft. Ist dieser ungleich „running“ wird der Name (DisplayName) des Dienstes auf der Konsole ausgegeben.

Das zweite Beispiel erledigt die gleiche Aufgabe, wie das letzte Beispiel für die For-Schleife.



4.4.4     While Schleife

Die While Schleife ist eine konditionale Schleife, d.h. sie wird durch eine logische Bedingung gesteuert.

While
 (   

While Schlüsselwort
<Pipeline>
)
Pipeline zum Testen

{   
<StatementList>

Anweisungsblock
}   

Der Anweisungsblock wird solange ausgeführt, solange der Test der Pipeline den Wert
$True ergibt. Der Test wird durchgeführt, bevor die While Schleife den Anweisungsblock ausführt. In der Regel sollte der Anweisungsblock Code enthalten, welcher sich auf die Testbedingung auswirkt, da sonst eine Endlosschleife entstehen kann.



Beispiele:

1.	While (Get-ChildItem){Write-Host "... still running..."}
... still running...
... still running...
... still running...
... still running...
... still running...
...
2.	Ctrl + C
3.	While ((Get-ChildItem).Count -ne $Null){Remove-Item -path @(Get-ChildItem)[0];Write-Host "Removing $(@(Get-ChildItem)[0])"}
Removing CheckProcess.cmd
Removing Files.vbs
Removing log - Copy.log
Removing log.log
Removing t.cmd

Das erste Beispiel stellt eine Endlosschleife dar, wenn das aktuelle Verzeichnis nicht leer ist! Dann liefert nämlich Get-ChildItem den Wert $True zurück. Solange sich also der Inhalt des aktuellen Verzeichnisses nicht von außen verändert, wird die Schleife niemals enden, da im Anweisungsblock keinerlei Dateioperationen durchgeführt werden. Auf der Konsole kann die Schleife mit der Tastenkombination Ctrl + C unterbrochen werden.

Das zweite Beispiel ist nicht unbedingt zum Nachahmen gedacht, es werden hier aktiv Dateien gelöscht! Die  zu testende Pipeline hat den Wert $True, wenn das aktuelle Verzeichnis Dateien enthält. Im Anweisungsblock befinden sich zwei Kommandos (durch Semikolon getrennt). Das erste Kommando löscht die erste gefundene Datei im aktuellen Verzeichnis (was genau sich unter @(Get-ChildItem)[0] verbirgt, wird im Kapitel 5.1 näher beschrieben). Das zweite Kommando im Anweisungsblock gibt den Namen der gerade gelöschten Datei auf dem Bildschirm aus. Die Schleife endet, wenn die letzte Datei gelöscht wurde.



Eine Übersicht aller Artikel dieser Windows PowerShell Blogserie findet ihr hier.

Zurück zu Part 17.2 -  Sprachkonstrukte (For-Schleife)

Forum Arbeitskultur NRW #4 – Unternehmenskultur & Community

$
0
0

Am 12. Mai treffen wir uns wieder, um zu netzwerken, zu kooperieren und gemeinsam Themen in den Fokus nehmen. Diesmal laden wir Euch in die Räume der sepago ein, nach Köln-Kalk. Angesprochen sind diejenigen, die sich um die Themen Arbeits- und Unternehmenskultur, Personalentwicklung, Employer Branding kümmern und/oder sich dafür interessieren. Die Gruppe ist offen und immer wieder neu gemischt.



Das 4. Mal kommt mit frischem Wind: Beim letzten Treffen haben wir in der Feedback-Runde festgehalten, dass wir eine gemischte Themenfindung ausprobieren wollen. So war unser Ansatz:

  • 1 Thema legen wir vorher durch Impulse aus der Gruppe fest – unter dem Topos KONKRET & HANDFEST
  • 1 Thema legen wir vorher ebenfalls durch Impulse aus der Gruppe fest – unter dem Topos DAS GROßE GANZE
  • 2 Themen bleiben offen & frei & spontan für aktuelle Eingaben

Es wurden schon etliche spannende Themen in der XING-Gruppe gepostet: https://www.xing.com/communities/groups/forum-arbeitskultur-shared-by-sepago-c85e-1081274# - Wer noch überlegt, ob die Teilnahme hilfreich sein – hier sind die bisherigen Themenvorschläge:

KONKRET & HANDFEST

  • 360° Feedback in der Beratung - habt Ihr damit Erfahrungen und wenn ja, wie sehen diese aus?
  • Transparente Gehaltsstrukturen vs. individuelle Einzelabsprachen, gibt es einen Königsweg?
  • Gute Informationsbereitstellung /-zugriff von und durch die Community (momentan ist es immer die Arbeit weniger Menschen, möglichst alle Informationen zu teilen)


DAS GROßE GANZE

  • Spielen die sozialen Medien für Eure Unternehmenskultur eine Rolle oder sind sie reine Marketinginstrumente?
  • Was unterscheidet einen guten Leader von einem klassischen Manager?
  • Die Intelligenz der Masse / Superschwarm (effiziente Nutzung mit modernen Medien in der industriellen Umgebung)

  • Community-Building (wie arbeite ich ohne Hierarchien trotzdem noch organisiert zusammen)


Und was bringt Ihr mit? Welche Frage beschäftigt Euch? Stimmt mit ab in der XING-Gruppe bis 10. Mai oder bringt Euer Thema am Abend selbst mit!

Die Anzahl der Tickets ist begrenzt. Hier geht’s zur (kostenlosen) Anmeldung:
https://www.eventbrite.de/e/forum-arbeitskultur-nrw-4-treffen-tickets-24451884244?aff=eac2
Auf zum „kulturellen after work out“ – wir freuen uns!

PowerShell: Sprachkonstrukte (Do/While Schleife, Do/Until Schleife) - Part 17.4

$
0
0

4.4.5     Do/While Schleife


Die Do/While Schleife ist ebenfalls eine konditionale Schleife und verhält sich ähnlich wie die While Schleife.

Do

 { 

Do Schlüsselwort
 <StatementList>
}   
Anweisungsblock
WhileWhile Schlüsselwort

(   
<Pipeline>

)


Pipeline zum Testen



Der Unterschied zwischen den beiden Schleifen besteht darin, dass bei der Do/While Schleife der Anweisungsblock einmal ausgeführt wird, bevor die Bedingung überprüft wird.



4.4.6    Do/Until Schleife

Die Do/Until Schleife ist eine Abwandlung der Do/While Schleife.

Do

 { 

Do Schlüsselwort
 <StatementList>
}   
Anweisungsblock
UntilUntil Schlüsselwort

(   
<Pipeline>

)


Pipeline zum Testen

Der einzige Unterschied zu Do/While Schleife besteht darin, dass die Do/Until Schleife die Verarbeitung abbricht, wenn der Test der Pipeline den Wert $True ergibt.



4.4.7     Break, Continue und Labels


Das Schlüsselwort Break erlaubt es, eine Schleife an einer beliebigen Stelle zu verlassen und mit, sich hinter der Schleife befindlichen, Anweisungen fortzufahren. Das Schlüsselwort Continue erlaubt es, von einer beliebigen Stelle innerhalb einer Schleife zum Anfang der Schleife zu springen und den weiteren Iterationsschritt einzuleiten. Beides sind nicht strukturierte Methoden für die Manipulation einer Schleife, dennoch können sie sich in bestimmten Fällen als nützlich erweisen, damit ist die Flusssteuerung innerhalb des Codes noch ein Stück  flexibler.  Folgendes Beispiel illustriert die Verwendung von Continue und Break:

1.	While ($True)
2.	>> {
3.	>>     $TestNumber = Get-Random -max 100000
4.	>>     if ($TestNumber -eq 2) {Write-Host "Prime: $TestNumber";Continue}
5.	>>     if ($TestNumber % 2 -eq 0) {Continue}
6.	>>     for ($i = 3;$i -lt $TestNumber;$i++)
7.	>>     {
8.	>>         if (($TestNumber % $i) -eq 0) {Break}
9.	>>     }
10.	>>     Write-Host "Prime: $TestNumber"

11.	>> }
12.	>>
Prime: 3163
Prime: 25033
Prime: 23279
Prime: 91529
Prime: 41177
Prime: 69593
Prime: 19273
Prime: 53089
Prime: 74177
Prime: 11731
Prime: 48187
Prime: 40361
Prime: 1019
Prime: 48157
Prime: 30869
Prime: 47339
Prime: 87853
...
13.	Ctrl + C



In diesem Beispiel werden fortlaufend Zufallszahlen generiert (Zeile 3) und auf ihre Primeigenschaft hin untersucht. Wenn die Zahl in $TestNumber gleich zwei ist (Primzahl), wird sie direkt ausgegeben. Da weitere Überprüfungen bei zwei sinnlos sind, wird mit Continue ein weiterer Iterationsschritt eingeleitet. Ist die zufällig gewählte Zahl gerade (Zeile 5), wird hier ebenfalls mit Continue der nächste Iterationsschritt eingeleitet. In jedem anderen Fall beginnt die eigentliche Überprüfung auf die Primeigenschaft. Dazu wird versucht, den Wert in *$TestNumber fortlaufend durch natürliche Zahlen größer drei und kleiner $TestNumber  zu dividieren und zu schauen, ob das Ergebnis gleich Null ist. In diesem Fall hätte die untersuchte Zahl einen Teiler, der ungleich eins und der Zahl selbst und demnach keine Primzahl wäre. An dieser Stelle wird die For-Schleife ebenfalls mit Break verlassen und der nächste Iterationsschritt beginnt. Läuft die For-Schleife zu Ende, ist eine Primzahl gefunden worden.

Besteht die Notwendigkeit, zwei oder mehrere Schleifen zu verschachteln, gibt es die Möglichkeit, diese bei Bedarf gezielt zu verlassen. Dazu können die Schleifenschlüsselworte mit einem Label versehen werden. Bei der Verwendung von Break kann dann der Name der Sprungmarke angegeben werden, was dazu führt, dass nicht die aktuelle Schleife, sondern die benannte beendet wird. Folgende schematische Darstellung zeigt die Verwendung von Labels:

:FirstLevel while ($True)
{
    :SecondLevel while ($True)
    {
        while ($True)
        {
            if ($a) {break}
            if ($b) {break FirstLevel}
            if ($c) {break SecondLevel}
        }
        Write-Host "After innermost loop"
    }
        Write-Host "After SecondLevel loop"
}
        Write-Host "After FirstLevel loop"



In der innersten While-Schleife wird der Wert der Variablen $a, $b und $c überprüft. Wenn $a = $True, wird die innerste Schleife verlassen und die Schleife mit dem Label „:SecondLevel“ läuft weiter. Wenn $b = $ True ist, wird die Schleife mit dem Label „:FirstLevel“ verlassen (also das gesamte Schleifenkonstrukt). Wenn schließlich $c = $True ist, wird der nächste Iterationsschritt der äußersten Schleife eingeleitet.



* Aus dem rein mathematischen Gesichtspunkt würde es reichen, in diesem Verfahren die For-Schleife lediglich bis zu √$TestNumber laufen zu lassen. Die Berechnung der Wurzel verlangsamt jedoch den Ablauf der Schleife erheblich im Vergleich zu mehr Iterationsschritten in der For-Schleife.



Eine Übersicht aller Artikel dieser Windows PowerShell Blogserie findet ihr hier.

Zurück zu Part 17.3 - Sprachkonstrukte (Foreach- und While Schleife)


New Work: Wie Organisationen gezielt gefragte Arbeitnehmerqualitäten fördern können

$
0
0

In der Diskussion zu Arbeiten 4.0 oder New Work stolpern wir unweigerlich über das Thema Kultur als Treiber des Wandels. Ein Aspekt der kulturellen Veränderung ist die „Arbeitssozialisation“. Was ist darunter zu verstehen und wohin entwickelt sie sich? Und wie lässt sich mit der Entwicklung umgehen? Kann eine Organisation im positiven Sinne Einfluss auf sie nehmen?
Spannende Fragen. Starten wir mit der Theorie und werden dann konkret.

Arbeitssozialisation – Entwicklung von Arbeitnehmerqualitäten

Arbeitssozialisation wird allgemein als die Entwicklung von Persönlichkeit in der Auseinandersetzung mit den Anforderungen und Bedingungen des Arbeitsprozesses beschrieben. Anders ausgedrückt geht es um die Entwicklung und Veränderung von Kenntnissen, Fähigkeiten, Motiven, Orientierungen und Deutungsmuster, die im Beruf eingesetzt werden.

Organisationen wünschen sich Mitarbeiter, die soweit erzogen und gebildet sind, dass sie bereits die optimalen Fähigkeiten für ihren gewählten Job erworben haben und diese nun in vollem Umfang anwenden.
Insbesondere im 20. Jahrhundert wurde im Sozialisierungsprozess noch auf die Ausbildung und Implementierung der Arbeitstugenden wie Pünktlichkeit, Fleiß, Pflichterfüllung, Disziplin, Gewissenhaftigkeit, Ordnung, Treue, Gehorsam, Redlichkeit, Respekt vor Autoritäten und Höflichkeit Wert gelegt.

Heute werden einige dieser Tugenden zwar immer noch als hilfreich erachtet, andere scheinen aber nicht mehr so recht in die post-tayloristische Arbeitswelt zu passen. Unsere immer stärker vernetzte (Arbeits-)Welt erfordert andere Arbeitnehmerqualitäten, um der steigenden Komplexität zu begegnen. Neue Anforderungen an die Persönlichkeitsstruktur gewinnen an Bedeutung.

Hierzu gehören neben der technischen Intelligenz und technischen Sensibilität vor allem Qualitäten  wie z.B. Kreativität, Flexibilität, Agilität, Empathie, Vitalität, Resilienz, Sinn für Sinn, Neugier, Mut und Verantwortung. Die Liste kann mit Sicherheit noch um einige Geschicke erweitert werden. Klar wird in jedem Fall, dass es um Fähigkeiten geht, die Teil einer Anpassungsstrategie sind, uns also erlauben, schnell auf sich ständig ändernde Anforderungen des Marktes einzugehen.
Wie kann es Organisationen gelingen, diese Qualitäten bei Ihren Mitarbeitern strukturiert auszubilden und zu fördern? Wie kann Arbeitskultur gestaltet werden, dass sie einen wertvollen Beitrag hierzu leistet? Bei sepago haben wir viele gute Ansätze gefunden, von denen ich einige beginnend mit diesem Blog, in einer 3-teiligen Serie beschreiben möchte.

Einflussfaktor Arbeitskultur: Mit Transparenz Kreativität fördern

Aller Praxis voran steht jedoch die Haltung der Unternehmensleitung und der Führungskräfte ihren Mitarbeitern gegenüber. Die ehrliche Wertschätzung eines jeden, die Erkenntnis, dass die Kollegen wichtigstes Kapital der Organisation sind sowie das Vermögen, empathisch zuzuhören und die jeweiligen Bedürfnisse zu erfassen, sind die wichtigsten Voraussetzungen für das Gelingen.

Ein weiterer wichtiger Grundsatz ist für mich die Schaffung eines Umfeldes, das für „Transparenz“ sorgt. Denn nur wenn alle Mitarbeiter Einblick in die Themen und Herausforderungen gewinnen, die den Markt und das Unternehmen beschäftigen, kann das Potential an Kreativität gehoben und zielführendes Handeln gefördert werden.

Zur Transparenz braucht es Kommunikationsmittel und -wege. Wir nutzen hierfür ganz unterschiedliche Kanäle. Neben der altbewährten E-Mail, die alle verlässlich erreicht, stehen für die direkte Ansprache selbstverständlich die Bürotüren offen. An Scrum Boards, die öffentlich zugänglich sind, kann sich jeder über den aktuellen Projektfortschritt informieren. Und natürlich nutzen wir als IT-Unternehmen technisch unterstützte Kanäle. Besonders beliebt ist unser internes soziales Netzwerk Yammer – ideal für den schnellen Plausch, Bekanntmachungen von Neuigkeiten, Austausch von Tipps und Tricks sowie gegenseitigem Support. Darüber hinaus gibt es regelmäßige Webinare zur aktuellen Geschäftsentwicklung und auch Podcasts zu freien Themen, die gerade bewegen. Online-Collaboration Tools helfen dezentral effizient an einer Sache zu arbeiten und eine eigens entwickelte digitale Ideation Platform hat schon viele Innovationen und kreative Ideen zu Tage gefördert.

Speziell erwähnt sei hier auch unser vierteljährlich stattfindendes sepagoForum. Gerade das sepagoForum bietet eine ideale Plattform, um sich zum einen mit Kunden und Partnern über aktuelle Trends der sepago Fokusthemen live auszutauschen und zum anderen in selbstorganisierten geschlossenen Sessions abteilungsintern und –übergreifend für Informationsfluss und Weiterbildung sorgen.

Wir sehen, es gibt nicht nur die eine Maßnahme, sondern sehr viele unterstützende Formate, Transparenz herzustellen. Und sicher ist Transparenz nur einer von vielen Bausteinen, der der Kreativitätsförderung dient. Natürlich haben wir noch viele mehr in petto. Gerne teilen wir unser Wissen beim Forum Arbeitskultur (NRW und Bayern) oder im Rahmen unserer Essentials.


Im nächsten Blog geht es dann ganz praxisnah weiter mit ebenso spannenden Ansätzen zur Empathieförderung.

PowerShell Exception 0x800A01B6 bei der Verwendung von getElementsByTagName, getElementsByName oder getElementByID

$
0
0

Um die Skalierung einer Web-App auf Microsoft Azure zu testen, nutze ich für automatisierte Webzugriffe das com-Objekt "InternetExplorer.Application". Damit lässt sich der Internet Explorer in mehreren Instanzen automatisieren. 

$xe = New-Object -com "InternetExplorer.Application"
$xe.visible = $true
$xe.silent = $true

$xe.Navigate($IURL)
while ($xe.Busy) {
    [System.Threading.Thread]::Sleep(10)
}

Mit $xe.Document.getElementsByTagName("Input") enumerierte man die verschiedenen Eingabefelder und Buttons der dargestellten Webseite. Dies funktioniert nach der ersten Navigation zuverlässig - aber nicht mehr, wenn nach einer zweiten Navigationsanweisung der Befehl für den neuen Content erneut ausgeführt wird: 

Ausnahme von HRESULT: 0x800A01B6
In Zeile:1 Zeichen:1
+ $xe.Document.getElementsByTagName("Input")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], NotSupportedException
    + FullyQualifiedErrorId : System.NotSupportedException

Workaround:

Verwendung der folgenden Methoden, anstatt die originären zu verwenden:

IHTMLDocument3_getElementsByTagName
IHTMLDocument3_getElementsByName
IHTMLDocument3_getElementByID

Beispiel:

$xe = New-Object -com "InternetExplorer.Application"
$xe.visible = $true
$xe.silent = $true

$xe.Navigate($IURL)
while ($xe.Busy) {
    [System.Threading.Thread]::Sleep(10)
}
$xe.Document.IHTMLDocument3_getElementsByTagName("Input")

$xe.Navigate($IURL2)
while ($xe.Busy) {
    [System.Threading.Thread]::Sleep(10)
}
$xe.Document.IHTMLDocument3_getElementsByTagName("Input")

Innovationsmanagement in Unternehmen

Be innovative! Wie komme ich auf gute Ideen?

System Center Configuration Manager v1511 to v1602 upgrade issue

$
0
0

This is a quick one as I wanted to update my System Center Configuration Manager v1511 to v1602.

I encountered the well-known behavior of having the “Configuration Manager 1602” Update in state “Downloading” without any progress.

The common workaround is mentioned in the Description of said update but simply restarting the SMS_EXECUTIVE service did not do the trick for me.

I had a look at my dmpdownloader.log file in which the following error was being logged:
     Failed to call AdminUIContenDownload.error = Invalid pointer

So what to do, what to do?


Solution:
The new upgrade method downloads it’s binaries to the %SCCMInstallFolder%\EasySetupPayload folder.
Only one empty and outdated folder was present in that folder:

To solve that behavior I simply:

  • Renamed the found folder and
  • Restarted the SMS_EXECUTIVE service afterwards

That did do the trick for me. A new folder is being created:

And the content is being downloaded:

The update is now “Available” within the Console:

Windows 10 und ConfigMgr Deployment Serie

$
0
0

Liebe Leserinnen, liebe Leser,

Windows 10 stellt einen Paradigmenwechsel für Microsoft und das Windows Ökosystem dar. Zum einen die starke Konsolidierung der verschiedenen Plattformen zu einer zentralen Plattform über Gerätegrenzen hinweg, zum anderen durch die "Modernisierung" der Plattform zu einem "as a Service" -Modell. Während Microsoft bereits den grundlegenden Support für Windows 7 beendet hat, berichten sie im Gegenzug von bereits 300 Millionen Geräten, die schon heute mit Windows 10 laufen. Auch bei unseren Kunden steigt die Nachfrage nach Windows 10 Workshops bzw. Migrationsprojekten. 

Zwar gibt es viele Aspekte bei der Planung einer Migration nach Windows 10, jedoch ist die Bereitstellung eine der wesentlichen Elemente. Grund genug für uns, neben unserem klassichen Beratungsgeschäft unser Wissen in die Community zu geben. 

Hierzu haben wir verschiedene Angebote: 

Wie bereits bei den Windows 10 Features praktiziert, haben wir eine Windows 10 Deployment - Blogserie vorbereitet. Darin enthalten sind die Themen:

  • Windows 10 - InPlace Upgrade 
  • Windows 10 - Provisioning Packages
  • Windows 10 - Security 
  • Windows 10 und Configuration Manager

Weiterhin gibt es verschiedene Webinare - das kommende Webinar befasst sich mit dem Thema "Windows 10 Deployment":

  • Was ist neu im Windows 10 Deployment Prozess? 
  • Kompatibilität Assessment Readiness (MAP) 
  • Abhängigkeit zu Internet Explorer 11 
  • Welche Chancen bietet Inplace Upgrade? 
  • Was wurde aus Wipe and Load? 
  • Was kommt mit Windows 10 Provisioning Packages? 
  • Deployment Best Practices 

Hier gehts zur Anmeldung.

Darüber hinaus bieten wir verschiedene, kostenfreie Veranstaltungen zum Thema Windows 10 an:

Wir freuen uns über jeden Teilnehmer!

Der Wert von Empathie als zentrale Kompetenz von Mitarbeitern

$
0
0

Warum Empathie eine wertvolle Kompetenz ist, die es bei Mitarbeitern zu fördern gilt und was die Organisation dazu beitragen kann. Im folgenden Artikel findest Du Antworten und praxiserprobte sepago Beispiele.

Empathie ist ein Begriff, der schon fast inflationär benutzt wird und dennoch so wichtig ist. Gerade weil unsere Welt so stark vernetzt und von Beziehungen geprägt ist, gewinnt die Empathiekompetenz zunehmend an Bedeutung – für jeden Einzelnen und für die Organisation.

Empathie geht in 2 Richtungen: wir kennen die Empathie nach Innen, die Fähigkeit in uns selbst hineinzufühlen und die Empathie nach Außen - das Vermögen uns in den anderen hineinzufühlen. Bin ich selbstempathisch, kann ich ein Bewusstsein für meine eigenen Emotionen entwickeln und meine eigenen Bedürfnisse erkennen. Verspüre ich zum Beispiel Wut, wenn in Meetings wiederholt durcheinandergeredet wird, dann ist die Wut vielleicht Ausdruck meines unerfüllten Bedürfnisses nach Ordnung und Klarheit und ich wäre positiver gestimmt, wenn das Meeting strukturiert moderiert würde. Diese Klarheit für uns selbst ist wichtig, um auch empathisch nach Außen sein zu können, d.h. zu erkennen und nachzuempfinden, was der andere fühlt. Wir sind dann auch stärker bereit, uns mit den Bedürfnissen unserer Kollegen und der Organisation auseinanderzusetzen. Gelingt es uns, diese Bedürfnisse in Einklang zu bringen, dann entsteht eine wertvolle und wertschöpfende Gemeinschaft. Und als empathische Organisation können wir viel leichter in eine nachhaltige und wertvolle Kundenbeziehung treten und damit auch den wirtschaftlichen Erfolg sichern.

Rahmen schaffen für Empathie

Welchen Rahmen kann die Organisation schaffen, um sowohl die individuelle als auch die Empathie für die Organisation zu fördern? Bei sepago haben wir unter anderem folgende Ansätze gefunden:
Empathie gelingt besonders gut, wenn wir selbst die nötige Offenheit und Ausgeglichenheit verspüren, möglichst frei sind, von innerem und äußerem Stress oder Konflikten. Die Organisation kann helfen, eine entsprechende Arbeitsatmosphäre zu schaffen sowie Techniken und Methoden zu etablieren. Bei sepago stehen uns diverse Angebote zur Verfügung, sei es zum Beispiel die Zeit zur Meditation, in der wir uns in Achtsamkeit üben, „abschalten“ und Kraft tanken können. Wer Unterstützung braucht, kann durch ein individuelles Coaching seine Fähigkeiten im Zeitmanagement oder im Konfliktmanagement ausbauen. Auch das Spiel am Kicker-Tisch in der Mittagspause kann angestaute Energie schon einmal in die richtigen Bahnen lenken. Unsere Sofaecken sind passende Rückzugsorte, an denen Gespräche einfach entspannter geführt werden. Diese und weitere Möglichkeiten, wie etwa Homeoffice Optionen sind Angebote, mögliche Stress-Elemente während der Arbeit abzubauen oder erst gar nicht erst aufkommen zu lassen. Und getreu dem Grundsatz „mens sana in corpore sano“ haben wir ein Gesundheitsmanagement eingeführt. Die App fürs Rückendrücken ist nicht nur cool, sie animiert auch zu guten Haltungsnoten und unterstützt, dass Körper und Geist entspannen.

Raum für Offenheit und Zeit zum Zuhören

Was uns bewegt und antreibt ist sicherlich zunächst einmal eine ganz persönliche und damit private Sache und dennoch gibt es bei sepago den Raum sich im Ganzen und nicht nur als Mitarbeiter zu zeigen. Neben dem transparenten Umfeld (siehe auch „New Work: Wie Organisationen gezielt gefragte Arbeitnehmerqualitäten fördern können“) gibt es jede Menge weiterer Möglichkeiten, sich informell auszutauschen und zuzuhören. Ob Sorgen oder Entdeckungen von Leidenschaften, der gesellige Teil des sepagoForums, der winterliche Grill & Chill Event oder die monatlichen Minibudgetaktionen sind nur drei Beispiele dafür, wo wir Zeit und Gelegenheit haben, mehr voneinander zu erfahren. Diese Offenheit ist Teil der sepago Vertrauenskultur, die die Bereitschaft deutlich erhöht hat, sich in sich selbst und andere hineinzufühlen.

Gewaltfreie Kommunikation (GFK) als kraftvolles Instrument für mehr Kooperation

Empathie wird bei sepago darüber hinaus in besonderem Maße durch die Ausbildung der wertschätzenden Kommunikation gefördert. Hier haben wir tolle Erfahrungen mit der Gewaltfreien Kommunikation (GFK) nach Marshall B. Rosenberg gesammelt. In Basiskursen und Vertiefungsseminaren haben wir mehr Klarheit über unsere eigenen Bedürfnisse und die der Kollegen, der Organisation und unserer Kunden erhalten. Wir üben uns regelmäßig während interner Slots des sepagoForums und in einer freiwilligen Weiterbildungsreihe, wertschätzende Beziehungen zu ermöglichen und weiter zu entwickeln, die mehr Kooperation und gemeinsame Kreativität ermöglichen.

Die GFK hilft uns zum Beispiel besonders gut in Meetings oder in Konfliktsituationen. Das aktive und empathische Zuhören, das Nacheinander- statt das Durcheinanderreden sind dabei sehr nützliche Techniken.
Die GFK ist ein kraftvolles Instrument, weil sie den Menschen in den Blick nimmt. Sie stellt eine Kommunikation auf Augenhöhe her, in der sich jeder in der Organisation als wertvolles Mitglied verstehen kann und Anerkennung findet. Letztendlich zeigt sich in ihr eine innere Haltung, wertschätzend mit unserem Gegenüber umzugehen. Und wo wir uns gewürdigt fühlen, fällt es uns einfach leichter, unserer intrinsischen Motivation zu folgen und mit Freude unsere Arbeit zu tun. Das wirkt sich positiv auf die Qualität unserer Arbeitsergebnisse aus, was uns und unsere Kunden freut.

Es ist also durchaus möglich, als Organisation ganz gezielt die Empathiekompetenz der Mitarbeiter zu fördern. Dabei hilft eine Arbeitskultur, die Ausgeglichenheit unterstützt, Wert auf den wertschätzenden Dialog legt und Raum für Offenheit ermöglicht.

Wer für sein eigenes Unternehmen ein größeres Verständnis über die verbindende Kraft von Empathie erlangen möchte, dem empfehle ich unseren Workshop „Empathie in Organisationen“ im Rahmen der sepago Essentials.

Mitarbeiter, die empathisch sind, tragen eigenmotiviert, kooperativ und mit viel Kreativität zum Unternehmenserfolg bei. Mitarbeiter, die agil sind, finden schnell Herangehensweisen und erfolgreiche Lösungskonzepte für die sich ständig ändernde Anforderungen des Marktes. Wie bei sepago die Kompetenz der Agilität bei Mitarbeitern gefördert wird, beschreibe ich in meinem dritten Blogartikel. Stay tuned!


Windows 10 Deployment - In-Place Upgrade

$
0
0

Click here for an overview of the blog serie "Windows 10 und ConfigMgr Deployment Serie"

Why using In-Place Upgrade?

In the past, the migration process of operating systems including user settings and files was performed by using Configuration Manager / MDT and USMT (User State Migration Tools). This wipe and load approach worked very well.

With the release of Windows 10, Microsoft provided a powerful feature called “In-Place Upgrade”. This will upgrade your operating system while the user data will remain untouched.

When not to use In-Place Upgrade?

For Enterprise purposes, there is a reason why you would not this upgrade process.

The Windows 10 image must be untouched, so you cannot use a customized image by your organization. 

You need to consider the language settings of the running OS and the image, language packs cannot be downloaded by the In-Place upgrade process

How does the In-Place Upgrade work?

The upgrade process replaces the operating system. Drivers, applications, user settings and user data will be untouched. 

Preferred options (Enterprise):

  • System Center Configuration Manager or MDT
  • Windows 7, 8, 8.1
  • Use the standard Windows 10 image (Windows 10 Setup files)

Important In-Place upgrade LogFiles:

The most important LogFile is the setupact.log which is located here

  • %Systemdrive%\$Windows.~BT\sources\panther (during upgrade process)
  • %Systemdrive%\Windows\panther (after upgrade process and OOBE)
  • %Systemdrive%\Windows\panther\unattendGC (after OOBE and first Logon)

If anything went wrong, the setuperr.log could be helpful, the location is nearby the setupact.log. 

The four primary upgrade process phases

Down Level phase

  • Current operating system Windows 7 / Windows 8 / Windows 8.1
  • System check for compliance
  • Inventory of applications
  • Inventory of drivers
  • Analyze the operating system components
  • Download updates (not required for upgrade process)
  • Prepare WinRE

Running operating system

The In-Place upgrade process can be performed from Windows 7 / 8 / 8.1

System check for compliance

The first upgrade step checks the current operating system hardware for compliance, this contains the following devices.

  • CPU
  • RAM (at this moment 1 Gigabyte for Windows 10 x86 and 2 Gigabyte for Windows 10 x64)
  • Available Disk Space (for OS installation and recovery), If the disc space is below the actual needed capacity, it could be expanded by using external devices like thumb drives. This is important for Tablets with limited disk space. On ordinary devices the upgrade process tries to compress the file system.
  • Critical Drivers (Storage and network class drivers)
  • UEFI Version (The required UEFI Version is 2.3.1)
  • The current operating system must not be a Windows ToGo Stick or a VHD-Boot Machine

The setupact.log (%Systemdrive%\$WINDOWS.~BT\Sources\Panther) describes this process on a very detailed level:

The compliance checks starts at:

CONX   	Compatibility scan started. Scenario: 3, Categories: 0x00000021

And ends with:

CONX   	Compatibility scan finished. Scenario: 3, Categories: 0x00000021

The results is stored in an XML File:

CONX   	Compatibility scan data is saved to D:\$WINDOWS.~BT\Sources\Panther\CompatData_2016_03_22_10_29_24_3_00000021.xml

Content of CompatData_2016_03_22_10_29_24_3_00000021.xml:

<CompatReport xmlns="http://www.microsoft.com/ApplicationExperience/UpgradeAdvisor/01012009"><System X64Capable="True" X64Running="True"/><Hardware><HardwareItem HardwareType="Setup_HostIsBootedFromVHD"><CompatibilityInfo BlockingType="None"/></HardwareItem><HardwareItem HardwareType="Setup_HostIsBootedFromPortableWorkspace"><CompatibilityInfo BlockingType="None"/></HardwareItem><HardwareItem HardwareType="Setup_HostIsBootedFromAuditMode"><CompatibilityInfo BlockingType="None"/></HardwareItem><HardwareItem HardwareType="Setup_HostIsUEFICompliant"><CompatibilityInfo BlockingType="None"/></HardwareItem><HardwareItem HardwareType="Setup_SafeMode"><CompatibilityInfo BlockingType="None"/></HardwareItem><HardwareItem HardwareType="Setup_HostIsNonStagedBuild"><CompatibilityInfo BlockingType="None"/></HardwareItem><HardwareItem HardwareType="Setup_InsufficientDiskSpace"><CompatibilityInfo BlockingType="None"/></HardwareItem></Hardware><SystemInfo UplevelEdition="Windows 10" OSMajorVersion="6" OSMinorVersion="1"/></CompatReport>

Example of failed compatibility check (mismatched language):

<?xml version="1.0" encoding="utf-8" ?><CompatReport xmlns="http://www.microsoft.com/ApplicationExperience/UpgradeAdvisor/01012009"><System X64Capable="True" X64Running="True" /><Hardware><HardwareItem HardwareType="Setup_HostIsNewer"><CompatibilityInfo BlockingType="None" /></HardwareItem><HardwareItem HardwareType="Setup_NonStandardDirectory"><CompatibilityInfo BlockingType="None" /></HardwareItem><HardwareItem HardwareType="Setup_HostIsOldPrerelease"><CompatibilityInfo BlockingType="None" /></HardwareItem><HardwareItem HardwareType="Setup_MismatchedLanguage"><CompatibilityInfo BlockingType="Hard" /><Action Name="Setup_MismatchedLanguage" ResolveState="Hard" /></HardwareItem><HardwareItem HardwareType="Setup_MismatchedBuildType"><CompatibilityInfo BlockingType="None" /></HardwareItem><HardwareItem HardwareType="Setup_UpgradeDisabled"><CompatibilityInfo BlockingType="None" /></HardwareItem></Hardware></CompatReport>

Inventory of applications

The application inventory contains three basic steps:

Some Windows components will not be migrated, like Windows Media Center, because it’s not available in Windows 10.

During the upgrade process, a database with compatible applications which is stored on the installation media of Windows 10 will be used. If the upgrade process is performed in “online” mode, the latest version of this Database will be downloaded by the process. This list is available here:

https://sysdev.microsoft.com/en-us/hardware/lpl/

The upgrade process shows the application inventory data in a xml File in %Systemdrive%\$WINDOWS.~BT\Sources\Panther\<…>_APPRAISER_ApplicationInventory.xml

<…><Program Name="7-Zip 15.14 (x64 edition)"
         Type="Application"
         Source="Msi"
         Publisher="Igor Pavlov"
         Version="15.14.00.0"
         Language="1033"
         MsiProductCode="{23170F69-40C1-2702-1514-000001000000}"
         MsiPackageCode="{23170F69-40C1-2702-1514-000002000000}"
         InstallDate="03/22/2016 08:15:59"
         RootDirPath="D:\Program Files\7-Zip"
         Id="00001743f7a629a03aff738a3c38d1957afe00000904"><Indicators><MsiIndicators><Msi InstallDateMsi="03/22/2016 00:00:00"
                 MsiProductCode="{23170F69-40C1-2702-1514-000001000000}"
                 MsiPackageCode="{23170F69-40C1-2702-1514-000002000000}"/></MsiIndicators><AddRemoveProgramIndicators><AddRemoveProgram 	InstallDateArpLastModified="03/22/2016 00:00:00"
                              	RegistrySubKey="{23170F69-40C1-2702-1514-000001000000}"
                              	UninstallString="MsiExec.exe /I{23170F69-40C1-2702-1514-000001000000}"
EstimatedSize="0x1383" RegistryKeyPath="HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\{23170F69-40C1-2702-1514-000001000000}"
                              	DisplayName="7-Zip 15.14 (x64 edition)"
                              	CompanyName="Igor Pavlov"
                              	ProductVersion="15.14.00.0"
                              	Language="1033"
                              	VersionMajor="15"
                              	VersionMinor="14"/></AddRemoveProgramIndicators><ShellIndicators><Shell ShellName="7-Zip File Manager"
                   TargetFileName="7zFM.exe"
                   TargetPath="D:\Program Files\7-Zip\7zFM.exe"
                   LinkPath="D:\ProgramData\Microsoft\Windows\Start Menu\Programs\7-Zip\7-Zip File Manager.lnk"
                   InstallDateFromLinkFile="03/22/2016 08:16:00"
                   ParentName="7-Zip" Id="0000e65b909be1fb18415c27543f039977d2fbd8b95b"/></ShellIndicators></Indicators><StaticProperties><Files Id="0000da39a3ee5e6b4b0d3255bfef95601890afd80709"><File Name="7zFM.exe"
                  Size="0xcca00"
                  SizeOfImage="0xd0000"
                  PeHeaderHash="0101639e4386eda511a4500dd6d061b32992a0e03988"
                  PeChecksum="0x0"
                  LinkDate="12/31/2015 14:16:50"
                  BinaryType="PE64_AMD64"
                  LowerCaseLongPath="d:\program files\7-zip\7zfm.exe"
                  LongPathHash="0000753cdfe935df97f86e4710198a65f801caf3170f"/><File Name="7z.exe"
                  Size="0x6d400"
                  SizeOfImage="0x72000"
                  PeHeaderHash="010126c4bdb01a71844d39ab995996d7709e1c20e5e5"
                  PeChecksum="0x0"
                  LinkDate="12/31/2015 14:15:28"
                  BinaryType="PE64_AMD64"
                  LowerCaseLongPath="d:\program files\7-zip\7z.exe"
                  LongPathHash="00006b4e0c488defd48c170d0080cfac1b22f7e944a0"/><File Name="7zG.exe"
                  Size="0x87800"
                  SizeOfImage="0x8d000"
                  PeHeaderHash="0101b8597c80d8618aaf4a7fbccbe2081d9d7d601065"
                  PeChecksum="0x0"
                  LinkDate="12/31/2015 14:17:11"
                  BinaryType="PE64_AMD64"
                  LowerCaseLongPath="d:\program files\7-zip\7zg.exe"
                  LongPathHash="0000a51d0172cea733c3ee4c3f899303c9c950c2d236"/></Files></StaticProperties></Program><…>

Inventory of Drivers

Similar to the application inventory process, drivers are also checked regarding their compatibility.

The device driver inventory is stored in a xml file:

%Systemdrive%\$WINDOWS.~BT\Sources\Panther \<…>_APPRAISER_DeviceInventory.xml

<…><Device
	deviceId="{6cab8a67-f0ce-15f7-303b-5bb7c0016575}"
	instanceId="root\rdp_kbd\0000"
	parentId="htree\root\0"
	deviceState="96"
	problemCode="0"
	installState="0"
	description="Terminal Server Keyboard Driver"
	isHidden="1"
	enumerator="root"
	ContainerId="{27db0821-3bf9-f71a-f96f-a53403857690}"
	Excluded="Always"><HWID>
	root\rdp_kbd</HWID><InstalledDriver
	service="termdd"
	matchingID="root\rdp_kbd"
	infPath="machine.inf"
	originalInf="machine.inf"
	driverPackageId="0000df13704fe43482824f92a1bf8d0a6141aca586fb"
	driverPackageStrongName="machine.inf_amd64_neutral_a2f120466549d68b"
	fileName="termdd.sys"
	driverVerVersion="6.1.7601.17514"
	driverIsKernelMode="1"
	driverVerDate="11-20-2010"
	manufacturer="(Standard system devices)"
	class="system"
	classGuid="{4d36e97d-e325-11ce-bfc1-08002be10318}"
	model="Terminal Server Keyboard Driver"
	provider="Microsoft Corporation"
	driverId="0000f7089f6d7bb2b386e932aec5211689ea85fde9cc"
	upperFilters="00007a5a0cd429248f010df2b1369bb906bbf3f6001b"
	driverInBox="1"
	driverSigned="1"
	driverHasBootService="0"
/><…>

Analyze the operating system components

The upgrade process scans the system for operating system components. In summary, the process scans over 10 000 components and its manifests. 

Download Updates

If the upgrade process is performed in “online” mode, it downloads the latest cumulative updates for Windows 10 from windows update. If you use Configuration Manager or MDT, the updates can be downloaded from the local update server as well.

The setupact.log file describes the process:

The process does not only look for Windows updates, it also searches for driver updates on windows update. If it finds one, it will download the latest version of the device driver at this step.

Prepare WindowsRE

The preparing process for WinRE:

The upgrade process mounts the wim file of WinRE and injects all the necessary drivers which are needed during the WinRE phase. The wimfile is stored under %Systemdrive%\$WINDOWS.~BT\Sources\SafeOS. 

During the first phase, nothing is being migrated, the process just gathers data. The migration processes will be performed in the second, third and fourth step of the whole upgrade process.

After preparing the WinRE image, the upgrade process reboots the system and launches WinRE.

WinRE phase

The Windows RE phase contains three steps:

  • Backup down-level OS (current OS)
  • Lay down and prepare new OS
  • Prepare new OS

After booting into WinRE this screen appears:

At this moment, neither the old nor the new operating system is online.

Backup down-level OS

The backup process just moves the old operating System and its components to the %Systemdrive%\Windows.old Folder.

The setupact.log describes the process:

Final list of source OS pieces:
2016-03-22 11:18:34, Info                  SP    Name: WINDOWS, Original path: D:\WINDOWS, Current path: D:\WINDOWS (do not allow relocation)
2016-03-22 11:18:34, Info                  SP    Name: PROGRAMS, Original path: D:\Program Files, Current path: D:\Program Files (do not allow relocation)
2016-03-22 11:18:34, Info                  SP    Name: PROGRAMSX86, Original path: D:\Program Files (x86), Current path: D:\Program Files (x86) (do not allow relocation)
2016-03-22 11:18:34, Info                  SP    Name: USERS, Original path: D:\Users, Current path: D:\Users (allow relocation)
2016-03-22 11:18:34, Info                  SP    Name: PROGRAMDATA, Original path: D:\ProgramData, Current path: D:\ProgramData (do not allow relocation)
2016-03-22 11:18:34, Info                  SP    Name: INETPUB, Original path: D:\inetpub, Current path: D:\inetpub (do not allow relocation)
2016-03-22 11:18:34, Info                  SP    Name: SKYDRIVETEMP, Original path: D:\SkyDriveTemp, Current path: D:\SkyDriveTemp (do not allow relocation)
2016-03-22 11:18:34, Info                  SP    Name: RECOVERY, Original path: D:\Recovery, Current path: D:\Recovery (do not allow relocation)
2016-03-22 11:18:34, Info                  SP    No source symblic mappings found
2016-03-22 11:18:34, Info                  SP    Final list of Windows.old roots:
2016-03-22 11:18:34, Info                  SP    D:\
2016-03-22 11:18:34, Info                  SP    Final list of source move exceptions:
2016-03-22 11:18:34, Info                  SP    D:\Recovery\Customizations
2016-03-22 11:18:34, Info                  SP    Exception file/folder does not exist, ignoring
2016-03-22 11:18:34, Info                  SP    D:\Recovery\WindowsRE
2016-03-22 11:18:34, Info                  SP    Exception file/folder does not exist, ignoring
2016-03-22 11:18:34, Info                  SP    D:\Recovery\DownlevelWindowsRE
2016-03-22 11:18:34, Info                  SP    Exception file/folder does not exist, ignoring
2016-03-22 11:18:34, Info                  SP    D:\Recovery\ReAgentOld.xml
2016-03-22 11:18:34, Info                  SP    Exception file/folder does not exist, ignoring
2016-03-22 11:18:34, Info                  SP    D:\Recovery\OEM
2016-03-22 11:18:34, Info                  SP    Exception file/folder does not exist, ignoring
2016-03-22 11:18:34, Info                  SP    CRelocateOS::DoExecute: Moving previous OS piece from D:\WINDOWS to D:\Windows.old\WINDOWS
2016-03-22 11:18:34, Info                  SP    VERBOSE: Path D:\WINDOWS has no exceptions, trying a straight move
2016-03-22 11:18:34, Info                  SP    VERBOSE: Successfully moved D:\WINDOWS to D:\Windows.old\WINDOWS
2016-03-22 11:18:34, Info                  SP    CRelocateOS::DoExecute: Moving previous OS piece from D:\Program Files to D:\Windows.old\Program Files
2016-03-22 11:18:34, Info                  SP    VERBOSE: Path D:\Program Files has no exceptions, trying a straight move
2016-03-22 11:18:34, Info                  SP    VERBOSE: Successfully moved D:\Program Files to D:\Windows.old\Program Files
2016-03-22 11:18:34, Info                  SP    CRelocateOS::DoExecute: Moving previous OS piece from D:\Program Files (x86) to D:\Windows.old\Program Files (x86)
2016-03-22 11:18:34, Info                  SP    VERBOSE: Path D:\Program Files (x86) has no exceptions, trying a straight move
2016-03-22 11:18:34, Info                  SP    VERBOSE: Successfully moved D:\Program Files (x86) to D:\Windows.old\Program Files (x86)
2016-03-22 11:18:34, Info                  SP    CRelocateOS::DoExecute: Moving previous OS piece from D:\Users to D:\Windows.old\Users
2016-03-22 11:18:34, Info                  SP    VERBOSE: Path D:\Users has no exceptions, trying a straight move
2016-03-22 11:18:34, Info                  SP    VERBOSE: Successfully moved D:\Users to D:\Windows.old\Users
2016-03-22 11:18:34, Info                  SP    CRelocateOS::DoExecute: Moving previous OS piece from D:\ProgramData to D:\Windows.old\ProgramData
2016-03-22 11:18:34, Info                  SP    VERBOSE: Path D:\ProgramData has no exceptions, trying a straight move
2016-03-22 11:18:34, Info                  SP    VERBOSE: Successfully moved D:\ProgramData to D:\Windows.old\ProgramData
2016-03-22 11:18:34, Info                  SP    CRelocateOS::DoExecute: Moving previous OS piece from D:\inetpub to D:\Windows.old\inetpub
2016-03-22 11:18:34, Info                  SP    VERBOSE: Path D:\inetpub has no exceptions, trying a straight move
2016-03-22 11:18:34, Info                  SP    VERBOSE: Successfully moved D:\inetpub to D:\Windows.old\inetpub
2016-03-22 11:18:34, Info                  SP    CRelocateOS::DoExecute: Moving previous OS piece from D:\SkyDriveTemp to D:\Windows.old\SkyDriveTemp
2016-03-22 11:18:34, Info                  SP    VERBOSE: Path D:\SkyDriveTemp has no exceptions, trying a straight move
2016-03-22 11:18:34, Warning               SP    SPMoveFileWithShortName: Failed to move D:\SkyDriveTemp to D:\Windows.old\SkyDriveTemp, error: 0x00000002
2016-03-22 11:18:34, Info                  SP    CRelocateOS::DoExecute: Moving previous OS piece from D:\Recovery to D:\Windows.old\Recovery
2016-03-22 11:18:34, Info                  SP    VERBOSE: Successfully created target folder D:\Windows.old\Recovery
2016-03-22 11:18:34, Info                  SP    VERBOSE: Path D:\Recovery\01d91ba6-efbc-11e5-bfa3-001dd8b71fc8 has no exceptions, trying a straight move
2016-03-22 11:18:34, Info                  SP    VERBOSE: Successfully moved D:\Recovery\01d91ba6-efbc-11e5-bfa3-001dd8b71fc8 to D:\Windows.old\Recovery\01d91ba6-efbc-11e5-bfa3-001dd8b71fc8
2016-03-22 11:18:37, Info                  SP    SPCalculateDriveMappings: Assuming implicit mapping from the registry SystemRoot value [x:\Windows] to the offline Windows dir [D:\$WINDOWS.~BT\NewOS\WINDOWS]
2016-03-22 11:18:37, Info                  SP    pCreateSystemRootDriveMapping: SystemRoot implicit mapping is [x:\] -> [D:\$WINDOWS.~BT\NewOS\]

Lay down and prepare new OS
  • The new OS gets applied to %Systemdrive%\$Windows~BT\NewOS. 
2016-03-22 11:18:52, Info  SP  Final list of destination OS pieces:
2016-03-22 11:18:52, Info  SP  Name: WINDOWS, Original path: x:\Windows, Current path: D:\$WINDOWS.~BT\NewOS\Windows (do not allow relocation)
2016-03-22 11:18:52, Info  SP  Name: PROGRAMS, Original path: x:\Program Files, Current path: D:\$WINDOWS.~BT\NewOS\Program Files (do not allow relocation)
2016-03-22 11:18:52, Info  SP  Name: PROGRAMSX86, Original path: x:\Program Files (x86), Current path: D:\$WINDOWS.~BT\NewOS\Program Files (x86) (do not allow relocation)
2016-03-22 11:18:52, Info  SP  Name: USERS, Original path: x:\Users, Current path: D:\$WINDOWS.~BT\NewOS\Users (allow relocation)
2016-03-22 11:18:52, Info  SP  Name: PROGRAMDATA, Original path: x:\ProgramData, Current path: D:\$WINDOWS.~BT\NewOS\ProgramData (do not allow relocation)
2016-03-22 11:18:52, Info  SP  Name: INETPUB, Original path: x:\inetpub, Current path: D:\$WINDOWS.~BT\NewOS\inetpub (do not allow relocation)
2016-03-22 11:18:52, Info  SP  Name: SKYDRIVETEMP, Original path: x:\SkyDriveTemp, Current path: D:\$WINDOWS.~BT\NewOS\SkyDriveTemp (do not allow relocation)
2016-03-22 11:18:52, Info  SP  Name: RECOVERY, Original path: x:\Recovery, Current path: D:\$WINDOWS.~BT\NewOS\Recovery (do not allow relocation)

  • The inventoried drivers and applications get integrated into the new OS. The migration of applications is similar to the technology that USMT uses.
  • Modern Apps are migrated, if the current operating system has modern apps installed, the progress will check if Windows 10 contains a newer version of these.
  • After that, the NewOS Folder gets redirected to %Systemdrive%.
  • Every folder which conflicts with the folder structure of the Windows 10 WIM File will be copied.
2016-03-22 11:18:52, Info                  SP     	CRelocateOS: Moving new OS pieces from D:\$WINDOWS.~BT\NewOS to D:\
2016-03-22 11:18:52, Info                  SP     	CRelocateOS: Path D:\$WINDOWS.~BT\NewOS\bootmgr excluded, will not be moved in the final place.
2016-03-22 11:18:52, Info                  SP    	Moving D:\$WINDOWS.~BT\NewOS\BOOTNXT to D:\BOOTNXT
2016-03-22 11:18:52, Info                  SP     	VERBOSE: Path D:\$WINDOWS.~BT\NewOS\BOOTNXT has no exceptions, trying a straight move
2016-03-22 11:18:52, Info                  SP     	VERBOSE: Successfully moved D:\$WINDOWS.~BT\NewOS\BOOTNXT to D:\BOOTNXT
2016-03-22 11:18:52, Info                  SP     	CRelocateOS: Path D:\$WINDOWS.~BT\NewOS\$Recycle.Bin excluded, will not be moved in the final place.
2016-03-22 11:18:52, Info                  SP     	Moving D:\$WINDOWS.~BT\NewOS\inetpub to D:\inetpub
2016-03-22 11:18:53, Info                  SP     	VERBOSE: Path D:\$WINDOWS.~BT\NewOS\inetpub has no exceptions, trying a straight move
2016-03-22 11:18:53, Info                  SP    	VERBOSE: Successfully moved D:\$WINDOWS.~BT\NewOS\inetpub to D:\inetpub
2016-03-22 11:18:53, Info                  SP     	CRelocateOS: Collision detected for path D:\PerfLogs, which is not an OS piece. Moving out of the way.
2016-03-22 11:18:53, Info                  SP     	VERBOSE: Path D:\PerfLogs has no exceptions, trying a straight move
2016-03-22 11:18:53, Info                  SP     	VERBOSE: Successfully moved D:\PerfLogs to D:\Windows.old\PerfLogs
2016-03-22 11:18:53, Info                  SP     	Moving D:\$WINDOWS.~BT\NewOS\PerfLogs to D:\PerfLogs
2016-03-22 11:18:53, Info                  SP     	VERBOSE: Path D:\$WINDOWS.~BT\NewOS\PerfLogs has no exceptions, trying a straight move
2016-03-22 11:18:53, Info                  SP    	VERBOSE: Successfully moved D:\$WINDOWS.~BT\NewOS\PerfLogs to D:\PerfLogs
2016-03-22 11:18:53, Info                  SP     	Moving D:\$WINDOWS.~BT\NewOS\Program Files to D:\Program Files
2016-03-22 11:18:53, Info                  SP     	VERBOSE: Path D:\$WINDOWS.~BT\NewOS\Program Files has no exceptions, trying a straight move
2016-03-22 11:18:53, Info                  SP     	VERBOSE: Successfully moved D:\$WINDOWS.~BT\NewOS\Program Files to D:\Program Files
2016-03-22 11:18:53, Info                  SP     	Moving D:\$WINDOWS.~BT\NewOS\Program Files (x86) to D:\Program Files (x86)
2016-03-22 11:18:53, Info                  SP     	VERBOSE: Path D:\$WINDOWS.~BT\NewOS\Program Files (x86) has no exceptions, trying a straight move
2016-03-22 11:18:53, Info                  SP     	VERBOSE: Successfully moved D:\$WINDOWS.~BT\NewOS\Program Files (x86) to D:\Program Files (x86)
2016-03-22 11:18:53, Info                  SP    	Moving D:\$WINDOWS.~BT\NewOS\ProgramData to D:\ProgramData
2016-03-22 11:18:53, Info                  SP     	VERBOSE: Path D:\$WINDOWS.~BT\NewOS\ProgramData has no exceptions, trying a straight move
2016-03-22 11:18:53, Info                  SP     	VERBOSE: Successfully moved D:\$WINDOWS.~BT\NewOS\ProgramData to D:\ProgramData
2016-03-22 11:18:53, Info                  SP     	Moving D:\$WINDOWS.~BT\NewOS\Users to D:\Users
2016-03-22 11:18:53, Info                  SP     	VERBOSE: Path D:\$WINDOWS.~BT\NewOS\Users has no exceptions, trying a straight move
2016-03-22 11:18:53, Info                  SP     	VERBOSE: Successfully moved D:\$WINDOWS.~BT\NewOS\Users to D:\Users
2016-03-22 11:18:53, Info                  SP     	Moving D:\$WINDOWS.~BT\NewOS\Windows to D:\Windows
2016-03-22 11:18:53, Info                  SP     	VERBOSE: Path D:\$WINDOWS.~BT\NewOS\Windows has no exceptions, trying a straight move
2016-03-22 11:18:53, Info                  SP     	VERBOSE: Successfully moved D:\$WINDOWS.~BT\NewOS\Windows to D:\Windows
2016-03-22 11:18:53, Info                  SP     	SetupPlatform: Global progress: 25, Phase progress: 86
2016-03-22 11:18:53, Info                  SP     	Operation completed successfully: Relocate OS from D:\$WINDOWS.~BT\NewOS to D:\

The Windows.Old is scanned by the process and every file which might be necessary will be “copied” in the running operating system. It’s basically not a copy job, the process just set hard links to the new location.

2016-03-22 11:39:51, Info  PLATFORMTRACK: DoesObjectExist called for D:\PROGRAM FILES\MICROSOFT POLICY PLATFORM\TGTNS_PRINCIPALBINDING.MOF

2016-03-22 11:39:51, Info  GetNewLocation: Request to D:\Windows.old\PROGRAM FILES\MICROSOFT POLICY PLATFORM\TGTNS_PRINCIPALBINDING.MOF inside moved folder redirected to D:\Program Files\Microsoft Policy Platform\TGTNS_PRINCIPALBINDING.MOF

2016-03-22 11:39:51, Info  GetNewLocation: Request to D:\Windows.old\PROGRAM FILES\MICROSOFT POLICY PLATFORM\POLICYPROCESSORPROVIDER.MOF inside moved folder redirected to D:\Program Files\Microsoft Policy Platform\POLICYPROCESSORPROVIDER.MOF

First Boot to new OS

The location of setupact.log has changed, the new location is %Systemdrive%\Windows\panther.

This phase contains these steps:

  • Set up windows components
  • Install APPX Packages
  • Install Device Drivers
  • Set user settings
Set up windows components

The upgrade process starts to enable the Windows components.

Install APPX Packages

Now the installer activates the APPX packages:

2016-03-22 11:26:00, Info               SYSPRP Successfully pre-registered microsoft.windowscommunicationsapps_2015.6308.42271.0_neutral_~_8wekyb3d8bbwe
2016-03-22 11:26:10, Info               SYSPRP Successfully pre-registered Microsoft.WindowsMaps_4.1509.50911.0_neutral_~_8wekyb3d8bbwe
2016-03-22 11:26:15, Info               SYSPRP Successfully pre-registered Microsoft.WindowsPhone_2015.1009.10.0_neutral_~_8wekyb3d8bbwe
2016-03-22 11:26:18, Info               SYSPRP Successfully pre-registered Microsoft.WindowsSoundRecorder_2015.1012.110.0_neutral_~_8wekyb3d8bbwe
2016-03-22 11:26:22, Info               SYSPRP Successfully pre-registered Microsoft.WindowsStore_2015.1013.14.0_neutral_~_8wekyb3d8bbwe
2016-03-22 11:26:28, Info               SYSPRP Successfully pre-registered Microsoft.XboxApp_2015.930.526.0_neutral_~_8wekyb3d8bbwe
2016-03-22 11:26:36, Info               SYSPRP Successfully pre-registered Microsoft.ZuneMusic_2019.6.13251.0_neutral_~_8wekyb3d8bbwe
2016-03-22 11:26:40, Info               SYSPRP Successfully pre-registered Microsoft.ZuneVideo_2019.6.13251.0_neutral_~_8wekyb3d8bbwe
2016-03-22 11:26:40, Info               SYSPRP Finished AppxPreRegisterPackage for all packages.

Install Device Drivers

The process installs the drivers, if drivers were download from windows update, the upgrade process will install these drivers.

Set user settings

The process sets the user specific settings, such as user specified App settings or Windows settings.

After these four steps, the system reboots again to the fourth Upgrade phase.

Second boot to new OS

The second boot to the new OS contains two small steps:

  • Finalize the upgrade
  • Welcome the user and OOBE

In the fourth phase, the setupact.log is moved to %Systemdrive%\Windows\panther\unattendGC

Finalize the upgrade

The upgrade process is finished.

Welcome the user and OOBE

The User welcome screen appears, which is similar to the screen after an ordinary Windows 10 installation. After the first logon, the user will see the Out of the box experience which performs the customization of windows.

 

How do I know the upgrade was successful?

At first, when Windows 10 boots up and the user was able to logon, the upgrade was basically successful. If any problems appear during the process, the system will be recovered to the old OS.

The System creates a registry key, that’s all.

Of course the setupact.log (%Systemdrive%\Windows\panther\unattendGC) describes the process:

[oobeldr.exe] OrchestrateUpdateImageState: Updating image state from [IMAGE_STATE_UNDEPLOYABLE] --> [IMAGE_STATE_COMPLETE]

Recover the system

If “something went wrong” during the upgrade process, the system will be recovered. This recovery can be performed out of any of the four upgrade process phases and beyond the first login.

Recover the system automatically by the process

Let’s see how the recovery process runs out of the four (five) phases:

Down Level

Basically the Down Level phase just gathered data. There is nothing more to do than cleaning up the system. If something causes a “hard block”, the system will be cleaned up.

WinRE

If something went wrong in the WinRE Phase, the upgrade process reboots into the original OS and cleans up the gathered data.

First Boot to new OS

If something went wrong iIn this phase, there is much more to do than just cleaning up, because the new OS is already running. So the process needs to reverse all the changes.

  • Reboot to WinRE
  • Remove the files and folders from the Systemdrive
  • Move the files and folders out of the Windows.Old folder to their original location
  • Cleanup the system
  • Reboot to original OS
Second boot to new OS

Basically in the fourth phase, all recovery steps of phase three will be performed in this phase.

  • Reboot to WinRE
  • Remove the files and folders from the Systemdrive
  • Move the files and folders out of the Windows.Old folder to their original location
  • Cleanup the system
  • Reboot to original OS
First Logon

If the process was fully successful and the user is able to login for the first time. If anything went wrong in this case, the system will reboot and reverse the system to its original state. The process proves that someone actually can login to the new Operating System.  

Recover the system manually

It might happen, that the upgrade process completes successful and the user is able to use the new operating system at first glance, but later it turns out that a critical application does not work as expected when running on the new OS.

On order to support these scenarios, Windows 10 lets the user decide to recover the system by himself. For that purpose, the Windows.Old folder remains on the local hard disk for 30 days. 

The user can start the recovery out of the system settings:

The recovery process which starts is basically the same as in the last to upgrade phases:

  • Reboot to WinRE
  • Remove the files and folders from the Systemdrive
  • Move the files and folders out of the Windows.Old folder to their original location
  • Cleanup the system
  • Reboot to original OS

sepago lädt ein - Business Connect 2016

$
0
0

Gemeinsam mit unserem Partner bluecue veranstalten wir am 15. Juni 2016 im Maybach Museum in Neumarkt bei Nürnberg eine Ganztagesveranstaltung mit Vortragsschwerpunkten der Hersteller Citrix, vast limits und Splunk. 

Folgende Themenschwerpunkte erwarten Sie: Monitoring und Aufbereitung von Kennzahlen, Automatisierung beim Rollout von Netzwerkkomponenten und neuen Technologien zur Anwendungsverteilung. 

Zielgruppe der Veranstaltung sind Geschäftsführer (CEO´s), IT Manager (CIO´s), IT Teamleiter, sowie IT Projektleiter aus Unternehmen und Behörden. 

Ihnen wird eine Plattform geboten sich mit anderen Experten austauschen und zu networken.

Es erwartet Sie eine abwechslungsreiche und informative Agenda: 

09:00 Uhr Registrierung

09:30 Uhr Begrüßung 

09:45 Uhr Keynote – Digitalisierung im Unternehmen (Nico Lüdemann)

10:30 Uhr Operational Intelligence by Splunk> (Thomas Scheidler)

11:15 Uhr Kaffeepause

11:30 Uhr IT-Security Montoring mit Splunk> Enterprise (René Golembewski)

12:00 Uhr KPIs am Arbeitsplatz – User Experience Monitoring mit uberAgent (Ralf Walkenhorst)

12:45 Uhr Mittagspause

13:45 Uhr Führung durch das Maybach Museum

Am Nachmittag sind unsere Kollegen mit zwei Vorträgen aus dem Citrix-Bereich vertreten.

14:30 Uhr Citrix NetScaler – Vom Big Picture zur Automatisierung (Sven Jansen)

Einen NetScaler über die GUI zu konfigurieren ist nicht die effizienteste Art. Der Weg über die Automatismen vereinfacht und beschleunigt vieles, ist aber – vor allem bei Anpassungen – nicht unbedingt übersichtlich. Wir schauen uns an, welche Möglichkeiten der NetScaler darüberhinaus bietet und stellen das, von sepago auf Basis von PowerShell und REST entwickelte Automatisierungs-Framework, vor.

15:15 Uhr Citrix AppDisk – Bye bye Golden Image? (Dominik Britz)

Citrix springt mit der neusten Version von XenDesktop auf den Application Layering Zug auf und bringt AppDisk für alle Editionen. Erfahren Sie, wie die Technologie im Detail funktioniert und ob es vielleicht nur eine Neuauflage von Application Streaming ist. Am Ende des Vortrags wissen Sie, ob AppDisk mit der Konkurrenz mithalten kann.

16:00 Uhr Wrap-up (bluecue / sepago)

16:30 Uhr Networking

An diesem Tag nehmen Sie sicher viele neue Ideen, Impulse und Anregungen für Ihr IT-Business mit. 

Weitere Details zu den Sessions und eine Anmeldemöglichkeit finden Sie hier: 

http://www.bluecue.de/events/business-connect-2016-by-bluecue-sepago/

Neues Community Programm bei Citrix – und wir sind ein Teil davon.

$
0
0

Pünktlich zur diesjährigen Citrix Synergy in Las Vegas hat Citrix ein neues Community Programm ins Leben gerufen. Den Citrix Technology Professional Advocate, kurz CTA. Insgesamt wurden weltweit 25 Personen zum CTA ernannt. 

Wir sind stolz, dass unser Kollege Carsten Bruns einer der wenigen CTAs ist. 

Ausschlaggebend für seine Wahl ist sein umfangreiches Engagement im Citrix Bereich. Exemplarisch zählen dazu die Mitarbeit an der Community CUGC, Blogartikel über Citrix Technologien, Vorträge auf diversen Events zu Citrix Themen, sowie der enge Austausch und Kontakt zu Citrix Experten.

Sein zusätzliches Know-how wird Carsten Bruns zur optimalen Kundenberatung nutzen und mit der Community teilen. Folgen Sie Carsten und uns auf Twitter und lesen Sie seine Experten Blogs

Weitere Informationen sind auf dem Blog von Citrix zu finden:

https://www.citrix.com/blogs/2016/05/23/expanding-recognition-for-community-contributors-citrix-technology-advocates/

 

Betriebssystembereitstellung - Upgrade auf Windows 10

$
0
0

Hier gehts zur Blogserie: Windows 10 und ConfigMgr Deployment

Seit der Version 1511 des Configuration Managers von Microsoft können Sie ein "Inplace-Upgrade" Ihrer Windows Client Betriebssysteme vornehmen.  Die unterstützten Betriebssysteme sind Windows 7, 8 und 8.1. Mit der Version 1511 ist die vorgefertigte Tasksequenz Vorlage eingeführt worden.

Ich zeige Ihnen heute eine Step by Step Anleitung zum Upgrade eines Windows 8.1 Clients.

1.    Wählen Sie in der Configuration Manager-Konsole den Arbeitsbereich „Softwarebibliothek“ aus.

2.    Erweitern Sie im Arbeitsbereich „Softwarebibliothek“ den Ordner „Betriebssysteme“, und klicken Sie dann auf „Betriebssystem-Upgradepakete“.

3.    Klicken Sie auf die Registerkarte „Startseite“ in der Gruppe „Erstellen“ auf „Betriebssystem-Upgradepaket hinzufügen“, um den Assistenten zum Hinzufügen von Betriebssystem-Upgradepaketen zu starten.

4.    Geben Sie auf der Seite „Datenquelle“ den Netzwerkpfad zu den Installationsquellen des Betriebssystem-Upgradepakets an. Wichtig ist hierbei, dass es sich um einen UNC-Pfad handelt. (Hier habe ich vorher den  Inhalt der Windows 10 ISO in dieses Verzeichnis kopiert). Anders als bei "herkömmlichen" OS Deployments wird nicht nur das Windows Image (Wim) benötigt, sondern der gesamte Inhalt der Installations-DVD.

5.    Geben Sie auf der Seite „Allgemein“ die folgenden Informationen an, und klicken Sie dann auf „Weiter“. Diese Informationen sind für Identifikationszwecke hilfreich, wenn Sie über mehrere Betriebssysteminstallationspakete verfügen.

  • Name“: Geben Sie den Namen des Betriebssysteminstallationspakets an.
  • Version“: Geben Sie die Version des Betriebssysteminstallationspakets an.
  • Kommentar“: Geben Sie eine kurze Beschreibung des Betriebssysteminstallationspakets an.

6.    Jetzt bekommen Sie nochmal den Status angezeigt.

7.    Das fertige Paket muss jetzt auf die gewünschten „Verteilungspunkte“ verteilt werden. Klicken Sie dazu mit der rechten Maustaste auf das erstellte Paket und wählen Sie „Verteile Inhalt“.

8.    Im Anschluss öffnet sich der „Verteilungsassistent“.

9.    Wählen Sie jetzt Ihre gewünschten Verteilungspunkte aus.

10.    Sie sehen jetzt die Zusammenfassung.

11.    Die erfolgreiche Verteilung wird Ihnen zum Schluss nochmal angezeigt, nun können Sie den Assistenten schließen. 

12.    Aktualisieren Sie jetzt nochmal die Ansicht und Sie sehen, dass das Paket auf dem Verteilungspunkt verteilt wurde. Unten rechts können Sie den Verteilungsstatus des Pakets sehen.

Der zweite Step ist die Erstellung einer „Upgrade-Tasksequenz“.


1.    Im Bereich „Softwarebibliothek“ wählen Sie unter „Betriebssysteme“ den Punkt „Tasksequenzen“ mit der rechten Maustaste aus und wählen im Kontextmenü den Menüpunkt „Tasksequenz erstellen“.

2.    Sie sehen nun im Assistenten den neuen Punkt „Durchführen eines Upgrades für ein Betriebssystem mit einem Upgradepaket

3.    Geben Sie jetzt einen sprechenden Namen und die gewünschten Informationen für die Wiedererkennung Ihrer Tasksequenzen ein.

4.    Wählen Sie hier das zuvor erstellte Upgradepaket aus.


5.    Sie können einen Produktschlüssel für die automatische Aktivierung nach der Installation angeben.

6.    Jetzt haben Sie die Möglichkeit „Update Pakete“ von Ihrem WSUS zu wählen. Wenn Sie keine Updates aus wählen, müssen Sie im Anschluss alle aktuellen Updates nach der Installation noch einmal nachpflegen.

7.    Sie haben jetzt die Möglichkeit zusätzliche Software zu installieren.

8.    Sie bekommen jetzt die Zusammenfassung, bevor Sie die Tasksequenz erstellen.

9.    Jetzt haben Sie die Tasksequenz erstellt.

Dritter Step, die Anwendung der Upgrade Tasksequenz auf eine „Clientgruppe“:

1.    Klicken Sie mit der rechten Maustaste auf die soeben erstellte Tasksequenz und wählen Sie „Verteilen“.

2.    Wenn Sie jetzt den Assistenten starten und eine „Sammlung“ auswählen wollen, wird Ihnen als erstes eine Warnung angezeigt, dass diese Tasksequenz „potentiell gefährlich“ ist.

3.    Wählen Sie jetzt Ihre Sammlung für das Upgrade aus. Prüfen Sie zweimal ob Sie die richtige Sammlung gewählt haben. Prüfen Sie ob sicher keine falschen Clients enthalten sind.

4.    Es gibt 2 Methoden das Upgrade zu verteilen, die erste Methode ist das Upgrade zur Verfügung zu stellen im ConfigMgr Client des Windows Clients und die zweite Methode ist die aufgezwungene Verteilung, nach der es kein Zurück mehr für die Sammlung gibt. Es wird dann auf allen Clients in der Sammlung die Upgrade Tasksequenz angewandt.

5.    Für den Testzweck wählen wir die Option „Verfügbar“.

6.    Sie haben die Möglichkeit zu definieren, ab wann das Upgrade bereitstehen soll.

7.    Sie haben jetzt die Möglichkeit der visuellen Verfolgung während Sequenz auf Ihre Wünsche einzustellen.

8.    In den Alarmeinstellungen können Sie sich eine Benachrichtigung erstellen.

9.    Dies ist meiner Ansicht nach ein sehr wichtiger Punkt, Sie werden nun gefragt ob der Inhalt erst auf Ihren Client geladen werden muss oder direkt von der Quelle aus installiert werden soll. Aus meiner Erfahrung heraus, empfehle ich Ihnen gerade bei einem Upgrade die Daten erst auf den Client zu laden bevor Sie das Upgrade starten. Sie haben hier zusätzlich die Option ein „Rollback“ bei fehlgeschlagenem Upgrade automatisch zu starten. (Bei Fehlern wird die Installation wieder zurückgerollt)

10.    Lesen Sie sich nochmal die Zusammenfassung gut durch bevor Sie starten.

11.    Die Erstellung der Bereitstellung war erfolgreich.

Vierter Step, die Anwendung der Tasksequenz auf einem Client:


Machen Sie vorher immer eine Sicherung des Clients. Laut MS soll das ja aufgrund der hervorragenden Rollback-Mechanismen nicht nötig sein. ;-)


1.    Auf dem Windows 8.1 Client sehen Sie jetzt im „Softwarecenter“ die Upgrade Tasksequenz.

2.    Wenn Sie jetzt die Upgrade Tasksequenz auswählen und auf "Installieren" klicken, startet die Installation. Zuvor erhalten Sie sofort die Warnmeldung, dass Sie ein Betriebssystem installieren.

3.    Nach der Bestätigung der Meldung werden zunächst die Installationquellen lokal heruntergeladen bevor die Installation startet.

In der Spalte Status können Sie den aktuellen Fortschritt des Downloads verfolgen.

4.    Nach dem Download beginnt der Upgradeprozess.

5.    Danach wird ein Neustart durchgeführt

6.    Nach dem Neustart wird die Installation fortgesetzt.

7.    Nach einem weiteren Neustart beginnt die eigentliche Installation.  Als erstes werden die „Daten kopiert“. Sie sehen in der Mitte den „Gesamtfortschritt“ und unten jeweils den Fortschritt der einzelnen Installationskomponenten.

8.    Es folgt wieder ein Neustart danach folgen die „Features und Treiber“.

9.    Nach einem weiteren Neustart werden im 3. Schritt die „Einstellungen konfiguriert

10.    Im Anschluss startet der Client neu und schließt die Upgrade Tasksequenz ab.

11.    Es wurde der Config Manger neu initialisiert und die Updates installiert.

12.    Ihr Client läuft jetzt mit Windows 10

13.    Nach der ersten Anmeldung werden noch einmal Einstellung von Windows konfiguriert.

14.    Wenn die Konfiguration des Clients abgeschlossen ist haben Sie das Upgrade erfolgreich abgeschlossen.

Export And Import Citrix XenDesktop Published Apps

$
0
0

In one of my last projects I needed an automated way to migrate published apps from a Citrix XenDesktop test site to a production site. There is no way to do so in Citrix Studio. Additionally the customer has many published apps configured with FTAs, categories and so on I was sure I would have missed something if I had gone the manual way.

I headed over to my colleague Clemens Geiler and we talked and scripted. The outcome were two scripts, one to export all published apps to json files and one to import apps with the information of the exported json files. I will explain the scripts in this article but you also can scroll to the end and download them right away.

Before you start

·         Citrix is adding features in each new release. The scripts were developed for version 7.8. If you use them with a later version note that new options maybe not get considered. If we have new releases for newer versions, we will update this blog post accordingly.

  • PowerShell version 3 is required. Be sure to update to that version if you are using Windows Server 2008R2.
  • The scripts have to be executed on a Citrix Controller.
  • Run the scripts in an elevated powershell console.
  • If you want to see some logs, run the scripts with –Verbose parameter. 

Export published apps

To export published apps, use the script Export-PublishedApps.ps1. As apps are published to Citrix delivery groups (or desktop group), you have to run the script for each delivery group you want to export apps from. For that reason the script has two mandatory parameters:

  • ExportFolder -> Folder where to save the exported json files. If it does not exist, the script creates it. In this folder the script creates a subfolder for each DesktopGroup.
  • DesktopGroup -> The Citrix Studio Desktop Delivery Group which will be the source for the export

Example: 

# Exports all published apps which are published to the desktop delivery group "Test" to the folder "C:\Export\Test"
.\Export-XenDesktopApplications.ps1 -ExportFolder C:\Export -DesktopGroup Test

Let’s have a look at the script. First you need to get the unique id of the desktop group. You can then get all apps published to that desktop group with Get-BrokerApplication –DesktopGroupUid. You loop through all the apps and build a hashtable with all properties for each app.

$DesktopGroupUid = (Get-BrokerDesktopGroup -Name $DesktopGroup).Uid
Get-BrokerApplication -DesktopGroupUid $DesktopGroupUid | ForEach-Object{
    $CurrentAppHashTable = @{}
    $CurrentApp = $_
    $CurrentApp|Get-Member -MemberType Property|foreach-object{
    $_.name
    }|foreach-object{
        $CurrentAppHashTable.Add($_, $(($CurrentApp).$($_)))
    }

We also want to get the icon for each app. They are saved in a base64 encoded string.

$BrokerIconUid = ($CurrentApp).IconUid
$BrokerEnCodedIconData = (Get-BrokerIcon -Uid $BrokerIconUid).EncodedIconData
$CurrentAppHashTable.Add('EncodedIconData', $BrokerEnCodedIconData)

The last thing we want to save in our hashtable are the file type associations. FTAs are defined per site. To get the associations with our apps we loop through all configured FTAs and search for the uid of the apps. Because an app can have multiple FTAs, we build a hashtable from the information and add it to our existing hashtable as a value.

Get-BrokerConfiguredFTA | Where-Object {$_.ApplicationUid -eq $CurrentApp.Uid} | ForEach-Object -Process {
        $FTAUid = "FTA-" + "$($_.Uid)"
        $FTA = @{}
        $FTA.Add('ContentType',$_.ContentType)
        $FTA.Add('ExtensionName',$_.ExtensionName)
        $FTA.Add('HandlerDescription',$_.HandlerDescription)
        $FTA.Add('HandlerName',$_.HandlerName)
        $FTA.Add('HandlerOpenArguments',$_.HandlerOpenArguments)
        $CurrentAppHashTable.Add("$FTAUid", $FTA)

That’s it! Last but not least we save the hashtable in a json file.

$AppName = $_.ApplicationName -replace '','_'
$Extension = 'json'
$Filename = $Appname + '.' + $Extension
$Content = $CurrentAppHashTable|ConvertTo-Json -Compress #-Compress is needed because of a bug in PowerShell -> http://stackoverflow.com/questions/23552000/convertto-json-throws-error-when-using-a-string-terminating-in-backslash
$Content|Set-Content -Path $(join-path $ExportFolder\$DesktopGroup $Filename) -Force

 

Import published apps

In the next step we are able to publish apps with the information of the exported json files in a new empty site. Importing is way more complex than exporting. Here we go!

As apps are published do desktop groups and we exported them per desktop group, we have to do the same we did when importing. For that reason the script Import-XenDesktopApplications.ps1 has two mandatory parameters as well:

  • ImportFolder -> Folder where the input json files are located
  • DesktopGroup -> The Citrix Studio Desktop Delivery Group which will be the target for the import. If the app already exists at a Site, the script will skip that app.

In the first step we built a list of all attributes we can find in the json files. We need them later on.

$AttributNames = (Convertfrom-Json "$(Get-Content (Get-ChildItem $ImportFolder -Filter *.json).fullname)"|Get-Member -MemberType NoteProperty|Select-Object Name).name

The icon data has to be removed because you can’t configure the icon on app creation. You have to do it later.

(Get-ChildItem $ImportFolder -filter *.json).FullName|ForEach-Object{
    $BrokerApplicationJSONFile = ConvertFrom-Json "$(Get-Content $_)"
    $BrokerApplicationHashTable = @{}
    $BrokerApplicationJSONFile|get-member -MemberType NoteProperty|Where-Object{-not [string]::IsNullOrEmpty($BrokerApplicationJSONFile."$($_.name)")}|ForEach-Object {$BrokerApplicationHashTable.add($_.name,$BrokerApplicationJSONFile."$($_.name)")}
    $AttributNames|ForEach-Object{
        if($_ -match 'AdminFolderUid' -or $_ -match 'AssociatedDesktopGroupUUIDs' -or $_ -match 'EncodedIcon')
        {
            $BrokerApplicationHashTable.Remove("$_")
        }
    }

The name of a published app contains the full path to the app including Citrix Studio folder names. If you have two published apps called Notepad, one in the root and the other one in the folder “Germany”, then name of the first one is “Notepad” , the second one’s is “Germany\Notepad”. The problem now is, that the Citrix cmdlets can’t handle strings with a backslash in them. That is why we safe the full name in the variable $OldAppName for later use. We then check if the app already exists, if so we skip this app.

$OldAppName = $BrokerApplicationHashTable.Name #save the full name with possible admin folders for later use as we have to trim all backspaces because studio does not allow them on app creation

    If (Get-BrokerApplication $OldAppName -ErrorAction SilentlyContinue)
    {
        Write-Verbose "App $OldAppName already exists. Skipping..."
    }

The next step is to handle admin folders. Admin folders are the folders you as an admin can see in Citrix Studio. On migrating apps from one site to another, we cannot assume that admin folders present at the source site as well exist at the destination site. Admin folders have to be created before we can publish an app which resides in that admin folder. On top the Citrix cmdlets do not have a –Force switch so that parent admin folders get created automatically. We have to handle that by ourselves. To all abundance you have to call the cmdlet for the admin folder creation with the parameter –ParentFolder in case there is a root folder and without it if there’s none. Well designed… So, these are the conditions we have to take care of:

App doesn’t have an admin folder -> Nothing to do :)

App has one or more admin folder

   -> There is only one admin folder level (e.g. “Germany”)

   -> There are multiple admin folder levels (e.g. “Germany\Cologne”)

      -> Root folder does not exist

      - >Root folder already exists

If ($BrokerApplicationHashTable.AdminFolderName)
        {
            $Folder = $BrokerApplicationHashTable.AdminFolderName
            Write-Verbose "Admin folder $Folder configured"
            If ($Folder.Split('\').Count -eq 1) #only one folder level
            {
                $FolderName = $Folder.Split('\')[0]
                If (Get-BrokerAdminFolder -Name $Folder -ErrorAction SilentlyContinue)
                {
                    Write-Verbose "Admin folder $Folder already exists. Skipping..."
                }
                Else
                {
                    Write-Verbose "Create admin folder $FolderName"
                    $null = New-BrokerAdminFolder -FolderName $FolderName
                }
            }
            Else #multiple folder levels
            {
                $max = $Folder.Split('\').Count - 1
                for ($i = 0; $i -le $max; $i++)
                {
                    If ($i -eq 0) #root folder does not exist
                    {
                        $FolderName = $Folder.Split('\')[0]
                        If (Get-BrokerAdminFolder -Name $Folder -ErrorAction SilentlyContinue)
                        {
                            Write-Verbose "Admin folder $Folder already exists. Skipping..."
                        }
                        Else
                        {
                            Write-Verbose "Create admin folder $FolderName"
                            $null = New-BrokerAdminFolder -FolderName $FolderName
                        }
                    }
                    Else #root folder already exists
                    {
                        $FolderName = $Folder.Split('\')[$i]
                        $ParentFolder = ($Folder.SubString(0, $Folder.LastIndexOf("$FolderName"))).Trim('\')
                        If (Get-BrokerAdminFolder -Name $Folder -ErrorAction SilentlyContinue)
                        {
                            Write-Verbose "Admin folder $Folder already exists. Skipping..."
                        }
                        Else
                        {
                            Write-Verbose "Create admin folder $FolderName in parent folder $ParentFolder"
                            $null = New-BrokerAdminFolder -FolderName $FolderName -ParentFolder $ParentFolder
                        }
                    }
                }
            }
        }

Admin folders, check! Off to the published app itself. One could assume that you can use something easy like splatting to create a published app:

$NewBrokerApplication = @{'ApplicationTyp' = 'HostedOnDesktop';'Name' = $($BrokerApplicationHashTable.Name);'BrowserName' = $($BrokerApplicationHashTable.BroswerName);'CommandLineExecutable' = $($BrokerApplicationHashTable.CommandLineExecutable)
    # and so on
}

New-BrokerApplication @NewBrokerApplication

You can’t. The Citrix cmdlets can’t handle empty values. Silly Citrix cmdlets! Instead we have to build a string without the parameters that equal $null and pass that over to Invoke-Expression.

$BrokerApplicationHashTable.Name = $BrokerApplicationHashTable.Name.Split('\')[-1]
        $BrokerApplicationHashTable.CommandLineArguments = $BrokerApplicationHashTable.CommandLineArguments -replace '"%\*"','' -replace "`"","'"

        $MakeApp = 'New-BrokerApplication -ApplicationType HostedOnDesktop'
        if($BrokerApplicationHashTable.Name -ne $null){$MakeApp += " -Name `"$($BrokerApplicationHashTable.Name)`""}
        if($BrokerApplicationHashTable.BrowserName -ne $null){$MakeApp += " -BrowserName `"$($BrokerApplicationHashTable.BrowserName)`""}
        if($BrokerApplicationHashTable.CommandLineExecutable -ne $null){$MakeApp += " -CommandLineExecutable `"$($BrokerApplicationHashTable.CommandLineExecutable)`""}
        if($BrokerApplicationHashTable.Description -ne $null){$MakeApp += " -Description `"$($BrokerApplicationHashTable.Description)`""}
        if($BrokerApplicationHashTable.ClientFolder -ne $null){$MakeApp += " -ClientFolder `"$($BrokerApplicationHashTable.ClientFolder)`""}
        if($BrokerApplicationHashTable.CommandLineArguments -ne ""){$MakeApp += " -CommandLineArguments `"$($BrokerApplicationHashTable.CommandLineArguments)`""}
        if($BrokerApplicationHashTable.Enabled -ne $null){$MakeApp += " -Enabled `$$($BrokerApplicationHashTable.Enabled)"}
        if($BrokerApplicationHashTable.WorkingDirectory -ne $null){$MakeApp += " -WorkingDirectory `"$($BrokerApplicationHashTable.WorkingDirectory)`""}
        if($BrokerApplicationHashTable.PublishedName -ne $null){$MakeApp += " -PublishedName `"$($BrokerApplicationHashTable.PublishedName)`""}
        if($BrokerApplicationHashTable.AdminFolderName -ne $null){$MakeApp += " -AdminFolder `"$($BrokerApplicationHashTable.AdminFolderName)`""}
        if($BrokerApplicationHashTable.WaitForPrinterCreation -ne $null){$MakeApp += " -WaitForPrinterCreation `$$($BrokerApplicationHashTable.WaitForPrinterCreation)"}
        if($BrokerApplicationHashTable.StartMenuFolder -ne $null){$MakeApp += " -StartMenuFolder `"$($BrokerApplicationHashTable.StartMenuFolder)`""}
        if($BrokerApplicationHashTable.ShortcutAddedToStartMenu -ne $null){$MakeApp += " -ShortcutAddedToStartMenu `$$($BrokerApplicationHashTable.ShortcutAddedToStartMenu)"}
        if($BrokerApplicationHashTable.ShortcutAddedToDesktop -ne $null){$MakeApp += " -ShortcutAddedToDesktop `$$($BrokerApplicationHashTable.ShortcutAddedToDesktop)"}
        if($BrokerApplicationHashTable.Visible -ne $null){$MakeApp += " -Visible `$$($BrokerApplicationHashTable.Visible)"}
        if($BrokerApplicationHashTable.SecureCmdLineArgumentsEnabled -ne $null){$MakeApp += " -SecureCmdLineArgumentsEnabled `$$($BrokerApplicationHashTable.SecureCmdLineArgumentsEnabled)"}
        if($BrokerApplicationHashTable.MaxTotalInstances -ne $null){$MakeApp += " -MaxTotalInstances $($BrokerApplicationHashTable.MaxTotalInstances)"}
        if($BrokerApplicationHashTable.CpuPriorityLevel -ne $null){$MakeApp += " -CpuPriorityLevel $($BrokerApplicationHashTable.CpuPriorityLevel)"}
        if($BrokerApplicationHashTable.Tags -ne $null){$MakeApp += " -Tags `"$($BrokerApplicationHashTable.Tags)`""}
        if($BrokerApplicationHashTable.MaxPerUserInstances -ne $null){$MakeApp += " -MaxPerUserInstances $($BrokerApplicationHashTable.MaxPerUserInstances)"}

        $MakeApp += " -DesktopGroup `"$DesktopGroup`""

        Write-Verbose "Create app $($BrokerApplicationHashTable.Name) with command $MakeApp"
        Invoke-Expression $MakeApp | Out-Null #we cant use splatting as the cmdlet New-BrokerApplication can not deal with empty values

As stated earlier the icon can’t be configured on app publishing. Therefore, we do it in the next step:

$EncodedIcon = New-BrokerIcon -EncodedIconData "$($BrokerApplicationJSONFile.EncodedIconData)"
Set-BrokerApplication -Name "$OldAppName"  -IconUid $EncodedIcon.Uid

Next: Add users to the published app.

If ($BrokerApplicationHashTable.AssociatedUserNames -ne $null)
        {
            Set-BrokerApplication -Name "$OldAppName" -UserFilterEnabled $true
            $users = $BrokerApplicationHashTable.AssociatedUserNames
            foreach($user in $users)
            {
                Write-Verbose "Add user $user to app $OldAppName"
                Add-BrokerUser -Name $user -Application "$OldAppName"
            }
        }

We’re nearly there. The last step is to configure FTAs. Like with app publishing PowerShell splatting is not supported and we have to go with our string and Invoke-Expression method.

Write-Verbose "Check if app $OldAppName has FTAs configured"
        $AttributNames | where-object {$_ -match 'FTA-'} | ForEach-Object {
            $OldFTA = $BrokerApplicationHashTable.$_

            $MakeFTA = "New-BrokerConfiguredFTA -ApplicationUid $((Get-brokerapplication -Name $OldAppName).Uid)"
            if($OldFTA.ExtensionName -ne $null){$MakeFTA += " -ExtensionName `"$($OldFTA.ExtensionName)`""}
            if($OldFTA.ContentType -ne $null){$MakeFTA += " -ContentType `"$($OldFTA.ContentType)`""}
            if($OldFTA.HandlerOpenArguments -ne $null){$MakeFTA += " -HandlerOpenArguments `"$($OldFTA.HandlerOpenArguments)`""}
            if($OldFTA.HandlerDescription -ne $null){$MakeFTA += " -HandlerDescription `"$($OldFTA.HandlerDescription)`""}
            if($OldFTA.HandlerName -ne $null){$MakeFTA += " -HandlerName `"$($OldFTA.HandlerName)`""}

            Write-Verbose "Create FTA $($OldFTA.ExtensionName) for app $OldAppName with command $MakeFTA"
            Invoke-Expression $MakeFTA | Out-Null #we cant use splatting as the cmdlet New-BrokerConfiguredFTA can not deal with empty values
        }

Done!

Thanks to Clemens Geiler for his help. Thanks to one of my favorite customers for letting me test and implement this in their environment.

Feel free to use the scripts or take the parts you need. Return here every now and then in case  Citrix released new versions of XenDesktop.

Regards,

Dominik

Viewing all 385 articles
Browse latest View live