Office VBA: Inputbox Button "Abbrechen" korrekt auswerten

Problem:
Ich habe ein Makro in Excel geschrieben und hier muss der Benutzer etwas eingeben bzw. hat mit dem ABBRECHEN-Button die Möglichkeit das Makro zu beenden. Jetzt habe ich bemerkt, dass das Abbrechen nicht funktioniert - der Code wird nicht korrekt ausgewertet und das Makro läuft weiter.

Lösung:
Eine Inputbox ist keine Msgbox und muss anders ausgewertet werden. Es gibt hier zwei Möglichkeiten:

1.) Beim Abbrechen wird der Wert "" übergeben (leer) und man kann dies auswerten.

Beispiel:
Wert = Inputbox("Bitte Namen eingeben")
If Wert = "" then 
    Msgbox "Es wurde kein Wert eingegeben oder Abbrechen geklickt"
Else
    ........
End If


Nachteil hier ist, dass man nicht zwischen Abbrechen oder leerer Eingabe unterscheiden kann.


2.) Man wertet wirklich aus, ob der Wert leer ist oder null mittels StrPtr-Funktion. Null würde ABBRECHEN entsprechen

Beispiel:
Wert = Inputbox("Bitte Namen eingeben")
If StrPtr(Wert) = 0 then 
    Msgbox "Es wurde sicher Abbrechen geklickt"
Else
    ........
End If


Vorteil hier ist, dass man klar zwischen ABBRECHEN und leerer Eingabe unterscheiden kann.

Quelle:
Bettersolutions.com: STRPTR

Teams / Office 365 : Aufzeichnen von Meetings nicht möglich

Problem : Die Recording Funktionalität von Microsoft Teams ist ausgegraut.
Leider hab ich nur einen Screenshot wo das nicht mehr der Fall ist ;-)

Teams Recording
Lösung : Erstmal muss die Verbindung zu MS Teams aufgebaut werden.
# connect to MS Teams
Import-Module MicrosoftTeams
$sfbSession = New-CsOnlineSession
Import-PSSession $sfbSession
Anzeigen kann man die Einstellungen der Policy mit dem Befehl :
# get teams policy
Get-CsTeamsMeetingPolicy -Identity Global
Powershell Teams Policy
Dann kann man das mit dem Powershell Schnipsel fixen :
# set AllowRecordingStorageOutsideRegion 
Set-CsTeamsMeetingPolicy -Identity Global -AllowRecordingStorageOutsideRegion $True

Erklärung :
Bei uns liegt es daran das Teams bereits in der Germany Location ist der Service Stream aber selbst dort noch nicht verfügbar ist. Dieser ist im Moment nur in der Europe Region verfügbar. Die Einstellung sorgt dafür das Teams auch außerhalb Germanys die aufgezeichneten Daten ablegen darf. Was hier bedeutet unsere Recordings liegen auf Servern in der Europa Region

Exchange Online / Office 365 : Erstellen einer dynamischen Verteilerliste

Um uns die Arbeit etwas zu erleichtern haben wir unseren internen E-Mail Verteiler auf eine DynamicDistributionGroup in Exchange Online umgestellt. Das erspart uns die Arbeit neue Mitarbeiter immer manuell in den Verteiler aufzunehmen, außerdem reduziert es die Fehler (oder das vergessen die neuen User hinzuzufügen). Da wir in unserer Umgebung auch einige Funktionspostfächer haben mussten diese ausgeschlossen werden.

Erstmal habe ich eine Verteiler Gruppe erstellt in der ich die ganzen Funktionspostfächer aufnehme.
New-DistributionGroup -Name 'NODYNDIS'
Set-DistributionGroup -Identity 'NODYNDIS' -HiddenFromAddressListsEnabled $True
Mit einem ADD Befehl kann man neue Funktionspostfächer hinzufügen.
Add-DistributionGroupMember -Identity 'NODYNDIS' -Member 'user-email@domain'
Dann brauchen wir den DN der Gruppe für den Filter in der dynamischen Gruppe
Get-Group -Identity 'NODYNDIS' | Select-Object -ExpandProperty DistinguishedName

