Archiv der Kategorie: Azure

Lizenzen allen Mitgliedern einer Gruppe entziehen

Nachdem die „alten“ Lizenzen für österreichs SchülerInnen per 1. Juni entfernt werden sollen, damit die „neuen“ A3-Schülerlizenzen zugewiesen werden können, ist dies ein guter Grund, dies per Powershell zu erledigen.

Eine denkbare Vorgangsweise:
1.) Eine Sicherheitsgruppe erstellen (in meinem Fall „A3_schuelerlizenz“
2.) In Office 365 -> Azure Active Directory Admin Center die Lizenz „Microsoft 365 A3 for students use benefit“ der Sicherheitsgruppe „A3_schuelerlizenz“ zuweisen
3.) die bestehende Lizenz „Office 365 A1 Plus für Schüler und Studenten“ per Powershell den Mitgliedern der Sicherheitsgruppe „A3_schuelerlizenz“ entziehen
Fertig!

Zugehörige Maßnahmen im Powershell

evtl zuvor nötige Maßnahme: Installation der PS-Module:

Install-Module -Name AzureAD

Connect-AzureAD
Install-Module MSOnline

PS C:\Users\administrator.HAKNEUSIEDL\Documents> Connect-MsolService
PS C:\Users\administrator.HAKNEUSIEDL\Documents> Get-MsolAccountSku

AccountSkuId ActiveUnits WarningUnits ConsumedUnits
———— ———– ———— ————-
akwiat:M365EDU_A3_STUUSEBNFT 2280 0 0
akwiat:STANDARDWOFFPACK_IW_FACULTY 500000 0 26
akwiat:STANDARDWOFFPACK_IW_STUDENT 1000000 0 562
akwiat:FLOW_FREE 10000 0 55
akwiat:M365EDU_A3_FACULTY 57 0 52
akwiat:STANDARDWOFFPACK_FACULTY 5000 0 0
PS C:\Users\administrator.HAKNEUSIEDL\Documents> get-msolGroup -SearchString "a3_schuelerlizenz"

ObjectId DisplayName GroupType Description
-------- ----------- --------- -----------
227b5ba5-b797-4a8c-a223-9f6ec92430b5 A3_Schuelerlizenz Security
PS C:\Users\administrator.HAKNEUSIEDL\Documents> Get-MsolGroupMember -GroupObjectId 227b5ba5-b797-4a8c-a223-9f6ec92430b5 | Set-MsolUserLicense -RemoveLicenses akwiat:STANDARDWOFFPACK_IW_STUDENT
PS C:\Users\administrator.HAKNEUSIEDL\Documents>

Sichtbarkeit von Gruppen in Office365 verändern

Problem: Eine größer Anzahl von Gruppen in Office 365 haben den Haken gesetzt bei:
„Von der globalen Addressliste meiner Organisation ausblenden“

Dieser kann entweder in der Verwaltungskonsole geändert werden, oder – was sicher klüger ist, wenn es sich um mehrere Gruppen handelt – per Powershell

Lösung:
1.) mit Office 365 verbinden:
$Cred = Get-Credential

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $Cred -Authentication Basic -AllowRedirection
Import-PSSession $Session

2.) den aktuellen Wert (HiddenFromAddressListsEnabled“) für alle Gruppen, die „2020_21“ in der Mailadresse haben, anzeigen lassen

Get-UnifiedGroup -ResultSize Unlimited | Where {$_.PrimarySmtpAddress -like ‚*2020_21*‘} | Select PrimarySmtpAddress,Identity,HiddenFromAddressListsEnabled

 

