• Active Directory
    • AD Consulting
    • AD Design
      • Domain Name festlegen
      • Domain Struktur einrichten
      • Forest Struktur definieren
    • AD Management
    • AD Automation
      • Dynamic Access Control (DAC)
    • AD Federation Services
      • ADFS Betrieb
      • ADFS und Office365
      • ADFS und Cisco Unified Communications Manager
      • SAML und ADFS 2.0
  • Azure / M365
    • Azure AD
    • Microsoft 365 (O365)
  • Migration
    • Active Directory Migration
    • Exchange Migration
    • File Server Migration
    • Lotus Notes Migration
    • Novell Migration
  • Wissen
    • Alle Beiträge
    • Administration
    • PowerShell
    • Migration
    • Exchange
    • Tools
  • Kontakt
    • Wir über uns
    • Kontakt
  • EN
info@firstattribute.com
by FirstAttribute
Active Directory FAQActive Directory FAQ
  • Active Directory
    • AD Consulting
    • AD Design
      • Domain Name festlegen
      • Domain Struktur einrichten
      • Forest Struktur definieren
    • AD Management
    • AD Automation
      • Dynamic Access Control (DAC)
    • AD Federation Services
      • ADFS Betrieb
      • ADFS und Office365
      • ADFS und Cisco Unified Communications Manager
      • SAML und ADFS 2.0
  • Azure / M365
    • Azure AD
    • Microsoft 365 (O365)
  • Migration
    • Active Directory Migration
    • Exchange Migration
    • File Server Migration
    • Lotus Notes Migration
    • Novell Migration
  • Wissen
    • Alle Beiträge
    • Administration
    • PowerShell
    • Migration
    • Exchange
    • Tools
  • Kontakt
    • Wir über uns
    • Kontakt
  • EN

Einfaches Datenmapping mit Calculated Properties (PS)

Jul 18, 2019 (Letztes Update) | Posted by Danny Flemming PowerShell |

 

Einfaches Datenmapping mit Calculated Properties (PS)

In der IT gibt es sehr oft den Fall, dass man Daten in einem bestimmten Format bekommt und diese dann in ein anderes Format konvertieren muss. Das neue Format wird benötigt, um die Daten in einem anderen System weiterverarbeiten zu können. Hier kann PowerShell weiterhelfen.

Inhaltsverzeichnis

  • 1 CSV Dateien als Vorlage
    • 1.1 Umbenennung der Eigenschaften
    • 1.2 Anforderungen im Überblick
  • 2 Calculated Properties
    • 2.1 Das komplette Skript 
    • 2.2 Nützliche Erklärungen zu Select-Object und -Property
  • 3 Ausgabe der PowerShell – für Tausende User anwendbar
  • 4 Fazit

Bei meiner Suche nach Hilfestellungen zum Mapping von Daten aus verschiedenen Systemen bin ich auf das PowerShell Cmdlet ‚Calculated Properties‘ gestoßen.

CSV Dateien als Vorlage

Angenommen man erhält Daten aus einer CSV-Datei des folgenden Formats:

1
2
3
4
5
6
id,first_name,last_name,email,city,phone,mobile
1,Muire,Hellyer,mhellyer0@netscape.com,Ganjur,,284-791-8300
2,Rand,Hyndman,rhyndman1@123-reg.co.uk,Nioumamilima,,
3,Isa,Carle,icarle2@kickstarter.com,Sukogunungkrajan,822-549-3376,591-571-6261
4,Raffaello,Digance,rdigance3@sphinn.com,Bromma,,626-743-0389
5,Tatiania,Cromack,tcromack4@ucoz.ru,Gaosheng,963-597-9730,935-581-8254

Umbenennung der Eigenschaften

Die Anforderung ist, diese Nutzer auszulesen und in ein anderes Format zu konvertieren, in dem einige ihrer Eigenschaften umbenannt werden (nicht alle). Konkret sollen sich die Properties wie folgt ändern:

  • first_name soll zu firstName werden
  • last_name soll zu lastName werden

Während man sich nun als PowerShell Neuling den Kopf darüber zerbricht, wie das umzusetzen ist, kommt bereits die nächste Anforderung rein:

Aus „phone“ und „mobile“ soll im Zielobjekt lediglich eine einzige „telephone“ Eigenschaft werden. Darin steht entweder:

  • der Wert aus „phone“, sofern nicht leer
  • falls „phone“ leer ist: der Wert von „mobile“, sofern nicht leer
  • falls beide leer sind, soll „No number provided“ eingetragen werden

Active-Directory-Delegation-Powershell

Anforderungen im Überblick

