Long colorful lines of code on a computer screen

PowerShell Lotus Notes COM Schittstelle

Es gibt Momente in denen man im Domino Verzeichnis Daten ändern möchte oder muss. Prinzipiell gibt es dafür 2 Möglichkeiten:

  1. via LDAP
  2. über das Lotus Notes COM Objekt

LDAP ist ein Standard, bringt aber Nachteile mit sich:

  • Schreiboperationen sind (sofern möglich) schwierig
  • Felder mit Mehrfachwerten sind komplett spaßbefreit

Als Alternative bietet sich das COM Objekt an. Für dieses gelten die eben aufgezählten Nachteile nicht. Also stellt sich nun die Frage: „Wie macht man das in PowerShell?

Um zu starten benötigt man einen beliebigen PC, Laptop oder Server mit installiertem Notes Client. Hier wird das Script ausgeführt. Notes muss im Einzelbenutzermodus installier sein. Multi-User Installationen machen Probleme. Einzelbenutzerinstallation bedeudet, dass das Notes Data Verzeichnis nicht im Benutzerprofil abgelegt ist. Außerdem benötigt man noch einen PowerShell Script Editor, beispielsweise ISE oder Sapien PowerShell Studio.

Bevor man etwas ausführen kann, muss man sicherstellen, dass die Shell im 32-bit Modus läuft. Abhängig vom Betriebssystem und der .NET Framework Version, lokalen Berechtigungen und so weiter habe ich verschiedene funktionierende Versionen gesehen. Wegen der Vielzahl gehe ich hier nicht näher drauf ein – via Suchmaschine sind die aber leicht zu finden.

Beispiel 1:

$PowerShellRunSpace = [System.Runtime.InterOpServices.Marshal]::SizeOf([System.IntPtr])

if (($PowerShellRunSpace -ne 4) -and ($PowerShellRunSpace -ne 2)) {exit} #because you have a 64-bit PowerShell

Beispiel 2:

if([Environment]::Is64BitProcess -eq $true) {exit} #because you have a 64-bit PowerShell

Jetzt kann die Verbindung zu Notes gestartet werden. Um dies zu schaffen, muss man sich verinnerlichen wie Notes „denkt“ und im Hintergrund arbeitet. Einfach gesagt: Man muss sich so verhalten wie der Client. Um mit Notes zu arbeiten braucht man eine Notes Session, die mit Hilfe der ID und dem zugehörigen Kennwort gestartet werden kann. Einmal geöffnet, kann man sich im Rahmen der Rechte (welche dieser ID zugewiesen sind) bewegen. Also zum Beispiel Datenbanken öffnen, erstellen, Dokumente lesen, ändern, etc, … Und wie geht das alles? Mit eingebettetem LotusScript! Das bedeutet im Umkehrschluß: Wer PowerShell und Lotus Script beherrscht, kann mit einem PowerShell Script ALLES machen, was er auch per Notes Agent / Script kann. Das bedeutet für die Verbindung zum Domino Verzeichnis:

$NotesSession = New-Object -ComObject Lotus.NotesSession #open the Notes Session

$NotesSession.Initialize(“mySecretNotesPassword”) #provide the password for the ID file

#$NotesSession.Initialize() #if no password is provided, Notes will ask for the password

$NotesAdressbook = $NotesSession.GetDatabase(“Domino01/NotesOrg”, names.nsf, 0)

Wie unschwer erkennbar ist, öffnet dieser Code via Lotus Script die names.nsf vom Server „Domino01/NotesOrg“. Hier kann man auf Ansichten, Dokumente, etc zugreifen und weiter verarbeiten.

Das COM Objekt ist recht cool, aber es hat einen großen Nachteil: Manchmal ist es ziemlich langsam. Aus Erfahrung empfehle ich Funktionen wie GetDocumentByKey() und GetAllDocumentsByKey() zu nutzen wann immer es möglich ist. Dies wird die Performance drastisch erhöhen.

Happy Notes-PowerShell-Scripting!

Published by Andreas

Gründer von M365 Evangelists Cloud-Architekt, Strategieberater, Consultant für Microsoft Technologien Graph API Enthusiast, PowerShell Enthusiast