3.) den Wert ändern (true -> wird ausgeblendet // false –> wird eingeblendet im Adressbuch)
Get-UnifiedGroup -ResultSize Unlimited | Where {$_.PrimarySmtpAddress -like ‚*2020_21*‘} | Set-UnifiedGroup -HiddenFromAddressListsEnabled $true

HINWEIS:Es kann zu folgender, irreführender Meldung kommen:

FehlerFehler_Powershell

WARNUNG: Der Befehl wurde erfolgreich abgeschlossen, es wurden jedoch keine Einstellungen von ‚XYZ2020_21_ff8fb4f2-5e6e-4a1f-92fe-4a58d5f90d0f‘ geändert.“

(obwohl besagte Gruppe zuvor auf „true“ gesetzt war, und jetzt geändert wurde in „false“)

Daher in diesem Fall zur Sicherheit nochmal 2.) den aktuellen Wert anzeigen lassen wiederholen….

4.)
Remove-PSSession $Session

Sicherheitsgruppen in AD als Mailverteiler in Office 365 nutzen

Nachdem man (bei vernünftiger Strukturierung) alle User innerhalb des Active Directory in einer (oder mehrerer) Sicherheitsgruppen hat, ist der Wunsch naheliegend, diese Gruppen als Mailverteiler zu nutzen.
Diese Gruppen nennen sich dann in Office 365 „E-Mail-aktivierte Sicherheit‎-Gruppe“.

Der Vorteil:
Die Erweiterung dieser Mailverteiler erfolgt ausschließlich „On Premises“, weitere Konfigurationen in der Cloud sind nicht nötig, dh, ein User, der der Sicherheitsgruppe im AD hinzugefügt wird, ist automatisch nach der nächsten Synchronisation Empfänger der Mail-Verteilerliste.

ACHTUNG:
Es werden zur Mails an USER zugestellt, die direkt Mitglied dieser E-Mail-aktivierten Sicherheitsgruppe sind!!!

Mitglieder ein (E-Mail-aktivierten) Sicherheitsgruppe, die ihrerseits Mitglied einer E-Mail-aktivierten Sicherheitsgruppe ist, bekommen kein Mail!!!

Beispiel:
Es gibt 3 EASG (E-Mail-aktivierten Sicherheitsgruppe):

buchhaltung@corona.at
[Members: Hanna, Marie (User)]

consulting@corona.at
[Members: Franz, Werner (User)]

AlleMitarbeiterInnen@corona.at
[Members:
buchhaltung (group)
consulting (group)
Chef (User)
Prokurist (User) ]

—>>>

Ein Mail an „AlleMitarbeiterInnen@corona.at“ erreicht NUR folgende User:
Chef, Prokurist

Die Mitglieder der anderen Gruppen erhalten KEIN MAIL – es wird auch keine Fehlermeldung ausgegeben seitens EXCHANGE!!!!

 

Die Vorgangsweise:
Es gibt in der GUI keine Möglichkeit, einer Sicherheitsgruppe eine Mailadresse zuzuweisen, daher muss man hier einen Umweg beschreiten.
Ich versuche, dies hier möglichst klar und dennoch kurz auf den Punkt zu bringen.

1.) Erweiterte Features aktivieren:

erweiterteFeatures

 

 

 

 

 

2.) Attribute anzeigen lassen:

Attribute

 

 

 

 

 

 

 

 

3.) folgende Attribute ändern:
Anmerkung:
Hier werden nur jene Attribute angeführt, die für die Mailverteilerliste relevant sind! Alle anderen (wie zb distinguishedName, GroupType, member, etc) werden hier NICHT besprochen, da sie durch Anlegen der Gruppe bereits vorhanden sind!!!

NAME WERT (immer einzeilig!) BESCHREIBUNG Pflichtfeld
oder
Optional
 authOrig
[siehe Anmerkungen unten]
 CN=Rudi.Ruessel,OU=CHEF,
OU=Benutzer,
DC=Corona,DC=local
 User (einer oder mehrere), die berechtigt sind, an den Mailverteiler Nachrichten zu senden
