Markus Bütterhoff

SharePoint Consultant.

Die nächste Konferenz steht an: SharePoint Unite

Seit heute sind Maximilian, Fabian und André auf der SharePoint Unite in Haarlem, Niederland.

Auf der Konferenz sammeln wir in schönem Ambiente viele Infos rund um Office 365, SharePoint und Azure die wir dann natürlich hier im Blog oder in unserem YouToube Kanal, der SharePointBox, mit euch teilen.

Wenn ihr vor Ort seit, dürft ihr die Jungs auch gerne ansprechen: Wir haben sie gut markiert!

Prozessdigitalisierung: So besser nicht

Im Rahmen eines internen Nintex Contest haben wir (Fabian, Sebastian und ich) Alexa beigebracht sich darum zu kümmern das Licht anzuschalten: Und das ganz ohne SmartHome Integration.

In diesem nicht so ganz ernst gemeinten Video arbeiten Alexa, Nintex Workflow Cloud, Slack, Zappier, Nintex Workflow, Skype for Business, Office 365, Nintex App, Bing Text to Speech, bitly und Martin mit der Nerf Gun zusammen um das Licht anzuschalten.

[Update] Ignite diaries – Die SharePointJungs auf der Ignite 2017

In diesem Jahr sind Thomas, Stefan und Markus auf der Microsoft Ignite in Orlando.

Eine tägliche Zusammenfassung findet ihr in unseren YouToube Kanal „SharePointBox“ in dieser Playlist:

Infos zur Ignite:

Die Ignite ist die weltweit größte Microsoft Konferenz und findet vom 25.09. bis 29.09. statt.
Es gibt Vorträge zu

  • Sharepoint
  • Office 365
  • Azure
  • Windows
  • Office
  • Dynamics 365
  • SQL

somit eigentlich zu allen Microsoft Produkten und Technologien. Infos zur Veranstaltung gibt es unter:
https://www.microsoft.com/en-us/ignite/

Digital Minds – Vorträge und Diskussionen rund um aktuelle IT Themen

Die „Digital Minds“ sind ein Zusammenschluss aus den unterschiedlichen Bereichen um sich mit Neuerungen und Trends rund um IT Technologien zur Digitalisierung IoT, Cloud, AI etc. zu beschäftigen und auszutauschen.

Gestern (12.09.2017) war unser erstes Treffen zu den Themen:

  • Alexa und Skills
  • AI mit Microsoft Azure ML

Im Anschluss an unser erstes Treffen haben wir uns mit unserem Gastgeber David Schonebeck von der d.velop über den Abends und das nächste Treffen unterhalten.

So viel vorab:

Das nächste Treffen wir im Januar stattfinden. Der Termin steht noch nicht, wohl aber die Themen:

  • Blockchain und Bitcoin
  • Docker

Wenn ihr Lust habt dabei zu sein meldet euch bei unserem Meetup an: https://www.meetup.com/de-DE/Innovation-Hub-Campus-Gescher/

Visual Studio Code: Mein neuer Lieblingseditor für PowerShell

Seit einiger Zeit habe ich Visual Studio Code für mich entdeckt, vor allem für das Erstellen von PowerShell Scripten.

Visual Studio Code kann hier heruntergeladen werden: https://code.visualstudio.com/ . Auf der Seite gibt es auch weitere Informationen zu Visual Studio Code.

Was Visual Studio besonders attraktiv macht, ist dass es plattformübergreifend (Win, Mac, Linux) ist, die Setup Datei mit unter 40 MB relativ klein ist und vor allem, dass es eine Menge Extensions gibt, unter anderem eine für PowerShell.

Nach der PowerShell Extension muss man nicht lange suchen, denn beim ersten Öffnen einer .ps1 Datei erscheint direkt ein entsprechender Hinweis:

VSCode01
Hinweis zur Installation der PowerShell Extension beim ersten Öffnen einer .ps1 Datei

In der Galerie werden direkt die empfohlenen Extensions angezeigt und man kann diese direkt installieren.

VSCode02
Auflistung der empfohlenen Extensions mit der Möglichkeit zum direkten Download

Die PowerShell Extension bringt unter anderem IntelliSense

VSCode03
IntelliSense bei der Eingabe von get-service

