In der heutigen Zeit ist die skriptbasierte Verwaltung von Server-Softwarelösungen aus der Arbeitswelt von Administratoren nicht mehr wegzudenken. Immer mehr Produkte und cloudbasierte Dienste lassen sich nur per PowerShell und individuelle Skripte sinnvoll administrieren. Gerade Office 365 ist hier ein unrühmliches Beispiel, da jeder Dienst über eine individuelle PowerShell-Schnittstelle verfügt.
Dieser Umstand hat zur Folge, dass Sie als Administrator oft Skripte zur Verwaltung komplexer Umgebungen einsetzen müssen, die Sie nicht selbst geschrieben haben. Die Skripte werden entweder von externen Dienstleister programmiert oder einfach aus dem Internet heruntergeladen. Hierbei implementiert jedes Skript, im Idealfall, eine eigene Protokollierung der ausgeführten Aktionen.
Die PowerShell-Skripte sind in den meisten Fällen für die individuelle Ausführung durch einen Administrator konzipiert und weniger für die regelmäßige und vollautomatische Ausführung. Als Administrator möchten Sie sich aber um wichtiger Dinge kümmern, als z.B. die Anlage von Benutzerkonten im Active Directory, die E-Mail-Aktivierung von Konten oder die Erstellung von SharePoint Team-Sites.
Sie stehen u.a. vor folgenden Problemen:
Sie kommen mit der Nutzung der Windows Bordmitteln, wie dem Task Scheduler, schon recht weit. Aber Sie werden mir zustimmen, dass dieses Tool nicht gerade die bequemste Art ist, um PowerShell-Skripte sinnvoll und sicher zu automatisieren.
Ein Lösung für dieses Dilemma ist die Nutzung einer Softwarelösung, die uns ein Trennung zwischen dem ausführenden Skript-Kontext und dem Kontext des Anwenders, der ein Skript startet, bietet. Mit einem Rollen- und Berechtigungssystem kann ein Skript, in Abhängigkeit der Rollenzuweisung, unterschiedlich ausgeführt werden.
WIr benötigen also ein Lösung, die uns folgende Funktionen bietet:
Mit ScriptRunner steht eine professionelle Softwarelösung zur Verfügung, die uns all diese Möglichkeiten bietet. ScriptRunner ist ein sehr umfangreiches und leistungsfähiges Produkt zur PowerShell-Automatisierung. Aus meiner Sicht ist das Sicherheitskonzept, das für die Delegierung der Skript-Ausführungen eingesetzt wird, einer der Hauptgründe für das Produkt.
Das folgende Schaubild vereutlicht die Isoliserung von ScriptRunner für die sichere Ausführung von PowerShell-Skripten.
Grafik © ScriptRunner
Die einzelnen Schritte sind:
Die Automatisierung und die wiederkehrende Ausführung führt zu einer Reduzierung der Betriebsrisiken und minimiert kostenintensive manuelle Nacharbeiten. Dies gelingt durch die hohe Reproduzierbarkeit der immer gleichen Aufgaben (Stichwort: Erstellung von Benutzern mit unterschiedlichen Attributen, je nach Fachabteilung). Durch ein Zonenmodell und die strikte Trennung der Ausführungsberechtigungen (Anwender, Automatisiserungsdienst, Skript-Credentials) erreichen Sie ein Maximum an Betriebssicherheit.
Mit solch einer Aufteilung können Sie die Ausführung von Skripten nicht nur an das Helpdesk-Team delegieren, sondern sogar an DV-Ansprechpartner in Fachabtielungen. Die Weboberfläche ist intuitiv bedienbar und führt den Anwender sucher durch alle konfigurierten Eingabe- und Auwahlschritte.
Ab Q1 2019 werden Sie speziell für Exchange Server, Exchange Online und Office 365 entwickelte Skripte zur Nutzung mit ScriptRunner in diesem Blog finden.
Viel Spaß bei der Automatisierung!
Der Start mit Microsoft 365 ist nicht immer so einfach. Im Internet findet man ein Vielzahl an Informationen, weiß jedoch nicht sofort, welche Quellen "gute" Quellen sind und welche eher "nebulösen" Charakter haben.
Die folgenden Links sollen Ihnen den Einstieg in das Thema Microsoft 365 und in die Verwaltung der Clouddienste erleichtern.
Folgende PowerShell Module benötigen Sie für die Verwaltung von Microsoft 365.
# Import des PowerShell-Modules Install-Module -Name AzureAD # Aufbau einer Verbindung zu Azure AD des globalen Office 365 Angebotes Connect-AzureAD # Aufbau einer Verbindung zu Azure AD des globalen Office 365 Angebotes (solange noch verfügbar) Connect-AzureAD -AzureEnvironmentName AzureGermanyCloud
# Direkte Installation über die PowerShell Gallery Install-Module -Name Microsoft.Online.SharePoint.PowerShell # Import des SharePoint Online PowerShell-Modules Import-Module -Name Microsoft.Online.SharePoint.PowerShell # Festlegung des UPN-Anmeldenamen des SharePoint-Administrators $UPN = 'user@varunagroup.de' # Beispiel UPN # Festlegung des Office 365 Tenant-Namen $SPOOrgName = 'VARUNAGROUP' # Beispiel Organisation # Festlegung der Anmeldedaten # Bei NUtzung von MFA muss das App-Kennwort verwendet werden $Credential = Get-Credential -UserName $UPN -Message "Geben Sie Ihr Kennwort ein." # Aufbau der Verbindung zu SharePoint Online OHNE MFA Connect-SPOService -Url "https://$($SPOOrgName)-admin.sharepoint.com" -Credential $Credential
# Aufbau der Verbindung zu SharePoint Online MIT MFA Connect-SPOService -Url "https://$($SPOOrgName)-admin.sharepoint.com"
# Installation des PowerShell-Modules Install-Module -Name ExchangeOnlineManagement # Aufbau einer Verbindung zu Exchange Online # Nach der Verbindung können Sie V2-Cmdlets und ältere EXO-Cmdlets nutzen Connect-ExchangeOnline -UserPrincipalName admin@varunagroup.de
Hinweis
Mit dem PowerShell Cmdlet Connect-EXOPSSession können Sie sich auch in der Azure Cloud Shell mit Exchange Online verbinden und wie gewohnt verwalten. (Mehr erfahren)
# Aufbau der Verbindung zu Exchange Online mit dem EXO MFA PowerShell-Modul V1 # zum globalen Office 365 Angebot Connect-EXOPSSession -UserPrincipalName admin@varunagroup.de # Beispiel UPN # zum deutschen Office 365 Angebot, solange verfügbar Connect-EXOPSSession -UserPrincipalName admin@varunagroup.de -ConnectionUri https://outlook.office.de/PowerShell-LiveID -AzureADAuthorizationEndPointUri https://login.microsoftonline.de/common # Beispiel UPN
# Import des PowerShell-Modules Import-Module -Name MicrosoftTeams # Aufbau einer Verbindung zu Microsoft Teams im globalen Office 365 Angebot Connect-MicrosoftTeams
Der Skype for Business Connector ist abgekündigt. Nutzen Sie das Microsoft Teams PowerShell Modul für alle Konfiguration rund um Teams und Enterprise Voice. Weitere Information finden Sie in diesem Artikel: Move from Skype for Business Online Connector to the Teams PowerShell module
# Verbindung zu Skype for Business Online # Dieses PowerShell-Modul wird auch zur Verwaltung von Microsoft Teams Funktionen verwendet # Import des Skype for Business PowerShell-Modules Import-Module -Name SkypeOnlineConnector # Administrator-Anmeldeinformation $Credential = Get-Credential # Erstellung einer neuen Skype for Business Online Session $SfBSession = New-CsOnlineSession -Credential $userCredential # Import der SfBSession in die aktuelle PowerShell-Session Import-PSSession SfBSession
# Import des Graph PowerShell-Modules Import-Module -Name Microsoft.Graph.Intune # Akzeptieren der administrativen Zugriffsberechtigungen (einmalig notwendig) Connect-MSGraph -AdminConsent # Aufbau einer Verbindung zu Microsoft Graph $UPN = 'admin@varunagroup.de' # Beispiel UPN $password = Read-Host -AsSecureString -Prompt "Enter password for $UPN" $Credential = New-Object System.Management.Automation.PSCredential ($UPN, $password) $Connection = Connect-MSGraph -PSCredential $Credential
Für eine vereinfachte administrative Anmeldung empfehle ich Ihnen das PowerShell-Skript Connect-O365.ps1 von Chris Goosen aus der TechNet Gallery.
# Installation des PowerShell-Modules Install-Module -Name MSCommerce # Import des PowerShell-Modules Import-Module -Name MSCommerce # Aufbau einer Verbindung zu Microsoft Commerce im globalen Office 365 Angebot Connect-MSCommerce
# Installation des PowerShell-Modules Install-Module O365ServiceCommunications # Import des installierten PowerShell-Modules Import-Module O365ServiceCommunications # Aufbau einer neuen PowerShell-Session # Funktioniert nur mit Basic Authentication, nicht mit MFA $cred = Get-Credential $session = New-SCSession -Credential $cred -Locale de-de # Beispiel der Serviceinformationen im zugeordneten Office 365-Mandanten Get-SCServiceInfo -SCSession $session
PowerShell Gallery: https://www.powershellgallery.com/packages/PSServicePrincipal
Projektseite: https://github.com/dgoldman-msft/PSServicePrincipal
Nachfolgend finden Sie eine Empfehlungsliste für Blogs, die ich regelmäßig als Informations- und Lernquelle nutze. Ebenso finden Sie Links zu Webseiten von Office 365-Experten, die interessante Informationen, jenseits von Blogartikeln, bereithalten.
Weitere technische Links finden Sie im Artikel Troubleshooting Links für Exchange, Office 365 und mehr.
Viel Spaß mit Microsoft 365.
Viele Administratoren verzichten auf die digitale Signierung von eigene PowerShell-Skripten. Um solche PowerShell-Skripte in der lokalen IT-Infrastruktur ausführen zu können wird daher die PowerShell-Ausführungsrichtlinie auf Unrestricted konfiguriert. Diese Konfiguration ist ein großes Sicherheitsrisiko für das gesamte Unternehmen.
Unrestricted
Wenn das digitale Zertifikat zur Code-Signierung in Ihrem persönlichen Zertifikatsspeicher hinterlegt ist, ist die Signierung besonders einfach.
Wechseln Sie in einer PowerShell_Session in das Verzeichnis, das die zu signierende PowerShell-Datei enthält und signieren Sie die Datei mit den folgenden Befehlen. In diesem Beispiel wird die Datei MyPowerShellScript.ps1 signiert.
MyPowerShellScript.ps1
# Lesen des Signatur-Zertifikates aus dem persönlichen Zertifikatspeicher # des Anwenders, der die Signierung durchführt $cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert # Lesen eines exportierten Signatur-Zertifikates aus einer PFX-Datei # Wenn der Export mit einem Kennwort geschützt ist, werden Sie nach # dem Kennwort gefragt $cert = Get-PfxCertificate -FilePath C:\SCRIPTS\CERTS\CodeSigningVarunagroup.pfx # Digitale Signierung der Datei MyPowerShellScript.ps1 Set-AuthenticodeSignature -FilePath MyPowerShellScript.ps1 -Certificate $cert
Wissenswert ist, dass das Cmdlet Get-PfxCertificate, im Gegensatz zur Dokumentation bei Microsoft Docs, keinen Parameter -Password verfügt, um das Kennwort als SecureString zu übergeben.
Get-PfxCertificate
-Password
Konfigurieren Sie nach der Signierung Ihrer PowerShell-Skripte die Ausführungsrichtlinie für Ihre Systeme mit Hilfe einer Gruppenrichtlinie.
Viel Spaß mit PowerShell!
The following PowerShell scripts have been published by our Exchange and Office 365 experts to the technical community at TechNet Gallery. Please use the GitHub repositories to report issues or to file feature requests.
Please send comments, wishes, and ideas to support@granikos.eu.
Enjoy!
Need assistance with your Exchange Server Organization? You plan to upgrade your Exchange Server Organization? You plan to migrate to Office 365? Contact us: info@granikos.eu
Update 2020-10-05: Fetch all remote SMTP servers from Exchange receive connector logs added Update 2020-05-25: TechNet Gallery links removed due to end of TechNet Gallery in mid-2020 Update 2020-02-07: Report for enabled client protocols, Exchange Environment Report - v2, Set thumbnailPhoto for AzureAD guest users added Update 2019-05-07: Export mailbox delegates and SMTP forwarding information added Update 2018-09-04: Add remote IP-address ranges to a receive connector added Update 2018-06-16: Manage Master Category List for Shared Mailboxes and Teams added Update 2018-04-29: Convert Word documents using PowerShell and Set Mailbox Item Private Flag added Update 2018-01-24: Create a new Room Mailbox with Security Groups added Update 2017-11-11: Export all user mailbox permissions added Update 2017-09-22: Remove Out-Of-Office rules from user mailbox added Update 2017-05-20: Parse email messages content for further processing and Update OWA vDir config across multiple servers added Update 2017-03-18: Fetch recently created public folders and Clear Private Flag on Mailbox Messages added Update 2017-02-22: Remove Orphaned HealthMailbox and SystemMailbox Accounts from MESO Container added Update 2017-02-17: Test Office 365 Domain Availability added Update 2017-02-13: Connect to Exchange Server 2013+ using remote PowerShell added Update 2017-02-07: Create Exchange internal/external Url based certificate requests, Create a scheduled task for Exchange Server 2013 added Update 2017-01-24: Gather Exchange Configuration Data added Update 2017-01-05: Export Messages from Transport Queue added Update 2016-11-29: Clean legacy public folder ACL added, Scripts categorized Update 2016-11-28: Add multiple legacy public folder replicas added Update 2016-08-18: Simple import of multiple PST files for a single user added Update 2016-07-28: Change IIS Log File settings Github Url added, Create a new Team Mailbox with Security Groups added Update 2016-06-04: GlobalFunctions added Update 2015-06-18: Copy-ReceiveConnector updated Update 2015-06-01: Exchange 2010 Public Folder Replication Report (UTF8 support) Update 2015-05-21: Copy anti-virus pattern to Exchange 2010/Exchange 2013 servers added Update 2014-12-10: Copy a receive connector from one Exchange Server to multiple Exchange Servers added
Am 12. Februar fand das erste Treffen der neu gegründeten PowerShell User Group Berlin (PSUGB) in den Räumlichkeiten der commehr GmbH statt. Die neue User Group wurde von Evgenij Smirnov ins Leben gerufen. Damit hat auch die Hauptstadt endlich eine User Group, in der sich PowerShell Begeisterte regelmäßig treffen und austauschen können. Evgenij ist im Community-Leben Berlins nicht unbekannt, da er auch die Windows Server User Group (WSUG-B) und die Exchange User Group (EXUSG) führt.
Die PSUGB trifft sich in der Regel alle zwei Monate. Bei den gibt es immer einen Themenvortrag rund um PowerShell und den festen Tagesordnungspunkt "Bring Your Own Script". Bei BYOS kann jederzeit ein persönliches Power-Skript vorgestellt werden, das man schon immer gerne einmal mit der Community teilen wollte oder zu dem man Tipps aus der Community benötigt.
Auf der Webseite der PSUGB findest du weitere Infos, wie z.B. die Präsentationen, vergangenen Treffen.
Die Community und die PowerShell User Group Berlin lebt vom Mitmachen. Einfach bei Meetup zum nächsten User Group Treffen anmelden.
Die PSUGB ist natürlich auch bei Twitter aktiv: @psugbde. Es lohnt sich, dem Account zu folgen.
Viel Spaß in der PowerShell-Community!
Uninstalling Exchange Server 2013 will fail, if the PowerShell MachinePolicy or UserPolicy is set by GPO.
You will receive an error message referencing Microsoft KB article 981474, which refers primarily to Exchange Server 2010.
The following PowerShell command removes the GPO setting.
Set-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell -Name ExecutionPolicy -Value ""
After setting the ExecutionPolicy attribute to an empty string, Exchange Server 2013 can be uninstalled successfully.
You can use PowerShell to manage your local certificate store.
The default PowerShell Get-ChildItem cmdlet allows for accessing the local certificate store. But you should start your PowerShell shell windows as an administrator, as access might be restricted by GPO settings.
Get-ChildItem -Path Cert:\LocalMachine Name : TrustedPublisher Name : ClientAuthIssuer Name : Remote Desktop Name : Root Name : TrustedDevices Name : SPC Name : CA Name : REQUEST Name : AuthRoot Name : WebHosting Name : TrustedPeople Name : My Name : SmartCardRoot Name : Trust Name : Disallowed
Get-ChildItem -Path Cert:\LocalMachine\My Directory: Microsoft.PowerShell.Security\Certificate::LocalMachine\My Thumbprint Subject ---------- ------- EC225A0183DC64D864C8BEA1477822858FCEC767 CN=WMSvc-EXSRV02 E2BC29B1445FD267E5A2823591A5221D67D0D94F CN=Microsoft Exchange Server Auth Certificate D8EE794A39A8E04BE32A1E8BED93A3C46D15E0EF CN=EXSRV02 60246A87C12BEB365E7B4044C926587590A3D7B6 CN=mobile.mcmemail.de, O=mcmemail, C=DE 5F103D6C61BF57D86DB4AAA05597B0D1E8155884 CN=EXSRV02.mcmemail.de, CN=EXSRV02, CN=127.0.0.1, CN=localhost, O=Trend Micro.
The example shows a self-signed certificate of a Trend Micro ScanMail for Exchange setup.
$cert = Get-ChildItem -Path Cert:\LocalMachine\My\5F103D6C61BF57D86DB4AAA05597B0D1E8155884 $cert | fl Subject : CN=EXSRV02.mcmemail.de, CN=EXSRV02, CN=127.0.0.1, CN=localhost, O=Trend Micro ScanMail for Microsoft Exchange Issuer : CN=EXSRV02.mcmemail.de, CN=EXSRV02, CN=127.0.0.1, CN=localhost, O=Trend Micro ScanMail for Microsoft Exchange Thumbprint : 5F103D6C61BF57D86DB4AAA05597B0D1E8155884 FriendlyName : NotBefore : 17.11.2014 00:00:00 NotAfter : 16.11.2017 00:00:00 Extensions : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid}
A certificate issued by an Enterprise CA looks like this
$cert = Get-ChildItem -Path Cert:\LocalMachine\My\60246A87C12BEB365E7B4044C926587590A3D7B6 $cert | fl Subject : CN=mobile.mcmemail.de, O=mcmemail, C=DE Issuer : CN=mcmemail-DC01-CA, DC=mcmemail, DC=de Thumbprint : 60246A87C12BEB365E7B4044C926587590A3D7B6 FriendlyName : mcmemail Exchange Server 2013 Certificate NotBefore : 28.08.2014 15:14:04 NotAfter : 28.08.2015 15:24:04 Extensions : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, System.Security.Cryptography.Oid...}
$cert | Export-Certificate -FilePath C:\tmp\cert1.p7b -Type p7b Directory: C:\tmp Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 23.12.2014 11:56 1380 cert1.p7b
$certarray = @() $certarray += $cert $cert = Get-ChildItem -Path Cert:\LocalMachine\My\D8EE794A39A8E04BE32A1E8BED93A3C46D15E0EF $certarray += $cert $certarray Directory: Microsoft.PowerShell.Security\Certificate::LocalMachine\My Thumbprint Subject ---------- ------- 60246A87C12BEB365E7B4044C926587590A3D7B6 CN=mobile.mcmemail.de, O=mcmemail, C=DE D8EE794A39A8E04BE32A1E8BED93A3C46D15E0EF CN=EXSRV02 $certarray | Export-Certificate -FilePath c:\tmp\certs.sst -Type SST Directory: C:\tmp Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 23.12.2014 11:58 3056 certs.sst
Enjoy working with certificates.
Do you plan to upgrade to Exchange Server 2013? Do you wonder what the benefits of Office 365 are? Contact us at info@granikos.eu