• 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

Seltene AD Attribute mit PowerShell setzen

Okt 20, 2020 (Letztes Update) | Posted by Danny Flemming Administration |

 

Seltene AD Attribute mit PowerShell setzen

Mit diesem Beitrag möchte ich ein bereits auf Active-Directory-Faq.de erschienenes Thema noch einmal aufgreifen und erweitern. Im Einzelnen betrachte ich, wie man seltene oder selbstdefinierte AD-Attribute mit PowerShell setzen kann. 

Im Artikel AD PowerShell Basics 1: New-ADUser wurde erklärt, wie man mit dem PowerShell Cmdlet New-ADUser einen neuen Nutzer im Active Directory anlegen kann. Außerdem wurde erläutert, wie dies automatisch aus einer CSV-Datei zu bewerkstelligen ist.

Inhaltsverzeichnis

  • 1 Seltene AD Attribute
    • 1.1 Neue Attribute aufnehmen mit OtherAttributes
    • 1.2 Fehlermeldungen, wenn Werte null sind
    • 1.3 Herausfiltern der leeren Werte
  • 2 Das komplette Skript
  • 3 Fazit

Seltene AD Attribute

Für Standardfälle funktioniert das. Was passiert aber, wenn man beim Import AD-Attribute setzen möchte, für die das New-ADUser Cmdlet keinen Schalter anbietet? Beispiele für solche Attribute sind „roomNumber“ oder „otherTelephone“, aber auch selbstdefinierte Attribute.

Ich ergänze also die CSV-Datei testweise um die beiden Attribute:

Hinzufügen von seltenen Attributen

Neue Attribute aufnehmen mit OtherAttributes

