<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Adfs on Janik von Rotz</title>
    <link>https://janikvonrotz.ch/tags/adfs/</link>
    <description>Recent content in Adfs on Janik von Rotz</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Wed, 14 May 2014 07:03:29 +0000</lastBuildDate>
    <atom:link href="https://janikvonrotz.ch/tags/adfs/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Configure hybrid search results from SharePoint Online in SharePoint on-premise</title>
      <link>https://janikvonrotz.ch/2014/05/14/configure-hybrid-search-results-from-sharepoint-online-in-sharepoint-on-premise/</link>
      <pubDate>Wed, 14 May 2014 07:03:29 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2014/05/14/configure-hybrid-search-results-from-sharepoint-online-in-sharepoint-on-premise/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post of is part of my &lt;a href=&#34;https://janikvonrotz.ch/projects/install-sharepoint-2013-three-tier-farm/&#34;&gt;Install SharePoint 2013 Three-tier Farm&lt;/a&gt; project.&lt;/em&gt;&#xA;&lt;em&gt;Get the latest version of this article here: &lt;a href=&#34;https://gist.github.com/10871110&#34;&gt;https://gist.github.com/10871110&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;In this post I&amp;rsquo;ll show you how to get search results from your SharePoint Online in your SharePoint 2013 on-premise search center.&#xA;&lt;img src=&#34;https://janikvonrotz.ch/wp-content/uploads/2014/04/SharePoint-Hybrid-Outbound-search.jpg&#34; alt=&#34;SharePoint Hybrid Outbound search&#34;&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;requirements&#34;&gt;Requirements&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;User synchronisation ActiveDirectory to Office 365 with DirSync&lt;/li&gt;&#xA;&lt;li&gt;DirSync password sync or ADFS SSO&lt;/li&gt;&#xA;&lt;li&gt;SharePoint Online&lt;/li&gt;&#xA;&lt;li&gt;SharePoint 2013 on-premise&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Enterprise Search service&lt;/li&gt;&#xA;&lt;li&gt;SharePoint Online Management Shell&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;instructions&#34;&gt;Instructions&lt;/h1&gt;&#xA;&lt;p&gt;All configuration will be done either in the Search Administration of the Central Administration or in the PowerShell console of your on-premise SharePoint 2013 server.&lt;/p&gt;&#xA;&lt;h1 id=&#34;set-up-sever-to-server-trust&#34;&gt;Set up Sever to Server Trust&lt;/h1&gt;&#xA;&lt;h2 id=&#34;export-certificates&#34;&gt;Export certificates&lt;/h2&gt;&#xA;&lt;p&gt;To create a server to server trust we need two certificates.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;[certificate name].pfx&lt;/strong&gt;: In order to replace the STS certificate, the certificate is needed in Personal Information Exchange (PFX) format including the private key.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;[certificate name].cer&lt;/strong&gt;: In order to set up a trust with Office 365 and Windows Azure ACS, the certificate is needed in CER Base64 format.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;First launch the &lt;strong&gt;Internet Information Services (IIS) Manager&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Select your &lt;strong&gt;SharePoint web server&lt;/strong&gt; and double-click &lt;strong&gt;Server Certificates&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;In the &lt;strong&gt;Actions&lt;/strong&gt; pane, click &lt;strong&gt;Create Self-Signed Certificate&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Enter a name for the certificate and save it with &lt;strong&gt;OK&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;To export the new certificate in the Pfx format select it and click &lt;strong&gt;Export&lt;/strong&gt; in the &lt;strong&gt;Actions&lt;/strong&gt; pane&lt;/li&gt;&#xA;&lt;li&gt;Fill the fields and click &lt;strong&gt;OK&lt;/strong&gt;&#xA;Export to: &lt;code&gt;C:\[certificate name].pfx&lt;/code&gt;&#xA;Password: &lt;code&gt;[password]&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Also we need to export the certificate in the CER Base64 format. For that purpose make a &lt;strong&gt;right-click&lt;/strong&gt; on the certificate and click on &lt;strong&gt;View&amp;hellip;&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Click the &lt;strong&gt;Details&lt;/strong&gt; tab and then click &lt;strong&gt;Copy to File&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;On the Welcome to the Certificate Export Wizard page, click &lt;strong&gt;Next&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;On the Export Private Key page, click &lt;strong&gt;Next&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;On the Export File Format page, click &lt;strong&gt;Base-64 encoded X.509&lt;/strong&gt; (.CER), and then click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;As file name enter &lt;code&gt;C:\[certificate name].cer&lt;/code&gt; and then click &lt;strong&gt;Next&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Finish the export&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;import-the-new-sts-sharepoint-token-service-certificate&#34;&gt;Import the new STS (SharePoint Token Service) certificate&lt;/h2&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s update the certificate on the STS. Configure and run the PowerShell script below on your SharePoint server.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;-not&lt;/span&gt; (Get-PSSnapin &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Microsoft.SharePoint.PowerShell&amp;#34;&lt;/span&gt; -ErrorAction SilentlyContinue)){Add-PSSnapin &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Microsoft.SharePoint.PowerShell&amp;#34;&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# set the cerficates paths and password&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$PfxCertPath = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c:\[certificate name].pfx&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$PfxCertPassword = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[password]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$X64CertPath = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c:\[certificate name].cer&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# get the encrypted pfx certificate object&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$PfxCert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $PfxCertPath, $PfxCertPassword, &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# import it&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Set-SPSecurityTokenServiceConfig -ImportSigningCertificate $PfxCert&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Type &lt;strong&gt;Yes&lt;/strong&gt; when prompted with the following message.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;You are about to change the signing certificate for the Security Token Service. Changing the certificate to an invalid, inaccessible or non-existent certificate will cause your SharePoint installation to stop functioning. Refer to the following article for instructions on how to change this certificate: &lt;a href=&#34;http://go.microsoft.com/fwlink/?LinkID=178475&#34;&gt;http://go.microsoft.com/fwlink/?LinkID=178475&lt;/a&gt;. Are you sure, you want to continue?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Restart IIS so STS picks up the new certificate.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;amp; iisreset&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;amp; net stop SPTimerV4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;amp; net start SPTimerV4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now validate the certificate replacement by running several PowerShell commands and compare their outputs.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# set the cerficates paths and password&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$PfxCertPath = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c:\[certificate name].pfx&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$PfxCertPassword = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[password]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# get the encrypted pfx certificate object&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $PfxCertPath, $PfxCertPassword, &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# compare the output above with this output&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(Get-SPSecurityTokenServiceConfig).LocalLoginProvider.SigningCertificate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;establish-the-server-to-server-trust&#34;&gt;Establish the server to server trust&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;-not&lt;/span&gt; (Get-PSSnapin &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Microsoft.SharePoint.PowerShell&amp;#34;&lt;/span&gt; -ErrorAction SilentlyContinue)){Add-PSSnapin &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Microsoft.SharePoint.PowerShell&amp;#34;&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Import-Module MSOnline &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Import-Module MSOnlineExtended&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# set the cerficates paths and password&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$PfxCertPath = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c:\[certificate name].pfx&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$PfxCertPassword = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[password]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$X64CertPath = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c:\[certificate name].cer&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# set the onpremise domain that you added to Office 365&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$SPCN = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sharepoint.domain.com&amp;#34;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# your onpremise SharePoint site url&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$SPSite=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://sharepoint&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# don&amp;#39;t change this value&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$SPOAppID=&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;00000003-0000-0ff1-ce00-000000000000&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# get the encrypted pfx certificate object&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$PfxCert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $PfxCertPath, $PfxCertPassword, &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# get the raw data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$PfxCertBin = $PfxCert.GetRawCertData()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# create a new certificate object&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$X64Cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# import the base 64 encoded certificate&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$X64Cert.Import($X64CertPath)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# get the raw data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$X64CertBin = $X64Cert.GetRawCertData()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# save base 64 string in variable&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$CredValue = [&lt;span style=&#34;color:#66d9ef&#34;&gt;System.Convert&lt;/span&gt;]::ToBase64String($X64CertBin)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# connect to office 3656&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Connect-MsolService&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# register the on-premise STS as service principal in Office 365&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# add a new service principal&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;New-MsolServicePrincipalCredential -AppPrincipalId $SPOAppID -Type asymmetric -Usage Verify -Value $CredValue&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$MsolServicePrincipal = Get-MsolServicePrincipal -AppPrincipalId $SPOAppID&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$SPServicePrincipalNames = $MsolServicePrincipal.ServicePrincipalNames&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$SPServicePrincipalNames.Add(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$SPOAppID&lt;span style=&#34;color:#e6db74&#34;&gt;/&lt;/span&gt;$SPCN&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Set-MsolServicePrincipal -AppPrincipalId $SPOAppID -ServicePrincipalNames $SPServicePrincipalNames&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# get the online name identifier&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$MsolCompanyInformationID = (Get-MsolCompanyInformation).ObjectID&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$MsolServicePrincipalID = (Get-MsolServicePrincipal -ServicePrincipalName $SPOAppID).ObjectID&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$MsolNameIdentifier = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$MsolServicePrincipalID&lt;span style=&#34;color:#e6db74&#34;&gt;@&lt;/span&gt;$MsolCompanyInformationID&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# establish the trust from on-premise with ACS (Azure Control Service)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# add a new authenticatio realm&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$SPSite = Get-SPSite $SPSite&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$SPAppPrincipal = Register-SPAppPrincipal -site $SPSite.rootweb -nameIdentifier $MsolNameIdentifier -displayName &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SharePoint Online&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Set-SPAuthenticationRealm -realm $MsolServicePrincipalID&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# register the ACS application proxy and token issuer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;New-SPAzureAccessControlServiceApplicationProxy -Name &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ACS&amp;#34;&lt;/span&gt; -MetadataServiceEndpointUri &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://accounts.accesscontrol.windows.net/metadata/json/1/&amp;#34;&lt;/span&gt; -DefaultProxyGroup&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;New-SPTrustedSecurityTokenIssuer -MetadataEndpoint &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://accounts.accesscontrol.windows.net/metadata/json/1/&amp;#34;&lt;/span&gt; -IsTrustBroker -Name &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ACS&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;add-a-new-result-source&#34;&gt;Add a new result source&lt;/h1&gt;&#xA;&lt;p&gt;To get search results from SharePoint Online we have to add a new result source. Run the following script in a PowerShell ISE session on your SharePoint 2013 on-premise server.&#xA;Don&amp;rsquo;t forget to update the settings region&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;-not&lt;/span&gt; (Get-PSSnapin &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Microsoft.SharePoint.PowerShell&amp;#34;&lt;/span&gt; -ErrorAction SilentlyContinue)){Add-PSSnapin &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Microsoft.SharePoint.PowerShell&amp;#34;&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# region settings &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$RemoteSharePointUrl = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://[example].sharepoint.com&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ResultSourceName = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SharePoint Online&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$QueryTransform = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{searchTerms}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$Provier = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SharePoint-Remoteanbieter&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# region settings end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$SPEnterpriseSearchServiceApplication = Get-SPEnterpriseSearchServiceApplication&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$FederationManager = New-Object Microsoft.Office.Server.Search.Administration.Query.FederationManager($SPEnterpriseSearchServiceApplication)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$SPEnterpriseSearchOwner = Get-SPEnterpriseSearchOwner -Level Ssa  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ResultSource = $FederationManager.GetSourceByName($ResultSourceName, $SPEnterpriseSearchOwner)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(!$ResultSource){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Write-Host &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Result source does not exist. Creating...&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    $ResultSource = $FederationManager.CreateSource($SPEnterpriseSearchOwner)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ResultSource.Name = $ResultSourceName&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ResultSource.ProviderId = $FederationManager.ListProviders()[$Provier].Id&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ResultSource.ConnectionUrlTemplate = $RemoteSharePointUrl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ResultSource.CreateQueryTransform($QueryTransform)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ResultSource.Commit()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;add-a-new-query-rule&#34;&gt;Add a new query rule&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;In the Search Administration click on &lt;strong&gt;Query Rules&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Select &lt;strong&gt;Local SharePoint&lt;/strong&gt; as Result Source&lt;/li&gt;&#xA;&lt;li&gt;Click &lt;strong&gt;New Query Rule&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Enter a Rule name f.g. Search results from SharePoint Online&lt;/li&gt;&#xA;&lt;li&gt;Expand the &lt;strong&gt;Context&lt;/strong&gt; section&lt;/li&gt;&#xA;&lt;li&gt;Under &lt;strong&gt;Query is performed on these sources&lt;/strong&gt; click on &lt;strong&gt;Add Source&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Select your SharePoint Online result source&lt;/li&gt;&#xA;&lt;li&gt;In the &lt;strong&gt;Query Conditions&lt;/strong&gt; section click on &lt;strong&gt;Remove Condition&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;In the &lt;strong&gt;Actions&lt;/strong&gt; section click on &lt;strong&gt;Add Result Block&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;As &lt;strong&gt;title&lt;/strong&gt; enter &lt;strong&gt;Results for &amp;ldquo;{subjectTerms}&amp;rdquo; from SharePoint Online&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;In the &lt;strong&gt;Search this Source&lt;/strong&gt; dropdown select your SharePoint Online result source&lt;/li&gt;&#xA;&lt;li&gt;Select 3 in the &lt;strong&gt;Items&lt;/strong&gt; dropdown&lt;/li&gt;&#xA;&lt;li&gt;Expand the &lt;strong&gt;Settings&lt;/strong&gt; section and select &lt;strong&gt;&amp;ldquo;More&amp;rdquo; link goes to the following URL&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;In the box below enter this Url &lt;strong&gt;https://[example].sharepoint.com/search/pages/results.aspx?k={subjectTerms}&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Select &lt;strong&gt;This block is always shown above core results&lt;/strong&gt; and click the OK button&lt;/li&gt;&#xA;&lt;li&gt;Save the new query rule&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h1 id=&#34;source&#34;&gt;Source&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://technet.microsoft.com/en-us/library/dn197173.aspx&#34;&gt;Display hybrid search results in SharePoint Server 2013&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;http://blogs.msdn.com/b/spses/archive/2013/10/22/office-365-configure-hybrid-search-with-directory-synchronization.aspx&#34;&gt;Office 365-Configure Hybrid Search with Directory Synchronization –Password Sync&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;http://blogs.msdn.com/b/spses/archive/2014/01/05/office-365-configure-hybrid-search-with-directory-synchronization-password-sync-part2.aspx&#34;&gt;Office 365-Configure Hybrid Search with Directory Synchronization –Password Sync –Part2&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ADFS Login Customization</title>
      <link>https://janikvonrotz.ch/2013/10/18/adfs-login-customization/</link>
      <pubDate>Fri, 18 Oct 2013 13:04:41 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2013/10/18/adfs-login-customization/</guid>
      <description>&lt;p&gt;The purpose of this article is to show the intention and implemention of the most common modifications for the ADFS login page.&lt;/p&gt;&#xA;&lt;p&gt;Out of the box the login form should look like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://janikvonrotz.ch/wp-content/uploads/2013/10/ADFS-Login-page.png&#34;&gt;&lt;img src=&#34;https://janikvonrotz.ch/wp-content/uploads/2013/10/ADFS-Login-page.png&#34; alt=&#34;ADFS Login page&#34;&gt;&lt;/a&gt;The f.e. is by default the page url, this can confuse the user, due they expect something like &amp;ldquo;your login&amp;rdquo; or &amp;ldquo;Office365 Login&amp;rdquo;.&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;To add a logo you simply edit the &lt;!-- raw HTML omitted --&gt;web.config&lt;!-- raw HTML omitted --&gt; file.&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&#xA;&amp;lt;!--&#xA;&amp;lt;add key=”logo” value=”logo.png” /&amp;gt;&#xA;--&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;This label is part of the page&amp;rsquo;s localization, that means you have to edit the language resource file.&lt;/p&gt;&#xA;&lt;p&gt;The localization files are stored under &lt;!-- raw HTML omitted --&gt;App_GlobalResources&lt;!-- raw HTML omitted --&gt; there you&amp;rsquo;ll find one file for every language CommonResources.&lt;!-- raw HTML omitted --&gt;en&lt;!-- raw HTML omitted --&gt;.resx.&lt;/p&gt;&#xA;&lt;p&gt;Edit the file of your language an replace the &amp;ldquo;hint&amp;rdquo; with you definition.&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;In the root folder of the login page in the folder  &lt;!-- raw HTML omitted --&gt;MasterPages&lt;!-- raw HTML omitted --&gt; is a file named &lt;!-- raw HTML omitted --&gt;MasterPage.master&lt;!-- raw HTML omitted --&gt;. This file defines the look of the login page. To hide the title just comment this part out.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;!--&#xA;&amp;lt;div class=&amp;#34;GroupLargeMargin&amp;#34;&amp;gt;&#xA;&amp;lt;div class=&amp;#34;TextSizeXLarge&amp;#34;&amp;gt;&#xA;&amp;lt;asp:Label ID=&amp;#34;STSLabel&amp;#34; runat&amp;#34;server&amp;#34;&amp;gt;&amp;lt;/asp:Label&amp;gt;&#xA;&amp;lt;/div&amp;gt;&#xA;&amp;lt;/div&amp;gt;&#xA;--&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;With Office365 and ADFS it&amp;rsquo;s possible to login from the &lt;!-- raw HTML omitted --&gt;microsoft Office365 login page&lt;!-- raw HTML omitted --&gt; or via a&lt;!-- raw HTML omitted --&gt; smart link&lt;!-- raw HTML omitted --&gt; to get directly redirected to the ADFS login page.&lt;/p&gt;&#xA;&lt;p&gt;The Office365 login page will process the username you enter and if it&amp;rsquo;s a on premise user you&amp;rsquo;ll get redirected to the ADFS login page. By default the ADFS login page doesn&amp;rsquo;t care about the username you&amp;rsquo;ve provided at the Office365 login page. To populate the username into the login field the ADFS page has be modified like this:&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;Process username from the url parameter.&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&#xA;public void Application_BeginRequest()&#xA;{&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&#xA;HttpRequest request = HttpContext.Current.Request;&#xA;HttpResponse response = HttpContext.Current.Response;&#xA;&#xA;if ( !String.IsNullOrEmpty( request.Params[&amp;#34;username&amp;#34;] ) )&#xA;{&#xA;     HttpCookie cookie = new HttpCookie( &amp;#34;Office365Username&amp;#34;, request.Params[&amp;#34;username&amp;#34;] );&#xA;     cookie.Expires = DateTime.UtcNow.AddMinutes( 10 );&#xA;     Response.Cookies.Add( cookie );&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;Add the username parameter to the username box.&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&#xA;using System;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Paste the following code:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&#xA;using System.Web;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Find the following and set your cursor to the next line down:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&#xA;protected void Page_Load( object sender, EventArgs e )&#xA;{&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Paste the following code:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&#xA;HttpCookie cookie = Context.Request.Cookies.Get( &amp;#34;Office365Username&amp;#34; );&#xA;&#xA;if ( null != cookie &amp;amp;&amp;amp; !String.IsNullOrEmpty( cookie.Value ) )&#xA;{&#xA;     UsernameTextBox.Text = cookie.Value;&#xA;     cookie.Expires = DateTime.UtcNow.AddDays( -1 );&#xA;     cookie.Value = &amp;#34;&amp;#34;;&#xA;     Context.Response.Cookies.Add( cookie );&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Save and Close FormsSignIn.aspx.cs&lt;/p&gt;</description>
    </item>
    <item>
      <title>Handling user password change and expiration issues with Office365 and ADFS – Part 2</title>
      <link>https://janikvonrotz.ch/2013/09/23/handling-user-password-change-and-expiration-issues-withoffice365-and-adfs-part-2/</link>
      <pubDate>Mon, 23 Sep 2013 08:50:49 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2013/09/23/handling-user-password-change-and-expiration-issues-withoffice365-and-adfs-part-2/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://janikvonrotz.ch/2013/08/08/handling-user-password-change-and-expiration-issues-with-office365-and-adfs-part-1/&#34;&gt;https://janikvonrotz.ch/2013/08/08/handling-user-password-change-and-expiration-issues-with-office365-and-adfs-part-1/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is part two of my experience in handling the password change office365 architecture issue.&lt;/p&gt;&#xA;&lt;p&gt;Last time I&amp;rsquo;ve built a simple script  to notificate the users about the status of their passwords. In the mean time we (me and another employ of the &amp;ldquo;&lt;!-- raw HTML omitted --&gt;vbl &lt;!-- raw HTML omitted --&gt;Informatik&amp;rdquo;) built a simple website for the office365 users to change their password.&lt;/p&gt;&#xA;&lt;p&gt;The whole project is now available on &lt;!-- raw HTML omitted --&gt;&lt;a href=&#34;https://codeberg.org/janikvonrotz/ActiveDirectory-Password-Change&#34;&gt;https://codeberg.org/janikvonrotz/ActiveDirectory-Password-Change&lt;/a&gt;&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;&#xA;&lt;p&gt;Checkout the instructions in the readme fileto set up the password change website.&lt;/p&gt;&#xA;&lt;p&gt;If you have setup the website already I recommend you to include the site with a sharepoint webpart here&amp;rsquo;s an example:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://janikvonrotz.ch/wp-content/uploads/2013/09/Passwortwechsel.png&#34; alt=&#34;Passwortwechsel&#34;&gt;&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;</description>
    </item>
    <item>
      <title>Office365 ADFS Chrome Login fails</title>
      <link>https://janikvonrotz.ch/2013/09/10/office365-adfs-chrome-login-fails/</link>
      <pubDate>Tue, 10 Sep 2013 13:49:40 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2013/09/10/office365-adfs-chrome-login-fails/</guid>
      <description>&lt;p&gt;Today I experienced an exotic behaviour, a client couldn&amp;rsquo;t access his Office365 page due he wasn&amp;rsquo;t able to login on the ADFS authentication prompt.&lt;/p&gt;&#xA;&lt;p&gt;After googling and binging (just kidding, &lt;!-- raw HTML omitted --&gt;NERD&lt;!-- raw HTML omitted --&gt;) I found a simple &lt;!-- raw HTML omitted --&gt;solution&lt;!-- raw HTML omitted --&gt;.&lt;/p&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_498&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;714&amp;rdquo;]&lt;!-- raw HTML omitted --&gt;&lt;img src=&#34;https://janikvonrotz.ch/wp-content/uploads/2013/09/2013-09-10-13_24_09-Default-vblw2k12adfs1-Remotedesktopverbindung.png&#34; alt=&#34;adfs disable extended protection&#34;&gt;&lt;!-- raw HTML omitted --&gt; To turn Extended Protection off, on the AD FS server, launch IIS Manager, then, on the left side tree view, access Sites -&amp;gt; Default Web Site -&amp;gt; adfs -&amp;gt; ls. Once you’ve selected the &amp;ldquo;/adfs/ls&amp;rdquo; folder, double-click the Authentication icon, then right-click Windows Authentication and select Advanced Settings… On the Advanced Settings dialog, choose Off for Extended Protection.[/caption]&lt;/p&gt;&#xA;&lt;p&gt; &lt;/p&gt;&#xA;&lt;p&gt;Disabling the extended windows authentication protection solved this issue, but I have to admit I&amp;rsquo;m not quite sure about services depending on this settings, maybe you&amp;rsquo;ll experience some other errors related to the ADFS service.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Manage ActiveDirectory Distribution Groups</title>
      <link>https://janikvonrotz.ch/2013/08/27/manage-activedirectory-distribution-groups/</link>
      <pubDate>Tue, 27 Aug 2013 12:39:11 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2013/08/27/manage-activedirectory-distribution-groups/</guid>
      <description>&lt;p&gt;With Office365 connected with an ADFS you have to redesgin your Exchange distribution groups. ADFS only syncs distribution groups that have these definitions:&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;My idea was simple, I&amp;rsquo;m developing a script that creates for every OU and child OU I&amp;rsquo;m chosing in the ActiveDirectory structure a distribution list containing the users of the chosen OU recursively.&lt;/p&gt;&#xA;&lt;p&gt;While developing this I&amp;rsquo;ve added some cool features, in addition you can:&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;By default the script will only add enabled users with an email address.&lt;/p&gt;&#xA;&lt;p&gt;This script makes use of the &lt;!-- raw HTML omitted --&gt;PowerShell Profile&lt;!-- raw HTML omitted --&gt; environment, f.e. the function &lt;code&gt;Send-PPErrorReport&lt;/code&gt; sends an error report per email when the script fails or produces problems.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;$Metadata = @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;    Title = &amp;#34;New ActiveDirectory Distribution Groups&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;    Filename = &amp;#34;New-ADDistributionGroups.ps1&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;    Description = &amp;#34;Create or update ActiveDirectory distribution groups&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;    Tags = &amp;#34;powershell, activedirectory, distribution, groups, create, update&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;    Project = &amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;    Author = &amp;#34;Janik von Rotz&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;    AuthorContact = &amp;#34;https://janikvonrotz.ch&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;    CreateDate = &amp;#34;2013-08-27&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;    LastEditDate = &amp;#34;2013-09-30&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;    Url = &amp;#34;https://gist.github.com/6352037&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;    Version = &amp;#34;1.1.0&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;    License = @&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Switzerland License.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;To view a copy of this license, visit https://creativecommons.org/licenses/by-sa/3.0/ch/ or&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&amp;#39;@&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#--------------------------------------------------#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# modules&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#--------------------------------------------------#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Import-Module ActiveDirectory&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# set OUs where the distributions groups should be enabled&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$OUs = @(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;OU=Betrieb,OU=vblusers2,DC=vbl,DC=ch&amp;#34;&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;OU=Direktion,OU=vblusers2,DC=vbl,DC=ch&amp;#34;&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;OU=Finanzen,OU=vblusers2,DC=vbl,DC=ch&amp;#34;&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;OU=Personal,OU=vblusers2,DC=vbl,DC=ch&amp;#34;&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;OU=Technik,OU=vblusers2,DC=vbl,DC=ch&amp;#34;&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# list of users to exclude in distribution groups&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ExcludeUsers = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;abascan&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ba test&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ba-service&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# list of distribution groups to exclude&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ExcludeOUs = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Verwaltungsrat&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# special configuration to handle special&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$Configs = @(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GL&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Geschäftsleitung Gruppe&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GL erw&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Erweiterte Geschäftsleitung Gruppe&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Alle&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Technik&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Betrieb&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Personal&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Finanzen&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GL&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Kommunikation&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sekretariat&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Alle mit Arbeitsplatz&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;RemoveGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Alle&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        RemoveGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SPO_365E1License&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Alle ohne Arbeitsplatz&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SPO_365E1License&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst A - Hermann M&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst A - Hermann M Gruppe&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst A - Segui M&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst A - Segui M Gruppe&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst B - Nietlispach M&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst B - Nietlispach M Gruppe&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst B - Zaugg D&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst B - Zaugg D Gruppe&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst C - Habegger R&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst C - Habegger R Gruppe&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst C - Malbasic N&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst C - Malbasic N Gruppe&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst D - Küchler P&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst D - Küchler P Gruppe&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst D - Zimmermann L&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst D - Zimmermann L Gruppe&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst E - Bechter K&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst E - Bechter K Gruppe&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst E - Brunner R&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst E - Brunner R Gruppe&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst F - Bieri René&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst F - Bieri René Gruppe&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst F - Bieri Urs&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fahrdienst F - Bieri Urs Gruppe&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Verkehrsdisponnenten&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;F_Verkehrsdisponnenten&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Personalkommission&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Options = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        AddGroups = @(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Personalkommission Abteilung&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# get all OUs recursive&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$OUs = $OUs | %{Get-ADOrganizationalUnit -Filter &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*&amp;#34;&lt;/span&gt; -SearchBase $_.Name} | where {&lt;span style=&#34;color:#f92672&#34;&gt;-not&lt;/span&gt; ($ExcludeOUs &lt;span style=&#34;color:#f92672&#34;&gt;-contains&lt;/span&gt; $_.Name)}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# check in every OU if a distribution group with the same name as the OU exist&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$OUs | %{$OU = $_.DistinguishedName;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(Get-ADGroup -Filter {SamAccountName &lt;span style=&#34;color:#f92672&#34;&gt;-eq&lt;/span&gt; $_.Name &lt;span style=&#34;color:#f92672&#34;&gt;-and&lt;/span&gt; GroupCategory &lt;span style=&#34;color:#f92672&#34;&gt;-eq&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Distribution&amp;#34;&lt;/span&gt;} | Where-Object{$_.DistinguishedName &lt;span style=&#34;color:#f92672&#34;&gt;-like&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*&lt;/span&gt;$OU&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;}){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Write-Host &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Update users in distribution group &lt;/span&gt;$($_.Name)&lt;span style=&#34;color:#e6db74&#34;&gt;.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        $ADGroup = Get-ADGroup -Filter {SamAccountName &lt;span style=&#34;color:#f92672&#34;&gt;-eq&lt;/span&gt; $_.Name &lt;span style=&#34;color:#f92672&#34;&gt;-and&lt;/span&gt; GroupCategory &lt;span style=&#34;color:#f92672&#34;&gt;-eq&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Distribution&amp;#34;&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Get-ADGroupMember -Identity $ADGroup | %{Remove-ADGroupMember -Identity $ADGroup -Members $_ -Confirm:$false}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Get-ADUser -Filter {EmailAddress &lt;span style=&#34;color:#f92672&#34;&gt;-like&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*&amp;#34;&lt;/span&gt;} -SearchBase $OU | where {$_.enabled &lt;span style=&#34;color:#f92672&#34;&gt;-eq&lt;/span&gt; $true &lt;span style=&#34;color:#f92672&#34;&gt;-and&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-not&lt;/span&gt; ($ExcludeUsers &lt;span style=&#34;color:#f92672&#34;&gt;-contains&lt;/span&gt; $_.Name)} | where{$_ &lt;span style=&#34;color:#f92672&#34;&gt;-ne&lt;/span&gt; $null} | %{Add-ADGroupMember -Identity $ADGroup -Members $_}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Write-Host &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Create distribution group &lt;/span&gt;$($_.Name)&lt;span style=&#34;color:#e6db74&#34;&gt;.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        New-ADGroup -Name $_.Name -SamAccountName $_.Name -GroupCategory Distribution -GroupScope Universal -DisplayName $_.Name -Path $($_.DistinguishedName) -Description &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Distribution group for &lt;/span&gt;$($_.Name)&lt;span style=&#34;color:#e6db74&#34;&gt;.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        $ADGroup = Get-ADGroup $_.Name&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Get-ADUser -Filter {EmailAddress &lt;span style=&#34;color:#f92672&#34;&gt;-like&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*&amp;#34;&lt;/span&gt;} -SearchBase $_.DistinguishedName | where {$_.enabled &lt;span style=&#34;color:#f92672&#34;&gt;-eq&lt;/span&gt; $true &lt;span style=&#34;color:#f92672&#34;&gt;-and&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-not&lt;/span&gt; ($ExcludeUsers &lt;span style=&#34;color:#f92672&#34;&gt;-contains&lt;/span&gt; $_.Name)} | where{$_ &lt;span style=&#34;color:#f92672&#34;&gt;-ne&lt;/span&gt; $null} | %{Add-ADGroupMember -Identity $ADGroup -Members $_}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# custom configuration&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$Configs | %{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    $ADGroup = Get-ADGroup -Identity $_.Name&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    $Config = $_&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;($_.Options &lt;span style=&#34;color:#f92672&#34;&gt;-match&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UpdateFromGroups&amp;#34;&lt;/span&gt;){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Write-Host &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Add users from &lt;/span&gt;$($Config.AddGroups)&lt;span style=&#34;color:#e6db74&#34;&gt; to &lt;/span&gt;$($ADGroup.Name)&lt;span style=&#34;color:#e6db74&#34;&gt;.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Get-ADGroupMember -Identity $ADGroup | %{Remove-ADGroupMember -Identity $ADGroup -Members $_ -Confirm:$false}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        $Config.AddGroups | %{Get-ADGroupMember -Identity $_ -Recursive | Get-ADUser | where {($_.enabled &lt;span style=&#34;color:#f92672&#34;&gt;-eq&lt;/span&gt; $true) &lt;span style=&#34;color:#f92672&#34;&gt;-and&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-not&lt;/span&gt; ($ExcludeUsers &lt;span style=&#34;color:#f92672&#34;&gt;-contains&lt;/span&gt; $_.Name)}} | select -Unique | %{Add-ADGroupMember -Identity $ADGroup -Members $_}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;($_.Options &lt;span style=&#34;color:#f92672&#34;&gt;-match&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;RemoveGroups&amp;#34;&lt;/span&gt;){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Write-Host &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Remove users from &lt;/span&gt;$($Config.RemoveGroups)&lt;span style=&#34;color:#e6db74&#34;&gt; in &lt;/span&gt;$($ADGroup.Name)&lt;span style=&#34;color:#e6db74&#34;&gt;.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        $ADGroupMembers = Get-ADGroupMember -Identity $ADGroup&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        $Config.RemoveGroups | %{Get-ADGroupMember -Identity $_ -Recursive | Get-ADUser | where {($ADGroupMembers &lt;span style=&#34;color:#f92672&#34;&gt;-match&lt;/span&gt; $_) &lt;span style=&#34;color:#f92672&#34;&gt;-and&lt;/span&gt; ($_.enabled &lt;span style=&#34;color:#f92672&#34;&gt;-eq&lt;/span&gt; $true) &lt;span style=&#34;color:#f92672&#34;&gt;-and&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-not&lt;/span&gt; ($ExcludeUsers &lt;span style=&#34;color:#f92672&#34;&gt;-contains&lt;/span&gt; $_.Name)}} | select -Unique  | %{Remove-ADGroupMember -Identity $ADGroup -Members $_ -Confirm:$false}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;($error){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Send-PPErrorReport -FileName &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;activedirectory.mail.config.xml&amp;#34;&lt;/span&gt; -ScriptName $MyInvocation.InvocationName&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Latest version of this script: &lt;!-- raw HTML omitted --&gt;&lt;a href=&#34;https://gist.github.com/6352037&#34;&gt;https://gist.github.com/6352037&lt;/a&gt;&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