CN=NODYNDIS,OU=xxx,OU=xxx,DC=xxx,DC=xxx,DC=xxx
Dann kann man die dynamische Gruppe erstellen.
New-DynamicDistributionGroup -Name 'TESTVERTEILER' -RecipientFilter {((RecipientTypeDetails -eq 'UserMailbox') -and -not (MemberofGroup -eq 'CN=NODYNDIS,OU=xxx,OU=xxx,DC=xxx,DC=xxx,DC=xxx') -and -not (UserAccountControl -eq 'AccountDisabled, NormalAccount'))}
Kurz zur Erklärung der Filter :
(RecipientTypeDetails -eq 'UserMailbox')  : Es muss sich um ein Benutzer Postfach handeln
-and -not (MemberofGroup -eq 'CN=NODYNDIS,OU=xxx,OU=xxx,DC=xxx,DC=xxx,DC=xxx') : und nicht Mitglied dieser Gruppe
-and -not (UserAccountControl -eq 'AccountDisabled, NormalAccount') : User darf nicht deaktivert sein
Anzeigen aller Empfänger in dem dynamischen Verteiler
$mygroup = Get-DynamicDistributionGroup "TESTVERTEILER"
Get-Recipient -RecipientPreviewFilter $myGroup.RecipientFilter | Select Name,PrimarySmtpAddress

Infos :
Filterbare Eigenschaften für RecipientFilter
New-DynamicDistributionGroup
New-DistributionGroup
Set-DistributionGroup


Office 365 : Probleme beim Zugriff auf One Drive aus der UI heraus

Problem : Wir hatten hier einige User in unserem Tenant die aus dem Portal nicht auf ihr One Drive zugreifen konnten. Die Fehlermeldungen waren nicht wirklich hilfreich. Es sind immer wieder solche Fehler aufgelaufen.
one drive errors
Ein Ticket bei Microsoft hat uns dann die Lösung gebracht, auch wenn wir es nicht 100% nachvollziehen können. Vermutlich wird durch das Get-SPOSite ... | Select Owner ein neues provisioning angetriggert der dann das Feld füllt und dann auch der Zugriff aus der UI funktioniert. Ok einfach in Kurz .. davor ging es nicht danach konnte der User zugreifen ;-)
Lösung : Das Provisioning auslösen mit diesem Powershell Befehl
Get-SPOsite https://contoso-my.sharepoint.com/personal/user1_contoso_onmicrosoft_com | Select-Object -Property Url, Owner

Wir haben das alles nochmal in ein Skript geschrieben das noch andere Sachen checkt & korrigiert :-)
Hier gehts zum Skript : jhochwald/FixPersonalSPOSite.ps1

Office 365 : Anzeigen aller Gäste incl. Team

Unser Datenschützer wollte eine Übersicht über alle Gäste und den dazugehörigen Teams. Das kleine Skript erledigt diese Aufgabe für euch.

# Connect to Microsoft Teams
Connect-MicrosoftTeams
# Get all Guests and Teams
$Teams = Get-Team
$GuestUser = foreach ($Team in $Teams) 
{    
Get-TeamUser -GroupId $Team.GroupId | Where-Object -FilterScript {$_.Role -eq 'Guest'} | Select-Object -Property User, Role, @{n = 'TeamName';e = {$Team.DisplayName} }
}
#Export-CSV
$paramExportCsv = @{
   Path              = "c:\Externe\ExterneUser.csv"
   Force             = $true
   Encoding          = 'UTF8'
   Delimiter         = ';'
   NoTypeInformation = $true
}
$GuestUser | Export-Csv @paramExportCsv

Exchange Online / Office 365 : Connect to Exchange Online using Exchangev2 Module

Installieren des Modules :
Install-Module -Name ExchangeOnlineManagement
Jetzt kann man mal prüfen ob alles sauber installiert ist.
Verbindung zu Exchange Online aufbauen
$ParaConnectExchange = @{
   UserPrincipalName    = 'ADMIN-USER'
   ShowProgress         = $false
   ShowBanner           = $false
   EnableErrorReporting = $false
   UseMultithreading    = $true
   TrackPerformance     = $false
}
Connect-ExchangeOnline @ParaConnectExchange

Das ist der neue Weg, und wenn man MFA aktiviert hat erscheint jetzt auch die Abfrage.
“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)