Hinweise zur Ausgabe von Meldungen
Auf Servern dürfen niemals die VB.Net-Funktionen Msgbox und Inputbox verwendet werden. Nutzen Sie die Funktionen VID_Write2Log, RaiseMessage oder AppData.Instance.RaiseMessage.
Beispiele für Ausgaben in die Protokolldatei des One Identity Manager Service entnehmen Sie den Skriptbeispielen auf dem Installationsmedium im Verzeichnis QBM\dvd\AddOn\SDK\ScriptSamples.
Hinweise zur Verwendung von Datumswerten
-
Ist explizit kein Datum angegeben, wird intern das Datum 30.12.1899 verwendet. Dies ist bei Wertevergleichen zu beachten, beispielsweise bei der Verwendung in Berichten.
Beispiel als Ausdruck für die Darstellung der Datenspalten in Berichten
{IIF(Person.ExitDate.ToString() = "12/30/1899 12:00:00 AM","-",Person.ExitDate)}
-
Datumszeitwerte, wie beispielsweise Erstellungsdatum oder Änderungsdatum, werden in der Datenbank mit der jeweils aktuellen UTC vermerkt. Die Objektschicht wandelt diese Zeitinformationen beim Laden eines Objektes in die jeweils gültige Zeitzoneninformationen um. Der Anwender sieht also alle Werte in seiner lokalen Zeit. Beim Speichern eines Objektes werden die aktuellen Zeitzoneninformationen in UTC Zeitinformationen umgewandelt.
Hinweis: Die Verwendung von DateTime.Now in Skripten sollte kritisch geprüft werden. Um den Wert für den Anwender anzuzeigen sollte statt DateTime.Now besser DateTime.UTCNow verwendet werden.
-
Es ist fehlerbehaftet, in Skripten Datumswerte in deutscher Notation vom Datentyp String in den Datentyp DateTime zu konvertieren:
Value = CDate("31.12.2014")
Dies führt immer dann zu Problemen, wenn das Skript in nicht-deutschen Systemen läuft. Im günstigsten Fall erhält man eine Fehlermeldung "Cast from string...to type Date is not valid.". Im ungünstigsten Fall wird das falsche Datum geliefert, da Monat und Tag vertauscht werden (aus dem 12.3.2014 wird der 3.12.2014).
Wenn möglich, sollte man in diesem Fall Zeichenkettenkonvertierungen vermeiden. Der Typ DateTime stellt für diesen Zweck verschiedene Konstruktoren zur Verfügung. Für das oben genannte Beispiel wäre das:
Value = new DateTime(2014, 12, 31)
Wenn trotzdem der Datentyp String verwendet werden soll, so ist die ISO-Notation des Datumswertes zu verwenden, da diese in allen Einstellungen korrekt umgewandelt wird:
Value = CDate("2014-12-31")
Value = CDate("2014-12-31 15:22:12")
Die komplizierte Variante ist die Angabe der zu benutzenden Kultur beziehungsweise die Angabe des Formats, in dem das Datum vorliegt:
Value = DateTime.Parse("31.12.2014", new CultureInfo("de-DE"))
Value = DateTime.ParseExact("31.12.2014", "dd.MM.yyyy", CultureInfo.InvariantCulture)
Verwendung der $-Notation
Die $-Notation wird im verwendet, um auf die Eigenschaften von Objekten zuzugreifen. Bei Verwendung der $-Notation ist darauf zu achten, dass der Wert den korrekten Datentyp erhält. Die $-Notation liefert als Standard den Typ String zurück. Wenn ein anderer Datentyp angegeben wird, erfolgt eine Umwandlung intern mittels ToString.
Als Datentypen sind zulässig:
Binary
Bool
Byte
Date
Decimal
Double
Int
Long
Short
String (Standard)
Text
Hinweis: Wenn Sie in Skripten ein $-Zeichen verwenden möchten, ohne das es den Zugriff auf einen Spaltennamen repräsentieren soll, dann müssen Sie dieses Zeichen durch Verdopplung maskieren.
Beispiel
In Windows PowerShell Skripten ist statt
theScript.AppendLine("foreach ($Domain in $Domains)")
Folgendes zu verwenden:
theScript.AppendLine("foreach ($$Domain in $$Domains)")
Detaillierte Informationen zum Thema
Zugriff auf Spalten des lokalen Objektes
Syntax
$<Spaltenname>:<Datentyp>$
Beispiele zur Verwendung in Bildungsregeln
Der Anzeigename eines Active Directory Benutzers soll aus dem Vornamen und dem Nachnamen des Active Directory Benutzers gebildet werden. Die Bildungsregel auf ADSAccount.Displayname lautet:
If $Givenname$<>"" And $Surname$<>"" Then
Value = $Surname$ & " " & $Givenname$
ElseIf $Givenname$<>"" Then
ElseIf $Surname$<>"" then
End If
Wird eine Person deaktiviert, so soll das Austrittsdatum der Person gesetzt werden. Die Bildungsregel auf Person.Exitdate lautet:
If $IsInActive:bool$ Then
End If
Verwandte Themen