Archiv der Kategorie: Powershell

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

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

Per Powershell Mails aus Exchange-Boxen entfernen

Es kann vorkommen, dass (zB durch SPAM) Mailboxen auf einem Exchange-Server so übervoll werden, dass ein manuelles löschen nicht mehr durchführbar ist.

In diesem Fall funktioniert folgende Vorgangsweise auf einem Exchange-Server 2007:

  1. Rechte auf den Mailboxen dem Administrator erteilen:Get-Mailbox -ResultSize unlimited | Add-MailboxPermission -User ADMINISTRATOR -AccessRights FullAccess -InheritanceType all
  2. Mails mit dem unerwünschten Inhalt löschen:Get-Mailbox BetroffeneMailbox | Export-Mailbox -ContentKeywords „Diagnosetext“ -DeleteContent

Hinweis:
Es werden die betroffenen Mails sofort gelöscht und nicht in einen Ordner oder in eine andere Mailbox verschoben!

 

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.

 

VBScript to Powershell

Nur damit ich (und andere?) den Link wieder finde…
Es gibt unter folgendem Link ein Word-Dokument namens VBStoPS, das heisst, ein Kompendium von „Übersetzungen“ von VisualBasicScript in ein PowerShell Script, unterteilt nach VBScript-Befehlen inkl. eines Beispiels und dem zugehörigen PowerShell Befehl.

Der Download von Microsoft ist eine selbstextrahierende .exe, der Name ist etwas irreführend… (Windows Powershell Week Script Samples…)

Für jemanden wie mich, der VBScript „beherrscht“ und ab und zu Powershell braucht, ein Volltreffer 😉

http://www.microsoft.com/download/en/confirmation.aspx?id=3560

PS: hier gäbe es das ganze Online…