Anm: alle anderen können dann nichts mehr versenden
optional
 description Schefs Beschreibung der Gruppe optional
 DisplayName Schefs Anzeigename otional
 mail  Vorgesetzte@Corona.at  Adresse des Verteilers Pflicht
 mailnickname Schefs Kurzname für das Adressbuch optional
 managedBy  CN=Rudi.Ruessel,OU=CHEF,
OU=Benutzer,
DC=Corona,DC=local
 Besitzer der
Gruppe
optional
 msExchHideFromAddressLists  True / False / Nicht gesetzt  Ob die Verteilerliste im Addressbuch angezeigt wird optional
 proxyAddresses  SMTP:Vorgesetzte@Corona.at
smtp:vorgesetzte@Virus.com
smtp:vorgesetzte@StayAtHome
smpt:chef@corona.atWICHTIG:
es muss unbedingt auchsmtp:schueler@
Corona.onmicrosoft.com

enthalten sein

 Liste der zusätzlichen Mailadressen für diese Liste;[Anm.: in meinen Tests musste hier in jedem Fall etwas eingetragen sein – dh, zumindest die Mailadresse mit großem
SMTP:
davor
]
Pflicht

Nachdem diese Werte befüllt wurden (zumindest die Pflichtfelder), wechselt die Gruppe in Office365 nach der nächsten Synchronisation automatisch in den Zustand „E-Mail-aktivierte Sicherheit‎-Gruppe“.

Meine Tests ergaben, dass es mitunter mehrere Stunden dauern kann, bis sich auf alle Ebenen in der Cloud durchgesprochen hat, wenn man Members diesen Gruppen hinzufügt oder entfernt.
Dies geschieht dann aber in allen Apps, dh, auch Teams, die darauf aufbauen, bekommen die Meldung
„x.y wurde der Gruppe hinzugefügt bzw. entfernt“.

Anmerkung zu AuthOrig:

Beim Versuch, dieses Feld zu befüllen, erscheint folgende Meldung:

AuthOrig

 

 

 

 

 

 

 

 

„ADSIEdit: Es wurde kein Editor zum Verarbeiten dieses Attributtyps registriert“

Lösung:
per Script dieses Feld befüllen, danach lässt es sich nach Belieben – so wie alle anderen Felder – unter den Attributen ändern.

Folgendes Script kann als Vorlage verwendet werden – Änderungen müssen davor allerdings gemacht werden (wie angegeben als Kommentar)

'On Error Resume Next
Const ADS_SCOPE_SUBTREE = 2
Const ADS_PROPERTY_APPEND = 3

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 

'###########################################################################
'folgendes an die eigene Infrastruktur anpassen!
'ACHTUNG: es wird das Attribut AuthORIG in ALLEN Gruppen dieser OU befüllt - 
'Änderungen können danach manuell im AD erfolgen....
'ACHTUNG: das MUSS in einer Zeile stehen!
'###########################################################################
objCommand.CommandText = "SELECT userPrincipalName, name, distinguishedName FROM 'LDAP://OU=Testgruppe,OU=Benutzer,DC=Corona,DC=local' WHERE objectCategory='group'"

'###########################################################################
'Ende der nötigen Änderungen
'###########################################################################

Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst

Do Until objRecordSet.EOF

    Wscript.Echo objRecordSet.Fields("distinguishedName").Value

            Set objUser = GetObject("LDAP://" & objRecordSet.Fields("distinguishedName").Value)

'###########################################################################
' hier den künftigen Besitzer eintragen - oder "irgendwas" und danach im AD ändern
'###########################################################################

neuerBesitzer = "CN=chef,OU=Vorgesetzte,DC=Corona,DC=local"

'###########################################################################
' Ende der nötigen Änderungen
'###########################################################################
objUser.Put "authorig", NeuerBesitzer

 objUser.SetInfo 

    objRecordSet.MoveNext

Loop

Zuweisung von Lizenzen in Office 365 per PowerShell mit Einschränkung auf Gruppen

