![Page 1: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/1.jpg)
Automatisierung mit Windows PowerShell V1 / V2
Ralf FeestDirector Enterprise ServicesAddOn (Schweiz) AG, Zürich
![Page 2: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/2.jpg)
Meine Ziele für diesen Vortrag
PowerShell-Anfängerabholen & begeistern
PowerShell-Nutzern Tipps & Tricks sowie einen Ausblick auf die V 2.0 zeigen
Den richtigen Mix aus Theorie & LiveDemo präsentieren
![Page 3: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/3.jpg)
Einführung in PowerShell
Erweiterung der bekannten cmd.exeunterstützt/integriert das .NET Objektmodell
Schnittstellen zu.NET Framework
![Page 4: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/4.jpg)
Voraussetzungen der V 1.0
.NET Framework 2.0Unterstützte Betriebssysteme
Einstieg mit Webcasts, Doku etc. unter www.addon-ag.ch?ad1033
Windows XP Service Pack 2• Installation via Servermanager als „Feature“• Keine Unterstützung innerhalb von ServerCore vor Erscheinen von R2!
Windows Server 2003 Service Pack 1
Windows Vista
Windows Server 2008
![Page 5: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/5.jpg)
Aufbau eines cmdlet
cmdlet (sprich: „commandlet“) = Befehl, der nur innerhalb einer PS ausgeführt werden kannBeispiel:get-Process | select-Object Name,StartTimeVerb
Subjekt
Pipe-Symbol zum objektorientierten
(!) Verkettenzweier cmdlets
AttributeAuswahl
![Page 6: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/6.jpg)
Wo bekomme ich Hilfe?
Übersicht der cmdlets: get-commandListe der Kurzkommandos (Alias): get-alias
z. B. ps steht für Get-Processoder dir steht für Get-Childitem
Syntax eines Befehls abrufen:get-help get-processget-help get-process -detailedget-help get-process -full
![Page 7: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/7.jpg)
Erste Schrittemit der PowerShell
demo
![Page 8: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/8.jpg)
PowerShell Beispiele (1)
Welche Datei-Endungen kommen wie häufig in einer Verzeichnisstruktur vor?Get-ChildItem -recurse | group-object extension |sort -property Count -descending
![Page 9: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/9.jpg)
PowerShell Beispiele (2)
Zugriff auf die RegistryWert aus der Registry abfragenget-itemproperty-path "HKCU:\Software\AddOn\Snake“-name Highscore
Wert in der Registry neu setzenset-itemproperty-path "HKCU:\Software\AddOn\Snake“-name Highscore –value 1740
![Page 10: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/10.jpg)
PSdrives
demo
![Page 11: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/11.jpg)
Neue AD-Schnittstelle ab W2008 R2
Erweiterung für die PowerShellImport-Module ActiveDirectory
Voraussetzungenmind. ein Windows 2008 R2 DC .NET Framework 3.5.1Client: W2008 R2 oder Windows 7
![Page 12: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/12.jpg)
Ein PSdrive für das AD
![Page 13: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/13.jpg)
Mit cd durch's AD browsen…
![Page 14: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/14.jpg)
![Page 15: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/15.jpg)
>70 neue AD-cmdletsAdd-ADComputerServiceAccountAdd-ADDomainControllerPasswordReplicationPolicyAdd-ADFineGrainedPasswordPolicySubjectAdd-ADGroupMemberAdd-ADPrincipalGroupMembershipClear-ADAccountExpirationDisable-ADAccountDisable-ADOptionalFeatureEnable-ADAccountEnable-ADOptionalFeatureGet-ADAccountAuthorizationGroupGet-ADAccountResultantPasswordReplicationPolicyGet-ADComputerGet-ADComputerServiceAccountGet-ADDefaultDomainPasswordPolicyGet-ADDomainGet-ADDomainControllerGet-ADDomainControllerPasswordReplicationPolicyGet-ADDomainControllerPasswordReplicationPolicyUsageGet-ADFineGrainedPasswordPolicyGet-ADFineGrainedPasswordPolicySubjectGet-ADForestGet-ADGroupGet-ADGroupMemberGet-ADObjectGet-ADOptionalFeatureGet-ADOrganizationalUnitGet-ADPrincipalGroupMembershipGet-ADRootDSEGet-ADServiceAccountGet-ADUser
Get-ADUserResultantPasswordPolicyInstall-ADServiceAccountMove-ADDirectoryServerMove-ADDirectoryServerOperationMasterRoleMove-ADObjectNew-ADComputerNew-ADFineGrainedPasswordPolicyNew-ADGroupNew-ADObjectNew-ADOrganizationalUnitNew-ADServiceAccountNew-ADUserRemove-ADComputerRemove-ADComputerServiceAccountRemove-ADDomainControllerPasswordReplicationPolicyRemove-ADFineGrainedPasswordPolicyRemove-ADFineGrainedPasswordPolicySubjectRemove-ADGroupRemove-ADGroupMemberRemove-ADObjectRemove-ADOrganizationalUnitRemove-ADPrincipalGroupMembershipRemove-ADServiceAccountRemove-ADUserRename-ADObjectReset-ADServiceAccountPasswordRestore-ADObjectSearch-ADAccountSet-ADAccountControlSet-ADAccountExpirationSet-ADAccountPassword
Set-ADComputerSet-ADDefaultDomainPasswordPolicySet-ADDomainSet-ADDomainModeSet-ADFineGrainedPasswordPolicySet-ADForestSet-ADForestModeSet-ADGroupSet-ADObjectSet-ADOrganizationalUnitSet-ADServiceAccountSet-ADUserUninstall-ADServiceAccountUnlock-ADAccount
![Page 16: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/16.jpg)
Eigene PSdrive Provider
Kennen Sie noch den subst-Befehl?New-PSDrive -name X –psprovider FileSystem -root c:\scripts New-PSDrive -name Y -psprovider Registry-root HKCU:\Software\Microsoft\Windows\CurrentVersion
SQL Server 2008 mit eigenem PSdrivecd SQLSERVER:\SQL\localhost\DEFAULT\Databases\Sales\TablesGet-ChildItem | where {$_.Schema -eq "Sales"}
3rd Party Provider downloadbarMSDN-Artikel"Creating a Windows PowerShell Drive Provider"
![Page 17: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/17.jpg)
Zugriff auf Ereignisprotokoll
Welche Ereignislogs gibt es?get-eventlog –list
Ereignisliste einesbestimmten Log abfragen:get-eventlog –LogName Application
Die fünf jüngsten Einträge abrufen:get-eventlog –LogName Application –newest 5
Alle Attribute eines einzelnen Eintrags abrufen:get-eventlog -LogName Application |where-object {$_.index -eq 17015} | select-object *
![Page 18: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/18.jpg)
Formatierung der Ausgabe
Ausgabe als Liste format-list (Objekte einzeln untereinander)Ausgabe in Tabelle format-table
Ausgabe in eine DateiCSVGet-ChildItem Brief.pdf | export-csv -path test.csv
XMLGet-ChildItem Brief.pdf | export-Clixml -path test.xml
![Page 19: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/19.jpg)
Befehle mitschneiden
Protokollierungstart-transcript –path <Datei>stop-transcript
Ausgabe einer Datei auf dem Bildschirm
type log.txtget-content log.txt
Druckausgabean den Standarddruckerout-printer –name <Datei>
an einen bestimmten Netzwerkdruckerout-printer -name "\\Server01\Prt-6B Color"
![Page 20: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/20.jpg)
Skripte erstellen und ausführen
Default:Nur signierte PowerShell Skriptedürfen ausgeführt werden!Ausführungsrichtlinie
abfragen: Get-ExecutionPolicy
setzen: Set-ExecutionPolicy -ExecutionPolicy unrestricted(einmal durch Administrator)
Skript aufrufen:
Die Datei "C:\Users\rfeest\Desktop\ralf.ps1" kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist.
![Page 21: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/21.jpg)
Variablen (1)
eingebaute Variablenz. B. $PWD, $HOME, $PROFILE etc.Liste abfragbar mit dir variable: | sort nameUmgebungsvariablen mit dir env: | sort name
Eigene VariablenKeine Deklaration notwendig, einfach verwenden$netto= 270$brutto= $netto * 1.075"Der Rechnungsbetrag beträgt $brutto CHF."
![Page 22: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/22.jpg)
Variablen (2)
Alternative: Variable mit New-Variable anlegen:
new-Variable Mehrwertsteuer 0.19 –option ReadOnly
Typ der Variablen abfragen:$Mehrwertsteuer.GetType()$Mehrwertsteuer.GetType().Name
ohne Dollarzeichen! Wertzuweisun
g
Zusatzoptionen
![Page 23: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/23.jpg)
Schleifen
Beispiel: Quadratzahlen 1, 4, 9, 16, … 100#Skript zur Berechnung von Quadratzahlen$Quadrat=1while ($Quadrat -le 10){ write-host ($Quadrat * $Quadrat) $Quadrat +=1}
while(expression){ …}
for([initializer];[condition];[iterator]{…}
do { …} until/while(expression)
foreach-object(identifier in collection){…}
![Page 24: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/24.jpg)
IE fernsteuern
demo1. $ie= new-object -com "InternetExplorer.Application"2. $ie.Visible= $true 3. $ie.navigate("http://www.denver.com")4. $ie |get-member 5. $ie.StatusText 6. $ie.document | get-member 7. $ie.document.title8. $ie.document.documentElement.innerHTML9. $ie.document.documentElement.innertext10. $ie.document.documentElement.innertext.indexOf("IIS")11. $ie.document.documentElement.innertext.substring(110,7)12. $ie.quit()
![Page 25: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/25.jpg)
WMI und Office
Zugriff per WMIget-Wmiobject -class Win32_LogicalDisk | ft Name,VolumeName,Size,FreeSpace
Zugriff auf Office-ApplikationenBeispiel: Anzahl Mails im Posteingang undAuflisten der Absender aller Mails
$Outlook= new-object -comobject Outlook.Application$Posteingang= $Outlook.Session.GetDefaultFolder(6)write-host $Posteingang.Items.Countforeach ($Mail in $Posteingang.Items) {$Mail.SenderName}
![Page 26: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/26.jpg)
ADSI$u= [ADSI]”LDAP://cn=Ralf
Feest,ou=Training,dc=denver,dc=com”
Abfragen der Beschreibung eines Benutzers$u.description
Ändern der Telefonnummer eines Benutzers$u.TelephoneNumber= “+41 17 4897-11“$u.SetInfo()
Auflisten aller Computerkonten der Domäne $ad=[ADSI]"LDAP://dc=denver,dc=com“$ds= new-object System.DirectoryServices.DirectorySearcher$ds.SearchRoot= $ad$ds.Filter="(objectCategory=computer)"$Ergebnisse= $ds.FindAll()foreach ($PC in $Ergebnisse) {write-host $PC.Properties.name}
.Net Framework
![Page 27: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/27.jpg)
Unterstützung für XML
$MA = [xml]"<Mitarbeiter><Person> <Name>Meier</Name> <Tel>(0123)4567</Tel></Person><Person> <Name>Schuster</Name> <Tel>(0987)6543</Tel></Person></Mitarbeiter>"
write-host $MA.Mitarbeiter.Person[1].Namewrite-host $MA.Mitarbeiter.Person[1].Tel
![Page 28: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/28.jpg)
Exchange Administration
Exchange 2007 Administration per PowerShell
nur auf dem Exchange Server direktper RDP-Session remote
Exchange-Remote-Admin z. B. von VISTA aus:
PowerShell V1 installierenExchange 2007 Administrationstools installieren
![Page 29: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/29.jpg)
Exchange 2007
Benutzer mit Postfach anlegen
$maildb= get-mailboxDatabase$pwd= convertto-securestring
-string ".ServerSummit2008" -asplaintext -force
new-mailbox -name "Hans Dampf" -alias hdampf -organizationalUnit "contoso.com/Training" -userPrincipalName [email protected] -samAccountName hdampf -FirstName Hans -LastName Dampf -password $pwd -ResetPasswordOnNextLogon $false -Database $maildb
![Page 30: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/30.jpg)
Remote Administration mit V1
Remote Admin via WMIBeispiel:
$PCs= $("BBN25", "BBS12", "BBS5")Get-WmiObject Win32_OperatingSystem -computer $PCs
SystemDirectory : C:\Windows\system32Organization :BuildNumber : 6001RegisteredUser : RalfSerialNumber : 89587-014-3171252-71989Version : 6.0.6001
SystemDirectory : C:\WINDOWS\system32Organization : AddOnBuildNumber : 3790RegisteredUser : AddOnSerialNumber : 69713-286-0895857-44217Version : 5.2.3790
SystemDirectory : C:\WINDOWS\system32Organization : addonBuildNumber : 3790RegisteredUser : ctecSerialNumber : 69713-640-1693711-45097Version : 5.2.3790
![Page 31: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/31.jpg)
PowerShell V2
Momentan Beta-/CTP-Status*), connect.microsoft.cominstallierbar auf
ca. 60 neue cmdletsBessere Unterstützung für remote Administration
Windows Management Instrumentation (WMI)Windows Remote Management (WinRM)built-in bei Vista SP1 und Windows 2008,Download für Windows 2003 und XP (in CTP noch nicht unterstützt)
Abfrage von mehreren Systemen oder Ausführung mehrere Aufgaben können mit Hilfe von Background Threads parallelisiert werden!grafische Entwicklungsoberfläche *) Community Technology Preview
XP SP3
Win
Server 2003 SP2
Vista SP1
Windows
2008
Windows
2008 R2
Windo
ws 7
V2 included
![Page 32: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/32.jpg)
Remote PowerShell in V2
WS-Management Protocol
Invoke-Command –computername FileSrv02–scriptblock {get-process}
verschlüsselter
Datentransfer
technische Voraussetzungen:• WinRM Dienst muss laufen• Enable-PSremoting muss einmal aufgerufen werden• Noch keine Unterstützung für Windows 2003 und Vista
bisher (könnte aber kommen)
![Page 33: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/33.jpg)
RunSpaces in V2
Mit RunSpaces (jetzt: PSsessions) können PowerShell cmdlets auf remote Computer initiiert werdentemporärer RunSpace:
Persistenter RunSpace:
Invoke-Command –computername DC –scriptblock {ps winlogon}
$dc= New-PSsession –Computername DC –Credential [email protected] –session $dc –scriptblock {ps winlogon}Invoke-Command –session $dc –scriptblock {get-Psdrive}get-PSsessionremove-PSsession –session $dc
![Page 34: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/34.jpg)
PowerShell V2 – Background Prozesse
Start-job -scriptblock {get-process}führt die Kommandos im Hintergrund ausPrompt kommt sofort zurück
Get-Jobzeigt eine Übersicht der Background-Prozesse anGezielte Stausabfrage eines Prozesses möglich
Wait-Job –id <JobID>gibt einen Prompt zurück, wenn Job fertig
Receive-Job –id <JobID>ermittelt die Ergebnisse der Background-Prozesse
![Page 35: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/35.jpg)
Die PowerShell ISE
![Page 36: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/36.jpg)
PowerShell V 2.0
demo
![Page 37: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/37.jpg)
Your MSDN resourcescheck out these websites, blogs & more!
PresentationsTechDays: www.techdays.chMSDN Events: http://www.microsoft.com/switzerland/msdn/de/presentationfinder.mspxMSDN Webcasts: http://www.microsoft.com/switzerland/msdn/de/finder/default.mspx
MSDN EventsMSDN Events: http://www.microsoft.com/switzerland/msdn/de/events/default.mspxSave the date: Tech•Ed 2009 Europe, 9-13 November 2009, Berlin
MSDN Flash (our by weekly newsletter)Subscribe: http://www.microsoft.com/switzerland/msdn/de/flash.mspx
MSDN Team BlogRSS: http://blogs.msdn.com/swiss_dpe_team/Default.aspx
Developer User Groups & CommunitiesMobile Devices: http://www.pocketpc.ch/Microsoft Solutions User Group Switzerland: www.msugs.ch.NET Managed User Group of Switzerland: www.dotmugs.chFoxPro User Group Switzerland: www.fugs.ch
![Page 38: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/38.jpg)
Your TechNet resourcescheck out these websites, blogs & more!
PresentationsTechDays: www.techdays.ch
TechNet EventsTechNet Events: http://technet.microsoft.com/de-ch/bb291010.aspx Save the date: Tech•Ed 2009 Europe, 9-13 November 2009, Berlin
TechNet Flash (our by weekly newsletter)Subscribe: http://technet.microsoft.com/de-ch/bb898852.aspx
Schweizer IT Professional und TechNet BlogRSS: http://blogs.technet.com/chitpro-de/
IT Professional User Groups & CommunitiesSwissITPro User Group: www.swissitpro.ch NT Anwendergruppe Schweiz: www.nt-ag.ch PASS (Professional Association for SQL Server): www.sqlpass.ch
![Page 39: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/39.jpg)
Save the date for tech·days next year!
7. – 8. April 2010Congress Center Basel
![Page 40: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/40.jpg)
Classic Sponsoring Partners
Media Partner
Premium Sponsoring Partners
![Page 41: Ralf Feest Director Enterprise Services AddOn (Schweiz) AG, Zürich](https://reader035.vdokument.com/reader035/viewer/2022081420/55204d7049795902118c1b50/html5/thumbnails/41.jpg)