sowie Debugging Optionen für PowerShell mit:

VSCode05
1) Haltepunkt im PowerShell Script
2) Direkteingabefenster
3) Überwachungsfenster mit Anzeige der Variablen

Das alles macht Visual Studio Code für mich zu einem der besten PowerShell Entwicklungsumgebungen.

Seit ihr anderer Meinung oder habt bessere Editoren? Ich bin gespannt auf eure Kommentare.

Mittlerweile habe ich nicht mal mehr Notepad++ auf meinem Rechner und nutze Visual Studio Code auch als einfachen Texteditor.

Visual Studio Code hat übrigens auch eine Git Integration. Auf der Startseite finde ich direkt den Befehl zum klonen eines Git Repository:

VSCode06
Hinweis: Git ist auf dem Rechner nicht installiert

Vorab (man beachte den Hinweis) muss ich jedoch noch Git herunterladen und installieren.

Nachdem das gemacht wurde, kann ich mein Git Repository klonen und die Änderungen wieder bereitstellen:

VSCode07
1) Übersicht der geänderten Dateien
2) Eingabe des Änderungskommentares

SharePoint Listen mit PowerShell leeren

Im Beitrag “SharePoint Beispieldaten mit PowerShell erstellen” habe ich gezeigt, wie man sehr einfach per PowerShell Beispieldaten in SharePoint Listen erzeugen kann.

Wenn ich automatisch viele Listelemente erzeuge, möchte ich Sie vielleicht auch irgendwann wieder löschen.

Dazu mal ein erster Ansatz:

Add-PSSnapin Microsoft.SharePoint.PowerShell

cls