Um nur den Mitgliedern einer Sicherheitsgruppe im Active Directory eine bestimmte Lizenz in Office 365 zuzuweisen kann folgende Vorgangsweise mit PowerShell benutzt werden:

1.) Verbindung mit Office:

PS C:\Windows\system32> Connect-MsolService

2.) Vorhandene Lizenzen abfragen:

 

PS C:\Windows\system32> Get-MsolAccountSku

AccountSkuId
------------
MeineFirma:STANDARDWOFFPACK_STUDENT
MeineFirma:STANDARDWOFFPACK_IW_STUDENT
MeineFirma:FLOW_FREE
MeineFirma:POWER_BI_STANDARD
MeineFirma:STANDARDWOFFPACK_FACULTY

3.) GUID der gesuchten Sicherheitsgruppe „CheckerGruppe“ abfragen:

PS C:\Windows\system32> get-msolGroup -SearchString "CheckerGruppe"
ObjectId DisplayName GroupType
-------- ----------- ---------
11xxx111-a99a-50c2-xy8f-423kl3jkldkk CheckerGruppe Security

4.) die Mitglieder dieser Gruppe abfragen:

4a) Alle Mitglieder:

PS C:\Windows\system32> Get-MsolGroupMember -GroupObjectId 11xxx111-a99a-50c2-xy8f-423kl3jkldkk

ODER 4b.) Filter nach bestimmten Zeichen in der Mailadresse innerhalb dieser Gruppe anwenden [bei Bedarf!]:

PS C:\Windows\system32> Get-MsolGroupMember -GroupObjectId 11xxx111-a99a-50c2-xy8f-423kl3jkldkk | where {$_.EmailAddress -match "Abteilung"}

ODER 4c.)  Filter nach bestimmten Zeichen im Displayname innerhalb dieser Gruppe anwenden [bei Bedarf!]:

PS C:\Windows\system32> Get-MsolGroupMember -GroupObjectId 11xxx111-a99a-50c2-xy8f-423kl3jkldkk | where {$_.DisplayName -match "edi"}

5.) Lizenz zuweisen:
5a) allen Mitgliedern dieser Sicherheitsgruppe:

PS C:\Windows\system32> Get-MsolGroupMember -GroupObjectId 11xxx111-a99a-50c2-xy8f-423kl3jkldkk | Set-MsolUserLicense -AddLicense MeineFirma:STANDARDWOFFPACK_FACULTY

5b) nur bestimmten Mitgliedern unter Verwendung obiger Filter:

PS C:\Windows\system32> Get-MsolGroupMember -GroupObjectId 11xxx111-a99a-50c2-xy8f-423kl3jkldkk | where {$_.DisplayName -match "edi"} | Set-MsolUserLicense - addLicense MeineFirma:STANDARDWOFFPACK_FACULTY

Microsoft Teams ist für Schüler nicht verfügbar

Problem:
Wenn Schüler versuchen, sich in Microsoft Teams anzumelden, erhalten Sie die Fehlermeldung:

„“Bleiben Sie nicht zurück! Bitten Sie Ihren Administrator, Microsoft Teams für XXXXXXXXXX zu aktivieren“

In der Benutzübersicht in Office365 hat der Benutzer jedoch die Lizenz für Teams zugeteilt…


UPDATE (30.4.2020):
Lösung: (Das Admincenter wurde etwas umgebaut)

Admin Center -> Einstellungen -> Microsoft Teams -> Teams für Benutzer mit folgenden Lizenzen aktivieren: Bildung – Fakultät und Mitarbeiter Bildung – Kursteilnehmer

Teams-Lizenzen


Lösung (altes Admincenter):
Es muss gesondert in Teams nochmal der Zugang aktiviert werden für die gesamte Organisation.
Warum das so ist, ist mir rätselhaft…

Vorgangsweise:
Admin Center -> Einstellungen -> Dienste und Add-Ins -> Microsoft Teams ->
Einstellungen nach Benutzer-/Lizenztyp
Ausbildungseinrichtungen – Schüler —> EIN

