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 08.04.2014 um 14:08:47 Uhr
Formatierung hinzugefügt.

Content-ID: 234879

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

Ausgedruckt am: 22.11.2024 um 13:11 Uhr

colinardo
colinardo 08.04.2014 aktualisiert um 19:26:15 Uhr
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
teslajr
teslajr 09.04.2014 um 14:48:22 Uhr
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
colinardo
colinardo 09.04.2014 aktualisiert um 15:21:43 Uhr
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
teslajr
teslajr 09.04.2014 um 15:24:49 Uhr
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
colinardo
colinardo 09.04.2014 um 15:34:14 Uhr
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 ...
teslajr
teslajr 09.04.2014 um 16:16:23 Uhr
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
colinardo
Lösung colinardo 09.04.2014, aktualisiert am 10.04.2014 um 09:41:23 Uhr
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.
teslajr
teslajr 10.04.2014 um 09:34:27 Uhr
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