$list = (get-spweb http://hamburg/).Lists[„Meine Liste“]

foreach($item in $list.Items)

{

$item.delete()

}

Das funktioniert leider nicht, zumindest bekomme ich die folgende Meldung:

“Collection was modified; enumeration operation may not execute.”

Meine Sammlung “$list.Items” kann ich nicht während des Schleifendurchlaufs modifizieren. Daher muss ich mein Script etwas anpassen und für das Löschen in der Schleife folgenden Code verwenden:

$list.GetItemById($item.Id).Delete()

Ich hole mir also direkt aus der Liste das Element anhand der Id des aktuellen $item im Schleifendurchlauf.

Das funktioniert, finde ich aber noch etwas uncool, denn richtig cool wird’s wenn man es mit einer Zeile hinbekommt:

(get-spweb http://hamburg/).Lists[„Meine Liste“].Items | %{$_.ParentList.GetItemById($_.Id).Delete()}

Das Script funktioniert genauso wie das Script weiter oben.

Ich hole mir alle Items aus “Meine Liste” im Rootweb meines Servers. Die ItemCollection gebe ich dann per | weiter und verarbeite jedes Element (das % ist ein Alias für ForEach-Object) in einer Schleife und lösche es wie bereits oben gezeigt. Das “$_.” steht dabei für das aktuelle Element in der Schleife

https://gist.github.com/buettiB/a5ef7aeb1830b17e7ecd89bda64c5a06

Wenn ich nun nicht alle Elemente löschen möchte, kann ich mir vorher die relevanten Elemente per CAML Query Filtern (z.B. nur diese wo die Auswahl = “Drei” ist).

https://gist.github.com/buettiB/03d601280e287910a847810d68251ec3

Die CAML Abfrage wird in Zeile 3 definiert. In Zeile 4 wird das SPQuery Objekt erzeugt und in Zeile 6 wird die Abfrage auf “Meine Liste” angewendet.

Endlich auch in der Nintex Workflow Cloud verfügbar: SharePoint Actions

In der Nintex Workflow Cloud gibt es seit dem letzten Release (23, 1. Juni 2017) endlich die Möglichkeit mit SharePoint zu agieren.

Auszug aus den Release Notes:

New SharePoint Online actions:

  • Create an item
  • Copy a file
  • Update an item
  • Delete an item
  • Retrieve an item
  • Query a list

Erster Schritt zur Nutzung der neuen Aktionen ist die Einrichtung der Verbindung zu O365

WFCloudSharePoint8

Nach Eingabe von Verbindungsnamen und SharePoint Online Tenant URL wird man zur Eingabe der O365 Kontodaten aufgefordert.

Im Workflow Designer sind nun die Aktionen für Sharepoint Online verfügbar:

WFCloudSharePoint9

Für einen ersten Workflow verwende ich die Aktionen “Create an item” und “Retrieve an item”.

Zuerst erstelle ich ein neues Listenelement, dabei konfiguriere ich die Aktion zunächst mit der Auswahl meiner O365 Verbindung, der SharePoint Site URL sowie dem Listennamen.

Dem eigentlichen Element gebe ich dann als Titel meine Initialisierungsvariable mit (dazu kommen wir dann später).

Als Rückgabewerte speichere ich die URL meines neuen Listenelements sowie die ID meines neuen Listenelements.

WFCloudSharePoint6

Um auch direkt eine zweite Aktion zu testen, hole ich mir das neu erstellte Listenelement mit “Retrieve an Item”.

Wie in der vorherigen Aktion, konfiguriere ich zunächst die Verbindung, die Site URL sowie den Listennamen per Auswahl.

Zusätzlich übergebe ich die ID des Listenelements (gespeichert aus der Rückgabe der vorherigen Aktion) um mein neu erstelltes Listenelement direkt wieder abzurufen.

Die Werte der Felder “Title” und “Created” speichere ich in entsprechenden Variablen.

WFCloudSharePoint5

Als letzten Schritt versendet mein Workflow eine E-Mail mit verschiedenen Variablen.

WFCloudSharePoint4

Als Startaktion für den Workflow verwendete ich ein “Public web form”, in dem ich als Startvariable den Namen meines neuen Listenelements abfrage.

WFCloudSharePoint7

Der Workflow wird dann über das Formular initiiert

WFCloudSharePoint3

und erstellt dann tatsächlich sogar das Listelement

WFCloudSharePoint1

und versendet die E-Mail.

WFCloudSharePoint2

Ich freu mich, dass nun endlich die ersten SharePoint Aktionen in der Nintex Workflow Cloud verfügbar sind.

Wir dürfen gespannt sein wann die nächsten Aktionen folgen und wann es ein Startevent für SharePoint Online geben wird, dieser ist leider noch nicht verfügbar.

Falls ihr den Workflow importieren möchtet, die Workflow ID lautet: 0ad7000341d541c9842f90707b31f6f4

SharePoint Beispieldaten mit PowerShell erstellen

Für Tests oder Beispielszenarien ist es hin und wieder notwendig SharePoint Listenelemente zu erzeugen.
Ganz einfach geht das natürlich mit PowerShell.
Ich habe hier mal ein Beispiel zum Erstellen von einfachen Listendaten:

Einige Erläuterungen dazu:

In Zeile 4 wird mit

$list = (get-spweb http://hamburg/).Lists[„Meine Liste“]

die Liste geholt, in der ich die Elemente erstellen möchte.

In Zeile 5 erstelle ich ein Array mit 3 Auswahlwerten

$auswahl = „Eins“, „Zwei“, „Drei“

Meine Schleife beginnt in Zeile 7 und wird so lange durchlaufen wie die Variable $i kleiner als 30 ist.

for ($i = 1; $i -le 30; $i++)

In Zeile 9 wird das neue Listenelement erzeugt und in die Variable $newItem gespeichert.

$newItem = $list.Items.Add()

In Zeile 10 setze ich den Titel. Ich formatiere dazu einen String, der sich aus einem festen Teil sowie dem aktuellen Wert der Variablen $i und dem aktuellen Datum mit Get-Date zusammen setzt

$newItem[„Title“] = ‚Element {0} erstellt {1}‘ -f $i,(Get-Date)

In meiner Testliste habe ich zusätzlich noch eine Spalte mit dem Namen „Auswahl“ und den möglichen Werten „Eins“, „Zwei“ und „Drei“ erstellt. Diese Spalte fülle ich in Zeile 11.

Mit Get-Random erstelle ich mir zunächst eine zufällige Zahl und hole dann den entsprechenden Wert aus meinem Auswahl Array (siehe Zeile 5)

$newItem[„Auswahl“] = $auswahl[(Get-Random -Maximum 3)]

So habe ich etwas Variation in meinen Beispieldaten.