ACHTUNG:
Die tatsächliche Aktivierung, sodass sich die SchülerInnen dann auch anmelden, kann mehrere Stunden später erfolgen…

Dienste und Add-InsAusbildungseinrichtungen-SchülerTeams_Aktivieren

per VBScript MailAttribute aus den UserAccounts entfernen

Es war einmal ein Exchange – der dann abgedreht wurde – und die User wurden dann auf Gmail umgesiedelt.

Das lief prima – bis die User auf den Hosted Exchange von OFFICE365 migriert werden sollten… (und es ja onPrime keinen Exchange mehr gab)…

Das folgende Script hat diese Einträge für alle User einer bestimmten OU entfernt – seither klappts mit der Migration wie am Schnürchen…
Als ExchangeAttributeDelete.vbs speichern und direkt am Domänencontroller starten (nach Anpassung an die eigene Domain!)

On Error Resume Next
Const ADS_SCOPE_SUBTREE = 2

Const ADS_PROPERTY_APPEND = 3
Const ADS_PROPERTY_DELETE = 4
Const ADS_PROPERTY_CLEAR = 1 

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 

objCommand.CommandText = "SELECT legacyExchangeDN, name, distinguishedName, sAmAccountname, proxyaddresses FROM 'LDAP://OU=lehrer,OU=Benutzer,DC=gymnasium,DC=at' WHERE objectCategory='user'"

Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst

Do Until objRecordSet.EOF

    'Wscript.Echo objRecordSet.Fields("distinguishedName").Value
	if len(objRecordSet.Fields("legacyExchangeDN").Value)>= 1  THEN
	Wscript.Echo objRecordSet.Fields("sAmAccountname").Value & " -- " & objRecordSet.Fields("Name").Value

	'# falls man das Script nur für einen User testen möchte:  (ACHTUNG: zweites END IF unten einkommentieren)
	'if objRecordSet.Fields("name").Value = "WUT" then
	'Wscript.Echo objRecordSet.Fields("name").Value

	Set objUser = GetObject("LDAP://" & objRecordSet.Fields("distinguishedName").Value)

	Wscript.Echo objRecordSet.Fields("legacyExchangeDN").Value
	wscript.echo len(objRecordSet.Fields("legacyExchangeDN").Value)

			objUser.PutEx ADS_PROPERTY_CLEAR, "msExchHomeServerName", 0
			objUser.SetInfo

			objUser.PutEx ADS_PROPERTY_CLEAR, "legacyExchangeDN", 0
			objUser.SetInfo

			objUser.PutEx ADS_PROPERTY_CLEAR, "homeMDB", 0
			objUser.SetInfo

			objUser.PutEx ADS_PROPERTY_CLEAR, "homeMTA", 0
			objUser.SetInfo

			objUser.PutEx ADS_PROPERTY_CLEAR, "mDBUseDefaults", 0
			objUser.SetInfo

			objUser.PutEx ADS_PROPERTY_CLEAR, "msExchALObjectVersion", 0
			objUser.SetInfo

			objUser.PutEx ADS_PROPERTY_CLEAR, "msExchMailboxGuid", 0
			objUser.SetInfo

			objUser.PutEx ADS_PROPERTY_CLEAR, "msExchMailboxSecurityDescriptor", 0
			objUser.SetInfo

			objUser.PutEx ADS_PROPERTY_CLEAR, "msExchPoliciesIncluded", 0
			objUser.SetInfo

			objUser.PutEx ADS_PROPERTY_CLEAR, "msExchUserAccountControl", 0
			objUser.SetInfo

			objUser.PutEx ADS_PROPERTY_CLEAR, "msNPAllowDialin", 0
			objUser.SetInfo

			objUser.PutEx ADS_PROPERTY_CLEAR, "ShowInAddressBook", 0
			objUser.SetInfo

			objUser.PutEx ADS_PROPERTY_CLEAR, "textEncodedORAddress", 0
			objUser.SetInfo

			wscript.Echo "erfolgreiche geloescht!" & vbcrlf

	'end if
	end if

    objRecordSet.MoveNext