Nehmen wir also die obigen Datensätze zur Hand, so gibt es folgende Transformationen:

  1. aus phone:leer, mobile:284-791-8300 soll telephone:284-791-8300 werden
  2. aus phone:leer, mobile:leer soll telephone:„No number provided“ werden
  3. aus phone:822-549-3376, mobile:591-571-6261 soll telephone:822-549-3376 werden
  4. aus phone:leer, mobile:626-743-0389 soll telephone:626-743-0389 werden
  5. aus phone:963-597-9730, mobile:935-581-8254 soll telephone:963-597-9730 werden

Wie geht man an diese Aufgabe ran? Man liest das Active Directory Faq!

 

Ich möchte eine Lösungsmöglichkeit vorstellen, die beide Problemstellungen auf sehr einfache Art löst: Calculated Properties.

Calculated Properties

Calculated Properties sind als HashTable implementiert und kommen oft zusammen mit dem Select-Object Cmdlet. Im folgenden Beispiel selektiere ich nur den ersten Datensatz der CSV-Datei und wandle „first_name“ in „firstName“ um.

PowerShell
1
2
3
$users = Import-Csv -Path "mock_data.csv" -Encoding UTF8
$user = $users[0] | Select-Object -Property @{Name="firstName";Expression={$_.first_name}}
$user

Der entscheidende Teil ist dieser:

@{Name=“firstName“;Expression={$_.first_name}}

Mit Name legt man fest, wie die Eigenschaft des Quellobjekts (first_name) im Zielobjekt heißen wird (firstName). Expression kann man einem Scriptblock zuordnen, mit dem man den Inhalt, der zur neuen Eigenschaft gehört, bestimmen bzw. berechnen kann.

Im obigen Fall ist das schon alles. Dem neuen Namen „firstName“ wird der Wert der alten Eigenschaft „first_name“ zugeordnet. In der Ausgabe sieht man nun auch nur den firstName, da nur diese Eigenschaft mit –Property ausgewählt wurde:

firstName display

Wie schon angedeutet, sind aber auch Berechnungen bzw. Scripts im Expression Block möglich. Das gibt uns, was wir brauchen, um die Telefonnummern zu erzeugen:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@{Name="telephone";Expression=
    {
    $output = ""
    if(-not([System.String]::IsNullOrWhiteSpace($_.phone)))
    {
   $output=$_.phone
    }
    elseif(-not([System.String]::IsNullOrWhiteSpace($_.mobile)))
    {    
    $output=$_.mobile
    }
    else
    {
    $output="No number provided"
    }
    $output
    }}

Der Scriptblock der Expression prüft ganz simpel, ob phone einen Wert hat. Sollte ein Wert vorhanden sein, wird dieser standardmäßig genommen, ansonsten wird geprüft, ob mobile einen Wert hat. Falls ja, wird dieser gesetzt. Sollten beide keinen Wert haben, wird „No number provided“ geschrieben.

PS: Nicht vergessen, den gesetzten Wert am Ende auch zurückzugeben.

Das komplette Skript 

Der Vollständigkeit halber das ganze Skript:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$users = Import-Csv -Path "mock_data.csv" -Encoding UTF8
$users | Format-Table
$mappedUsers = $users | Select-Object -Property
id, `
@{Name="firstName";Expression={$_.first_name}}, `
@{Name="firstName";Expression={$_.last_name}}, `
email, `
city, `
@{Name="telephone";Expression=    
{     
$output = ""
if(-not([System.String]::IsNullOrWhiteSpace($_.phone)))
{    
$output=$_.phone
}
elseif(-not([System.String]::IsNullOrWhiteSpace($_.mobile)))
{    
$output=$_.mobile
}
else
{  
$output="No number provided"
}
$output
}}
$mappedUsers | Format-Table

Nützliche Erklärungen zu Select-Object und -Property

  • Select-Object bewirkt, dass die Aktionen auf allen Datensätzen ausgeführt werden und eine neue Liste von Objekten zurückgegeben wird
  • -Property gibt an, welche Properties man im Zielobjekt haben will
  • Das Zeichen ` ermöglicht es, in PowerShell einen Befehl über mehrere Zeilen zu schreiben.
  • Zwischen den Calculated Properties setze ich id, email und city, ohne sie in einen anderen Namen zu konvertieren (braucht man diese Eigenschaften im Zielobjekt nicht, kann man sie einfach weglassen)

Ausgabe der PowerShell – für Tausende User anwendbar

Calculated Properties Ausgabe

Wie man sieht, ist das Ziel erreicht und was noch schöner ist: Die Lösung skaliert. Es würde für 1.000 oder mehr Nutzer genauso funktionieren. Bei der FirstAttribute hatten wir ein ähnliches Skript bereits für mehrere 10.000 Nutzer im Einsatz. Konkret ging es darum, Daten zwischen einem Readonly Directory und einem AD LDS zu synchronisieren. Letzteres diente als Datenbasis für unser FirstWare IDM-Portal.