Wie bringe ich dem New-ADUser Cmdlet nun bei, die neuen Attribute zu berücksichtigen? Für solche Fälle gibt es den -OtherAttributes Schalter. Diesem muss man eine Hashtable übergeben. Das Script wird wie folgt geändert:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$import =Import-CSV "C:\ps\test2.csv" -Delimiter ";"
foreach ($user in $import)
{
   $otherAttributes = @{
                  roomNumber = $user.RoomNumber
                  otherTelephone = $user.OtherTelephone
                  }
   $password = $user.Password | ConvertTo-SecureString -AsPlainText -Force
   New-ADUser -Path "CN=Users,DC=test,DC=net" `
               -Name $user.Name `
               -GivenName $user.FirstName `
               -Surname $user.LastName `
               -AccountPassword $Password `
               -ChangePasswordAtLogon $True `
               -Enabled $True `
               -OtherAttributes $otherAttributes
}

Die $otherAttributes-Variable beinhaltet die beiden Attribute als Key-Value-Pair. Führt man dieses Script aus, erscheinen die neuen Nutzer im AD und die Attribute sind korrekt gesetzt.

Fehlermeldungen, wenn Werte null sind

Alles gut? Leider nein. In Exports wird es immer wieder vorkommen, dass bestimmte Attribute nicht gesetzt sind. Neuer Testfall:

otherAttributes

Die nun auftretende Fehlermeldung ist nicht gerade hilfreich:

Fehlermeldung 1_Seltene AD Attribute

Interessanterweise ändert sie sich, wenn man den unvollständigen Datensatz an die letzte Stelle kopiert:

Hinzufügen von seltenen AD Attributen_3

Dann heißt es plötzlich:

Fehlermeldung 2_Seltene AD Attribute

Interessant. Die Werte dürfen also nicht null sein.  Zwar werden die anderen Nutzer, unabhängig vom angezeigten Fehler, dennoch angelegt. Diese roten Meldungen nerven jedoch und verwirren mitunter.

AD Nutzeranlage IDM-Portal

Herausfiltern der leeren Werte

Zur Beseitigung bleibt nichts Anderes übrig, als auf null zu prüfen. Ich mache das Script etwas robuster:

PowerShell
1
2
3
4
5
6
7
8
9
$otherAttributes = @{
   if(-not [System.String]::IsNullOrWhiteSpace($user.OtherTelephone))
   {
       $otherAttributes.Add('otherTelephone', $user.OtherTelephone)
   }
   if(-not [System.String]::IsNullOrWhiteSpace($user.RoomNumber))
   {
       $otherAttributes.Add('roomNumber', $user.RoomNumber)
   }

Das Problem ist, dass $otherAttributes evtl. leer bleibt und dann wiederum die obigen Fehler auslöst. Es ist ungünstig, dass das Cmdlet eine leere Hashtable nicht von selbst ignoriert. Ich muss es also selbst abfangen:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if($otherAttributes.Count -gt 0)
    {
        New-ADUser -Path "CN=Users,DC=test,DC=net" `
               -Name $user.Name `
               -GivenName $user.FirstName `
               -Surname $user.LastName `
               -AccountPassword $Password `
               -ChangePasswordAtLogon $True `
               -Enabled $True `
               -OtherAttributes $otherAttributes
    }
    else
    {
        New-ADUser -Path "CN=Users,DC=test,DC=net" `
               -Name $user.Name `
               -GivenName $user.FirstName `
               -Surname $user.LastName `
               -AccountPassword $Password `
               -ChangePasswordAtLogon $True `
               -Enabled $True `
    }

Nun ist die Frage, ob man nun jedes Mal ein weiteres if-Statement einfügen muss, wenn ein neues Attribut in der CSV hinzukommt. Mit der aktuellen Lösung schon! Das lässt sich jedoch flexibler gestalten.

Das komplette Skript

In der Funktion GetUserAttributes iteriert man über die übergebene Hashtable und filtert alle leeren Values heraus. Will man künftig andere Attribute bedienen, muss man lediglich die Hashtable $ht an einer Stelle zentral anpassen. Der restliche Code bleibt unberührt.

Das fertige Script sieht schließlich so aus:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
function GetUserAttributes($ht)
{
    $otherAttributes = @{}
    foreach ($k in $ht.Keys)
    {
         if(-not [System.String]::IsNullOrWhiteSpace($ht[$k]))
         {
            $otherAttributes.Add($k,$ht[$k])
         }
    }
    $otherAttributes
}
$import =Import-CSV "C:\ps\test2.csv" -Delimiter ";"
foreach ($user in $import)
{
    $ht = @{
            roomNumber = $user.RoomNumber
            otherTelephone = $user.OtherTelephone
        }
    $otherAttributes = GetUserAttributes($ht)
    $password = $user.Password | ConvertTo-SecureString -AsPlainText -Force
    if($otherAttributes.Count -gt 0)
    {
        New-ADUser -Path "CN=Users,DC=test,DC=net" `
               -Name $user.Name `
               -GivenName $user.FirstName `
               -Surname $user.LastName `
               -AccountPassword $Password `
               -ChangePasswordAtLogon $True `
               -Enabled $True `
               -OtherAttributes $otherAttributes
    }
    else
    {
        New-ADUser -Path "CN=Users,DC=test,DC=net" `
               -Name $user.Name `
               -GivenName $user.FirstName `
               -Surname $user.LastName `
               -AccountPassword $Password `
               -ChangePasswordAtLogon $True `
               -Enabled $True `
    }
}

Diese Lösung ist natürlich noch nicht perfekt, denn momentan funktioniert sie nur für Strings. Für die meisten AD-Attribute reicht das. Es sei darauf hingewiesen, dass Bool-Werte z.B. eine Extra-Behandlung brauchen.

Fazit

Mit dem -OtherAttributes Schalter des New-ADUser Cmdlets kann man auch CSV-Importe ausführen, die eher selten genutzte, und daher nicht direkt als Cmdlet Parameter verfügbare Attribute enthalten. Auch wenn dieser Beitrag keine vollständige Lösung für jedes denkbare Szenario darstellen kann und will, so dient er doch als guter Einstieg auf dem Weg zu einer solchen Lösung.

 

Artikel weiterempfehlen:
  • teilen
  • tweeten
  • sharen
  • xingen
  • mailen
Artikel erstellt am: 20.11.2018
Tags: GetUserAttributesNew-ADUsernull valueotherAttributesPowerShell
0

You also might be interested in

PowerShell

PowerShell Custom Objekte – eigene Objekte erstellen

Dez 10, 2015

Viele Kunden fragen mich oft, wie ich denn bei meinen[...]

active-directory-sites-mit-powershell-snip

Active Directory Sites mit Powershell automatisieren

Mrz 16, 2015

Am Ende dieses Artikels stelle ich ein fertiges Skript vor. Mit[...]

AD-PowerShell-Linux-Attribute

Linux Attribute am AD-User ändern (Powershell)

Nov 30, 2015

Will man die Linux Attribute gidNumber, uid und uidnumber per[...]

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

Wer schreibt ?

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

Neueste Artikel

  • 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
  • Microsoft Teams und Teams-Apps mit SSO über Azure AD konfigurieren
  • Authentifizierung für MS Teams in hybriden Netzwerken


FirstAttribute

Identity Management | Jobs

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

  • 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
  • Microsoft Teams Code Zur Anmeldung - ObenGesichert.com bei Authentifizierung für MS Teams in hybriden Netzwerken
Login
Impressum
Datenschutzerklärung

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

Prev Next