Loop

per VBScript Einträge im AD aus dem Attribut ProxyAddresses entfernen

Es kann vorkommen, dass in historisch gewachsenen Domänen einzelne (oder alle) User Einträge im AD-Attribut „ProxyAddresses“ haben, die auf einen alten Exchange / Gmail / etc hinweisen.

Dies ist äußerst hinderlich, wenn man diese Benutzer per Azure AD Connect ins OFFICE 365 übertragen möchte, da dieser Eintrag dazu führt, dass Benutzer kein Outlook-Konto in OFFICE365 bekommen.

Die Fehlermeldung lautet dann:

Mailfehler

 
 
 
 
Benutzername       xyz@domain.at    E-Mail-Adresse  Aliase   Anzeigen nicht möglich. Versuchen Sie es noch mal.
 

Die Lösung ist es nun, die Einträge im Attribut „ProxyAddresses“ zu entfernen, was folgendes Script massenhaft erledigen kann:
(als MassenAttributlöscher.vbs speichern und direkt am Domänencontroller ausführen)

On Error Resume Next
Const ADS_SCOPE_SUBTREE = 2
Const ADS_PROPERTY_APPEND = 3
Const ADS_PROPERTY_DELETE = 4
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 

objCommand.CommandText = "SELECT name, distinguishedName, sAmAccountname, proxyaddresses FROM 'LDAP://OU=lehrer,OU=Benutzer,DC=gymnasium,DC=at' WHERE objectCategory='user'"

Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst

Do Until objRecordSet.EOF

    'Wscript.Echo objRecordSet.Fields("distinguishedName").Value
	if NOT objRecordSet.Fields("proxyaddresses").Value = NULL THEN
	Wscript.Echo objRecordSet.Fields("sAmAccountname").Value & " -- " & objRecordSet.Fields("Name").Value

	'# falls man das Script nur für einen User testen möchte:  (ACHTUNG: zweites END IF unten einkommentieren)
	'if objRecordSet.Fields("name").Value = "DRE" then
	'Wscript.Echo objRecordSet.Fields("name").Value

	arrProxyAddresses = objRecordSet.Fields("proxyAddresses").Value
	Set objUser = GetObject("LDAP://" & objRecordSet.Fields("distinguishedName").Value)

	'### zum Löschen aller Einträge in ProxyAddresses folgendes einkommentieren:
	For Each objItem In arrProxyAddresses

					objUser.PutEx ADS_PROPERTY_DELETE, "proxyAddresses", Array(objItem)
					objUser.SetInfo

	Next

	'### zum Einfügen einer zusätzlichen Adresse folgendes einkommentieren:

				' objUser.PutEx ADS_PROPERTY_APPEND, "proxyAddresses", Array("smtp:" & objRecordSet.Fields("sAmAccountname").Value & "@brg-mattersburg.at" )
				 'objUser.SetInfo

	'### zum Auflisten aller Einträge in ProxyAddresses folgendes einkommentieren:
	For x=0 to UBOUND(arrProxyAddresses)
		wscript.echo arrProxyAddresses(x)

	Next

			wscript.Echo "erfolgreiche gelöscht!" & vbcrlf

	end if
	'end if

    objRecordSet.MoveNext

Loop

Fehlerhafte Absenderadressen in Office365 Exchange – Lösung

Problem:
Aus dem Active Directory nach Office 365 exportierte Benutzer haben als erste E-Mail-Adresse nicht die gewünschten „Domänenerweiterungen“, sondern Adressen nach dem Muster

Benutzername@MeineFirma.onmicrosoft.com
und zusätzlich
Benutzername@wunschdomain.at