Das IDM-Portal bietet Ihnen eine Vielzahl an hilfreichen Funktionalitäten, wie Self Service und Delegation. Damit können Daten direkt von Anwendern oder zuständigen Abteilungen hinzugefügt und aktualisiert werden.

Fazit

Mit Calculated Properties lassen sich auch komplexe Mapping-Operationen für Datensätze in PowerShell umsetzen. Die Syntax ist anfangs zwar etwas gewöhnungsbedürftig, aber man sollte bereit sein, dies für die damit gewonnene Flexibilität in Kauf zu nehmen.


 

FirstAttribute AG

 
FirstAttribute AG – Ihr Microsoft Consulting Partner

Wir unterstützen Sie bei PowerShell Scripting Fragen. 
Nehmen Sie Kontakt zu uns auf.
  

 

Artikel weiterempfehlen:
  • teilen
  • tweeten
  • sharen
  • xingen
  • mailen
Artikel erstellt am: 17.04.2018
Tags: Calculated PropertiescsvPowerShell
2

You also might be interested in

.Net Code in PowerShell

.Net Code (C#) und DLLs in Powershell verwenden

Mrz 3, 2015

Viele wissen, dass man in Powershell auch direkt .Net-Klassen verwenden[...]

LDAP-Powershell-Suche

LDAP Suche mit Powershell – Find-LdapObject

Aug 21, 2014

für einen täglichen Report suchte ich nach einer Möglichkeit einer[...]

PowerShell 5.0

PowerShell 5.0 Write-Information und der neue Information Stream

Mrz 14, 2017

  Mit Windows 10 und Server 2016 kommt automatisch auch[...]

Leave a Reply

<p>Danke für Ihre Anregungen, Fragen und Hinweise.<br/>Infos zum <a href="https://www.active-directory-faq.dekontakt/">Datenschutz</a></p>
Cancel Reply

FirstWare IDM-Portal im Test: IT-Administrator 08-2022

 

ADFAQ-FirstAttribute

Wer schreibt ?

Team der FirstAttribute AG

Consultants und Entwickler der FirstAttribute arbeiten seit mehr als 20 Jahren in IAM- und Cloud-Transition-Projekten.
Zusammen verfügen Sie über einen wertvollen Erfahrungsschatz im Bereich Active Directory und Azure AD und teilen diesen auf Active Directory FAQ.

Neueste Artikel

  • 8 Tipps für mehr Sicherheit in Active Directory und Backups von AD
  • Azure AD Custom Security Attributes ermöglichen flexible Berechtigungsstrukturen
  • Dateiberechtigungen in MS Teams und SharePoint Online verwalten – So funktioniert es
  • AD-Gruppen in Microsoft Teams verwenden – Dynamische Gruppen in der Praxis
  • Verbindung zwischen Microsoft 365 und SharePoint Online zu Azure AD

Unsere IAM-Lösungen

Ihre IAM-Lösung: FirstWare IDM-Portal

 

my-IAM für Cloud Identity Management in Microsoft Teams

Kontakt aufnehmen

Sie haben eine Frage oder Anmerkung? Schicken Sie uns schnell eine Nachricht.

Nachricht senden
Jetzt AD Tasks vereinfachen und delegieren: FirstWare IDM-Portal

Folgen Sie uns

Kontakt

  • FirstAttribute AG
  • Am Büchele 18, 86928 Hofstetten, Germany
  • +49 89 215 442 400
  • https://www.firstattribute.com

Schlagwörter

.Net ACL Active Directory AD LDS AD Objekt Azure AD Berechtigung Cloud cmdlets Delegation Domain Controller dynamicgroup dynamische Gruppen Exchange Exchange-Ordner Exchange-Postfach Exchange Migration Federation FirstWare Get-Mailbox Global Catalog Group Policy Gruppen Gruppenmitgliedschaft IDM-Portal LDAP m365 Microsoft Azure Migration New-ADUser Novell NTFS Office 365 PowerShell QMM QMM AD QMM Exchange Quest Migration Manager Schema Set-ADUser SID SID History Update Windows 10 Windows Server 2012 R2

Neueste Kommentare

  • activedirectoryfaq.com sharepoint login - infoslist bei Windows 365 und Azure AD verstehen in Theorie und Praxis
  • Domäne Letzte Anmeldung - ObenGesichert.com bei LastLogon vs. LastLogonTimestamp
  • Teams Code Zur Anmeldung - ObenGesichert.com bei Authentifizierung für MS Teams in hybriden Netzwerken
Login
Impressum
Datenschutzerklärung

© 2023 · Active-Directory-FAQ by firstattribute.com

Prev Next