teslajr
Goto Top

PowerShell: SQL - AD

Hallo Leute

Ich möchte aus der MS-SQL-Datenbank ActiveDirectory Benutzer updaten.

Aus der DB kann ich lesen und AD auch updaten, aber leider verstehe ich noch nicht, wie ich das über eine Variable übergebe.

Folgenden Code habe ich bisher gefunden:
$DBServer = "SQLServer"  
$databasename = "TestDB"  
$Connection = new-object system.data.sqlclient.sqlconnection 
$Connection.ConnectionString ="server=$DBServer;database=$databasename;trusted_connection=True"   
$Connection #List connection information
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand #setting object to use sql commands
$SqlQuery = @"  
SELECT * FROM testTableA
"@  
$Connection.open()
$SqlCmd.CommandText = $SqlQuery
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$SqlCmd.Connection = $Connection
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$Connection.Close()
$DataSet.Tables
#$testvar = $DataSet.Tables

Get-ADUser -identity tst | set ...

Danke & Gruss
Kommentar vom Moderator Dani am Apr 08, 2014 um 12:08:47 Uhr
Formatierung hinzugefügt.

Content-Key: 234879

Url: https://administrator.de/contentid/234879

Printed on: April 16, 2024 at 07:04 o'clock

Member: colinardo
colinardo Apr 08, 2014 updated at 17:26:15 (UTC)
Goto Top
Hi teslajr,
deine Frage ist mir nicht ganz klar. Du möchtest für jeden User im zurückgegebenen Dataset Änderungen an einem User vornehmen ? Das machst du dann z.B. so:

Für das Beispiel gehe ich jetzt mal davon aus das der Usernamen in der Datenbank in der Spalte SamAccountName steht und es eine Spalte Firma gibt. Dieser Schnippsel würde z.B. für jeden User des Dataset im AD für den User die Firma ändern.
$dbUsers = $DataSet.Tables
$dbUsers | %{Set-ADUser -Identity $_.SamAccountName -Company $_.Firma}
Zur Info: %{} entspricht foreach{}

Hoffe ich habe bei dir den Nagel auf den Kopf getroffen face-smile

Grüße Uwe
Member: teslajr
teslajr Apr 09, 2014 at 12:48:22 (UTC)
Goto Top
Hallo Uwe

ich glaube schon dass du es richtig verstanden hast.

kann ich jetzt davon ausgehen, dass wenn es eine Aenderung in der DB gibt, dass nur dieser User geändert wird?
also nicht alle User in der ganzen AD? (habe leider keine Test-Umgebung, die AD ist scharf face-smile)

z.B. Managername wird geändert für einen User, in der AD wird nur sein Manager geändert.
(der User wird anhand des SamAccountName identifiziert)

Danke & Gruss
Member: colinardo
colinardo Apr 09, 2014 updated at 13:21:43 (UTC)
Goto Top
Zitat von @teslajr:
kann ich jetzt davon ausgehen, dass wenn es eine Aenderung in der DB gibt, dass nur dieser User geändert wird?
also nicht alle User in der ganzen AD? (habe leider keine Test-Umgebung, die AD ist scharf face-smile)
z.B. Managername wird geändert für einen User, in der AD wird nur sein Manager geändert.
(der User wird anhand des SamAccountName identifiziert)
Alle User die im Export aus deiner SQL Datenbank enthalten sind (also alle in $DataSet.Tables) werden mit obigen Code geändert, und auch nur die Eigenschaft die du angibst...
Setze halt einfach zum Testen anstatt Set-ADUser einen echo Befehl in das foreach-Konstrukt.

Grüße Uwe
Member: teslajr
teslajr Apr 09, 2014 at 13:24:49 (UTC)
Goto Top
$dbUsers | %{Set-ADUser -Identity $_.SamAccountName -manager $_.Manager}

jetzt habe ich diese Fehlermeldung

Set-ADUser : Das erweiterte Attribut stellt Identitätsinformationen bereit: "Manager" konnte nicht aufgelöst werden. Grund: "Unter "DC...***" kann kein Objekt mit der ID "Max Meier" gefunden werden.".

bin jetzt etwas verwirrt...ich möchte den manager wert in Max Meier umändern, jetzt ist es leer
Member: colinardo
colinardo Apr 09, 2014 at 13:34:14 (UTC)
Goto Top
Zitat von @teslajr:
werden. Grund: "Unter "DC...***" kann kein Objekt mit der ID "Max Meier" gefunden werden.".
klar weil du hier keinen SamAccountName für den Manager verwendet hast ...
Member: teslajr
teslajr Apr 09, 2014 at 14:16:23 (UTC)
Goto Top
bin verwirrt, vielleicht bin ich zu lange dran heute... face-smile

$dbUsers | %{Set-ADUser -Identity $_.SamAccountName -manager $_.Manager}

habe ich jetzt richtig verstanden, aus der $dbUsers SamAccountName wird mit der AD -Identity abgeglichen und dann der $dbUsers-Manager in AD-manager geschrieben?

wieso sagt die Fehlermeldung Max Meier wäre die ID? es sollte nur der inhalt eines Feldes sein?

need a break... face-smile
Member: colinardo
Solution colinardo Apr 09, 2014, updated at Apr 10, 2014 at 07:41:23 (UTC)
Goto Top
Das Manager-Attribut benötigt eine besondere Behandlung (s. http://technet.microsoft.com/en-us/library/ee617215.aspx). Dies muss ein AD-User (mit seinem SAMAccountName) sein und darf kein beliebiger String sein!!!

Und bitte ab und zu mal die Referenz zu den jeweiligen CMD-Lets lesen ... das hilft ungemein und du musst nicht immer raten was da abgeht !

The following examples show how to modify the Manager property of a user object by using three methods:
-By specifying the Identity and the Manager parameters
-By passing a user object through the pipeline and specifying the Manager parameter
-By specifying the Instance parameter.

Method 1: Modify the Manager property for the "saraDavis" user by using the Identity and Manager parameters.

Set-ADUser -Identity "saraDavis" -Manager "JimCorbin"

Method 2: Modify the Manager property for the "saraDavis" user by passing the "saraDavis" user through the pipeline and specifying the Manager parameter.

Get-ADUser -Identity "saraDavis" | Set-ADUser -Manager "JimCorbin"

Method 3: Modify the Manager property for the "saraDavis" user by using the Windows PowerShell command line to modify a local instance of the "saraDavis" user. Then set the Instance parameter to the local instance.

$user = Get-ADUser -Identity "saraDavis"
$user.Manager = "JimCorbin"
Set-ADUser -Instance $user.
Member: teslajr
teslajr Apr 10, 2014 at 07:34:27 (UTC)
Goto Top
Hallo Uwe

Sorry wenn ich dich genervt habe, es war mir nicht klar, was die Fehlermeldung bedeutete bzw. den Artikel vom Technet habe ich nicht verstanden.
Jetzt ist es mir klar, werde in Zukunft diese Parameter beachten.

Danke & Gruss