Mails können an beide Adressen versandt bzw. empfangen werden, beim Versenden wird aber die unerwünschte
Benutzername@MeineFirma.onmicrosoft.com
als Absenderadresse verwendet, was nicht nur etwas ungünstig wirkt, sondern bei manchen als SPAM klassifiziert wird.

Ursache:
Während der Synchronisierung der Benutzer aus Active Directory mittels Synchronization Service Manager bzw. Azure AD Connect werden auch alle Attribute synchronisiert. Dazu zählt auch das Feld „E-Mail“.
Ist dieses Feld leer, dann wird nach der Synchronisierung automatisch eine Mailbox angelegt nach obigem Muster.

Der Versuch, den Eintrag für den Primären SMTP-Server per PowerShell zu ändern schlägt fehl!
Fehlermeldung:

Fehler bei Vorgang für Postfach "BRGM_TestUser", da es außerhalb des 
Schreibbereichs für den aktuellen Benutzer liegt. Die Aktion 'Set-Mailbox',
'EmailAddresses', kann nicht für das Objekt 'BRGM_TestUser' durchgeführt 
werden, weil dieses Objekt von lokal synchronisiert wird. Diese Aktion sollte
lokal für das Objekt durchgeführt werden.

——————————– EXKURS – ist zur Problemlösung völlig uninteressant                    ——————-

Zur Info – und damit ich es selber schneller finde beim nächsten Anlass:

1.) PowerShell-Script, um alle User inkl. einschlägiger Attribute in ein csv zu exportieren:
HINWEIS: PowerShell als Administrator starten und folgenden Befehl absetzen:
Set-ExecutionPolicy Unrestricted

$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://outlook.office365.com/powershell-liveid/" -Credential $cred -Authentication Basic -AllowRedirection
 Import-PSSession $session
 Get-Mailbox -Resultsize Unlimited | Select Alias, UserPrincipalName, WindowsEmailAddress | Export-Csv "C:\off365\user.csv"

2.) csv entsprechend ändern – WICHTIG: Felder MÜSSEN mit KOMMA (NICHT SEMIKOLON) getrennt sein!!!

Recipient PrimaryEmail AliasEmail
edi.mustermann edi.mustermann@MeineSchule.at edi.mustermann@MeineSchule.onmicrosoft.com

3.) Das PowerShell-Script, das mit den Daten aus dem .csv die Primary SMTP-Address ändert:

$Recipients = Import-Csv C:\off365\User.csv
Foreach ($Mailbox in $Recipients)
{
Set-Mailbox -Identity $Mailbox.Recipient -EmailAddresses $Mailbox.PrimaryEmail,$Mailbox.AliasEmail 
}

——————————————————— EXKURS – ENDE  ——————————————————–

Lösung:
Das entsprechende Attribut „E-Mail“ muss direkt in Active Directory am DC für den jeweiligen User geändert werden! (Im FachChargon würde das dann „On Premises“ genannt werden)
Danach wird es automatisch synchronisiert und die Einträge stimmen auch in Office 365.

Nachdem das für ein paar Hundert User nicht manuell durchführbar ist, hier ein VBScript, mit dem im Bulk – also massenhaft – Benutzern das Attribut eingetragen wird:
(Quelle: Scripting Guys und ein paar Extrazeilen)

On Error Resume Next
Const ADS_SCOPE_SUBTREE = 2
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 

objCommand.CommandText = "SELECT name, distinguishedName FROM 'LDAP://OU=Schueler,OU=Benutzer,DC=MeineSchule,DC=at' WHERE objectCategory='user'"

Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst

Do Until objRecordSet.EOF

    'Wscript.Echo objRecordSet.Fields("distinguishedName").Value
	Wscript.Echo objRecordSet.Fields("Name").Value

			Set objUser = GetObject("LDAP://" & objRecordSet.Fields("distinguishedName").Value)

		    objUser.Put "mail", objRecordSet.Fields("Name").Value & "@meineDomain.at" 
		    objUser.SetInfo

    objRecordSet.MoveNext

