Ressourcenpostfach Kalenderbuchungen automatisch akzeptieren um Konflikte zu vermeiden

Problem:

Ein Ressourcenpostfach (Gerätepostfach) soll Kalenderbuchungen automatisch akzeptieren. In der Standardeinstellung sind Konflikte bei der Buchung möglich.

Lösung:

Standardmäßig werden bei Gerätepostfächern Kalenderbuchungen zwar als „Mit Vorbehalt“ im Kalender eingetragen, allerdings nicht automatisch bestätigt. Somit sind auch doppelte Buchungen möglich.

Diese Einstellung lässt sich relativ schnell via Exchange-Management-Shell ändern:

Set-CalendarProcessing -Identity "POSTFACH" -AutomateProcessing AutoAccept

Kalenderdetails eines Ressourcenpostfaches anzeigen (Exchange 2016/Online)

Problem:

Benutzer sehen im Kalender eines Ressourcenpostfaches standardmäßig lediglich den Frei-/Gebucht-Status und können Termine auch nicht zum anzeigen von Details öffnen.

Lösung:

Es gibt mehrere Möglichkeiten dies zu ändern:

  1. Einem Benutzer Vollzugriff auf das Ressourcenpostfach geben (via EMC). Mit diesem Benutzer können dann die Berechtigungen des Kalenders vom betroffenen Postfach angepasst werden. Oder:
  2. Die Kalenderberechtigungen für den „Default“-Benutzer via Exchange-Management-Shell anpassen:
Set-MailboxFolderPermission "POSTFACH-ID:\Kalender" -AccessRights Reviewer -User Default

Die Rolle „Reviewer“ behinhaltet die Berechtigungen „FolderVisible, ReadItems“, somit also auch das Anzeigen der Termindetails.
Die anderen möglichen Berechtigungen bzw. Rollen finden sich unter https://technet.microsoft.com/de-de/library/dd298062(v=exchg.160).aspx

Office 365 Powershell Download/Setup/Installation

Die Windows PowerShell für Office 365 ist ein sehr leistungsfähiges Tool. Erweiterbar wie ein IBM Universal  Business Adapter und in etwa auch so komplex. Es gibt einen Punkt in der Lernkurve, an dem Anfänger häufig den Faden verlieren; dies passiert in der Regel nach dem Erlernen der einfachsten Cmdlets und bevor die Erstellung nützlicher Lösungen vollständig verstanden worden ist. Es ist eine einfache Sache „Get-Process“ auszuführen, aber eine andere eine Reihe von Cmdlets in eine Pipeline für einen Remotecomputer einzureihen, um eine Aktion remote auszuführen. Grade Office 365 ist beispielsweise nicht vollständig in die „Ausliefershell“ integriert und benötigt einige zusätzliche Module und die Initialisierung der Remote-Shell.

So gehts auf in die Office 365 Powershell

  1. Betriebssysteme unter Windows7/2008R2 brauchen WinRM2.0 mit der Powershell 2.0
  2. Download und Installation Microsoft Online Services Sign-in Assistant
  3. Download und Installation Azure Active Directory (AD) Module (x64, eine 32-bit-VErsion gibt es noch, wird aber nicht mehr supported)
  4. Optional: „SharePoint Online Module“ (Zur Sharepoint-Verwaltung)
  5. Optional: „Skype for Business Online Module“ (Zur Lync Skype for Business Verwaltung)

Verbindung zur Office 365 Powershell

$credential = get-credential
Import-Module MSOnline
Connect-MsolService -Credential $credential

Verbindung zur Skype for Business Powershell

Import-Module LyncOnlineConnector
$lyncSession = New-CsOnlineSession -Credential $credential
Import-PSSession $lyncSession

Verbindung zur Sharepoint Powershell

Import-Module Microsoft.Online.Sharepoint.PowerShell
Connect-SPOService -url https://contoso-admin.sharepoint.com -Credential $credential

Verbindung zur Exchange Powershell

$ExchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://outlook.office365.com/powershell-liveid/" -Credential $credential -Authentication "Basic" -AllowRedirection
Import-PSSession $ExchangeSession

Verbindung zu den Office 365 Onlinediensten via Poweshell-Function