Loop

Verwendung:
Auf einen DomänenController als „Emailer.vbs“ speichern und die Einträge an die eigene Domäne anpassen!
(Zeile 11 und Zeile 24)
Abschließend in einer Command-Shell mit
cscript Emailer.vbs
starten.

Die Benutzernamen schwirren dann über den Bildschirm – und nach wenigen Sekunden haben alle Benutzer den gewünschten Eintrag im Feld E-Mail im AD. Nach der nächsten Synchronisierung dann auch in Office 365.

In Office 365 bleiben weiterhin beide zu Beginn genannten Mailadressen erhalten, auch am Loginnamen ändert dies nichts! Lediglich der Eintrag für den Primary SMTP-Server (=Absendeadresse) wird geändert.

 

Massenlizenzierung in Office365 mit Powershell

Problem:
Nachdem die Benutzer aus dem Active Directory mit dem Synchronization Service Manager bzw. Azure AD Connect mit Office 365 synchronisiert wurden, müssen ihnen noch Lizenzen zugewiesen werden.

Lösung:
Variante 1:
Die Zuweisung von Lizenzen kann in der WebGUI erfolgen.
Checkboxen der betreffenden User auswählen -> Massenaktionen -> Produktlizenzen bearbeiten
[Problem dieser Methode: das dauert bei mehreren Hundert Benutzern vieeel zu lange!!!]

Variante 2 (Empfohlen ab einer größeren Anzahl von Usern):
Die Zuweisung von Lizenzen kann mittels PowerShell erfolgen (empfohlene Methode!):

Vorbereitung:
Am DC, auf dem Azure AD Connect installiert wird, muss zuerst noch eine Kleinigkeit installiert werden (erfordert kein Reboot!)

  1. Microsoft Online Services-Anmelde-Assistenten für IT-Experten RTW
  2. Azure Active Directory-Modul für Windows PowerShell (64-Bit-Version)

1.) Verbindung zum Online Services Modul

Connect-MsolService

Benutzername nach dem Muster Wurstmann@WurstDomain.local eingeben!

 

2.) Eine Abfrage mit den vorhandenen Lizenzen:

Get-MsolAccountSku

get-msolAccountSku1

 

3.) Allen bzw. bestimmten Usern eine UsageLocation zuweisen

Get-MsolUser -All | where {$_.UserPrincipalName -match "@brg-MeineSchule.at"} | Set-MsolUser -UsageLocation "AT"

Der Teil  | where …. | ist optional

Anschließende Kontrolle, ob die Location zugewiesen wurde
:

Get-MsolUser -UserPrincipalName "edi@brg-MeineSchule.at" | Select-Object UsageLocation

 

 

4.) Allen bzw. bestimmten Usern eine Lizenz zuweisen!

Tipp: die Zuweisung von mehreren Lizenzen ist nicht möglich!!!
Daher empfiehlt es sich, in nachfolgender Zuweisung nach Usern zu filtern, die noch keine Lizenz zugewiesen bekommen haben.

where {$_.UserPrincipalName -match […] } ist wieder optional!!!

Get-MsolUser -All -UnlicensedUsersOnly | where {$_.UserPrincipalName -match "NMS_"} | Set-MsolUserLicense -AddLicenses BGbrg-MeineSchule:STANDARDWOFFPACK_IW_STUDENT

Eine Zuweisung für alle User wäre also:

Get-MsolUser -All -UnlicensedUsersOnly | Set-MsolUserLicense -AddLicenses BGbrg-MeineSchule:STANDARDWOFFPACK_IW_STUDENT

Die jeweiligen Vorgänge dauern einige Minuten – abhängig von der Benutzeranzahl – und werden ohne Meldung abgeschlossen. Keine Fehlermeldung = Erfolg!