function Connect-O365 {
<#
.Synopsis
 Connects powershell to Office 365
.DESCRIPTION
 Use this to connect powershell to Office 365. You will be prompted for credentials.
.EXAMPLE
 Connect-O365
#>
 Set-ExecutionPolicy RemoteSigned
 $Cred = Get-Credential
 $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $Cred -Authentication Basic -AllowRedirection
 Import-Module (Import-PSSession $Session -Allowclobber) -Global
 Connect-MsolService -Credential $Cred
}

(Danke Alex)

Powershell Skripts als geplante Tasks in der Aufgabenplanung starten

Powershell-Script lassen sich an der (Powershell-) Kommandozeile komfortabel starten, jedoch nicht ohne weiteres in geplanten Tasks.

Das geht so:
powershell-aufgabenplanung-startenFeld Programm/Script:

%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe

Argumente:

-noninteractive -command "&{C:\PFAD\SCRIPTNAME.ps1}"

Mehr Details dazu hat das MSDN in diesem Artikel, aber im Prinzip ist es das schon.

PowerShell: Gruppen aus dem ActiveDirectory mit ihren Mitgliedern auflisten

Problem

Eine Management-Anforderung:

Bitte erstellen sie mal eben eine Liste alle Gruppen aus unserem ActiveDirectory mit allen Mitgliedern darin. Oh, am besten sowohl der DisplayName und auch der ganze LDAP-Pfad – und wenn es verschachtelte Gruppen, gibt nur den Gruppennamen.

Lösung

Der finde Admin weiss: So eine Liste ist, einmal erstellt, recht statisch und daher über die Zeit mehr und mehr realitätsfern, aber das zu erstellen ist natürlich ein Problem. Die Ausgabe ist natürlich ein schneller Hack, der erfahrene Admin baut selbstverständlich besser erst ein Objekt zusammen und wendet auf dessen Eigentschaften eine ausgabemethode an.

$Groups = Get-ADGroup -Properties * -Filter *
Foreach($G In $Groups) {
    $G.Name         | Out-File -Append .\gruppenliste.txt
    "---------------------" | Out-File -Append .\gruppenliste.txt
    $G.Members      | Out-File -Append .\gruppenliste.txt
    }

Die Gruppenliste liße sich selbstverständlich auch Filtern, zum Beispiel „Nur Gruppen die ‚rothaarig‘ im Namen haben“:

# $Groups = Get-ADGroup -Properties * -Filter {name -like "*rothaarig*"}

Powershell Fehler „0x80131515“ beim laden von Modulen (Import-Module)

Problem

Ein neues Powershell Modul oder Script möchte nicht geladen werden, stattdessen gibt es den Fehler:

Import-Module : Die Datei oder Assembly 
"file:///C:\Windows\system32\WindowsPowerShell\v1.0\Modules\NTFSSecurity\FOOBARNAME.dll" oder eine Abhängigkeit davon 
wurde nicht gefunden. Der Vorgang wird nicht unterstützt. (Ausnahme von HRESULT: 0x80131515)
In Zeile:1 Zeichen:1
+ Import-Module NTFSSecurity
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Import-Module], FileLoadException
    + FullyQualifiedErrorId : System.IO.FileLoadException,Microsoft.PowerShell.Commands.ImportModuleCommand

Lösung

  1. .NET Framework 2.0 Installieren
    Install-WindowsFeature Net-Framework-Core -source \\HOST\PFAD\sxs
  2. NTFS-Feature „Zulassen“ auf den entsprechenden Dateien aktivieren
  3. Die gute alte Execution-Policy anpassen
    Set-ExecutionPolicy Unrestricted

Warum die ansonsten zu überaus clevere Scripting Guys allerdings ein „Datei nicht gefunden“ an dieser Stelle ausgeben ist uns ein Rätsel.

ActiveDirectory: Liste aller Computer mit Betriebssystem in einer OU erstellen

Diese PowerShell Zeile erstellt eine Liste alle Computer aus dem ActiveDirectory mit Name und Betriebssystem:

Get-ADComputer -Filter * -Property * -searchbase "OU=MEINEOU, DC=DOMAENE, DC=DOMAENETLD" -searchscope 1 | Format-Table Name,OperatingSystem -Wrap -Auto

Das Ergebnis, vor allem dessen Spalten, lassen sich über die Properties in „Format Table“ anpassen und erweitern. Mehr Beispiele folge sicher noch, aber aus reiner Faulheit sei dieser Schnippsel (den ich öfter benötige) hier schon mal abgelegt 🙂