Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Per Powershell eine Verbindung zum SQL Server und AD Benutzer anlegen

Frage Entwicklung Batch & Shell

Mitglied: pixel0815

pixel0815 (Level 1) - Jetzt verbinden

04.08.2014 um 12:35 Uhr, 2776 Aufrufe, 3 Kommentare

Moin moin zusammen,

momentan steh ich vor folgendem Problem:

01.
Import-Module ActiveDirectory 
02.
 
03.
######## Edit Here ######## 
04.
 
05.
# Path to create users in 
06.
$path="OU=_Benutzer-Import,DC=xx,DC=xx" 
07.
$user="pinneberg" 
08.
$PWD="12345" 
09.
$database="Pinneberg" 
10.
$dataSource="S070" 
11.
 
12.
# Connection string to SQL Server database 
13.
#$connectionString = "Server=s070;Initial Catalog=AdventureWorks2012;Integrated Security=SSPI;" 
14.
$connectionString = “Server=$dataSource;uid=$user; pwd=$pwd;Database=$database;Integrated Security=False;” 
15.
 
16.
# Select statement to return new user accounts 
17.
# Needs to return "sAMAccountName" & "Password" columns 
18.
# Note: Other columns names should match AD attribute name 
19.
$sql="SELECT LEFT (REPLACE(Vorname + '.' + Nachname,' ',''),20)  as sAMAccountName, 
20.
		Vorname + '.' + Nachname + '@kit.pi' as userPrincipalName, 
21.
		Vorname as givenName, 
22.
		Nachname as sn, 
23.
		Berufsbezeichnung as title, 
24.
		Telefon as telePhoneNumber, 
25.
		Strasse + ISNULL(CHAR(13) + CHAR(10) + Hausnummer,'') as streetAddress, 
26.
		Stadt as l, 
27.
		Bundesland as st, 
28.
		Postleitzahl as postalCode, 
29.
		Emailadresse as mail, 
30.
		Firma as company, 
31.
		Abteilung as department, 
32.
	    Land as co, 
33.
		Webseite as wWWHomePage, 
34.
		Kennwort as Password 
35.
FROM [Pinneberg].[dbo].[vEmployee]" 
36.
 
37.
########################### 
38.
 
39.
$cn = new-object system.data.sqlclient.sqlconnection 
40.
$cn.ConnectionString = $connectionString 
41.
$cn.Open() 
42.
$cmd = New-Object System.Data.SqlClient.SqlCommand 
43.
$cmd.CommandText = $sql 
44.
$cmd.connection = $cn 
45.
$dr = $cmd.ExecuteReader() 
46.
 
47.
$colCount = $dr.FieldCount 
48.
$sAMAccountNameOrdinal = $dr.GetOrdinal("sAMAccountName") 
49.
$PasswordOrdinal = $dr.GetOrdinal("Password") 
50.
 
51.
while ($dr.Read()) { 
52.
	# Get value of sAMAccountName column 
53.
	$sAMAccountName = $dr.GetValue($sAMAccountNameOrdinal) 
54.
	# Get value password column (converted to secure string for New-ADUser Cmdlet) 
55.
	$password = ConvertTo-SecureString -AsPlainText $dr.GetValue($PasswordOrdinal) -Force 
56.
		 
57.
	write-host "Creating user account..." $sAMAccountName 
58.
 
59.
	$otherAttributes = New-Object System.Collections.HashTable 
60.
 
61.
	# Create a hash table of attribute names and attribute values 
62.
	# Used to populate other attributes.  
63.
	for($i=0;$i -le $colCount-1;$i++) 
64.
65.
		$attribute = $dr.GetName($i) 
66.
 
67.
		switch ($attribute) 
68.
69.
			"Password"{} 		#Ignore 
70.
			"SAMAccountName" {} 	#Ignore 
71.
			default{ 
72.
				$otherAttributes.Add($attribute,$dr.GetValue($i)) 
73.
74.
75.
76.
	# Create Active Directory User Account 
77.
	New-ADUser -sAMAccountName $sAMAccountName -Name $sAMAccountName -Path $path -otherAttributes $otherAttributes -Enable $true -AccountPassword $password  
78.
 
79.
80.
 
81.
$dr.Close() 
82.
$cn.Close()
Ich habe hier http://www.wisesoft.co.uk/scripts/powershell_create_ad_user_accounts_fr ... etwas gefunden was mir echt gut gefällt. Allerdings habe ich folgendes Problem

Fehler:

Ausnahme beim Aufrufen von "ExecuteReader" mit 0 Argument(en): "Die SELECT-Berechtigung wurde für das 'vEmployee'-Objekt, 'Pinneberg'-Datenbank, '
dbo'-Schema verweigert."
Bei C:\Erstelle Benutzer aus SQL Datenbank.ps1:45 Zeichen:25

$dr = $cmd.ExecuteReader <<<< ()

+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException

Die SQL Abfrage läuft Fehlerfrei im SQL Manager. Der Benutzer pinneberg ist ein SQL Benutzer mit eigentlich allen Rechten die man anhaken kann im SQL Manager.
Gibts da noch einen Tip?

Lieber Gruß
Heiko

Mitglied: colinardo
04.08.2014, aktualisiert um 14:04 Uhr
Hallo Heiko,
du musst dem Benutzer auf deine Datenbank mindestens folgende Datenbankrollen freigeben: db_datareader
Die Vorgehensweise im MSSQL Management Studio:
Server > Sicherheit > Anmeldungen > Benutzer > Eigenschaften > Benutzerzuordnung: Datenbank auswählen und darunter die Datenbankrollen wählen.
mit eigentlich allen Rechten die man anhaken kann im SQL Manager.
wenn du da alles angehakt hast du hoffentlich nicht diese ausgewählt: db_denydatareader/-writer , denn diese bewirken genau das Gegenteil, nämlich die Verweigerung dieser Rechte.

Grüße Uwe
Bitte warten ..
Mitglied: pixel0815
04.08.2014, aktualisiert um 14:57 Uhr
Das hatte ich nicht aktiviert, habe jetzt einen anderen Benutzer genommen, nun funktioniert es fast.

Ich erhalte so eine Fehlermeldung:

Creating user account... Heiko.Test 
New-ADUser : Der Typ "System.DBNull" ist ungültig. 
Parametername: userPrincipalName 
Bei C:\Users\heiko.wellendorf\Desktop\Erstelle Benutzer aus SQL Datenbank.ps1:77 Zeichen:12 
+     New-ADUser <<<<  -sAMAccountName $sAMAccountName -Name $sAMAccountName -Path $path -otherAttributes $otherAttributes -Enable $true -AccountPa 
ssword $password  
    + CategoryInfo          : InvalidArgument: (CN=Heiko.Test,O...rt,DC=kit,DC=pi:String) [New-ADUser], ArgumentException 
    + FullyQualifiedErrorId : Der Typ "System.DBNull" ist ungültig. 
Parametername: userPrincipalName,Microsoft.ActiveDirectory.Management.Commands.NewADUser''

Das Problem ist, dass die Daten vom SQL Server irgendwie Mist sind, ich weiß aber nicht wie ich das hinbiegen soll. Ist nicht mein Streckenpferd.
Ich glaube das Problem ist das die Felder im SQL Table zuviele Zeichen enthalten die ich aber selbst nicht setze.

Hier das Skript mit dem ich die Tabelle erstellt habe


01.
  
02.
USE [Pinneberg] 
03.
GO 
04.
/****** Objekt:  Table [dbo].[vEmployee]    Skriptdatum: 08/04/2014 14:28:33 ******/ 
05.
SET ANSI_NULLS ON 
06.
GO 
07.
SET QUOTED_IDENTIFIER ON 
08.
GO 
09.
SET ANSI_PADDING ON 
10.
GO 
11.
CREATE TABLE [dbo].[vEmployee]( 
12.
	[Vorname] [char](100) NOT NULL, 
13.
	[Nachname] [char](100) NOT NULL, 
14.
	[Berufsbezeichnung] [char](150) NOT NULL, 
15.
	[Telefon] [char](50) NOT NULL, 
16.
	[Strasse] [char](100) NOT NULL, 
17.
	[Hausnummer] [char](10) NOT NULL, 
18.
	[Stadt] [char](100) NOT NULL, 
19.
	[Bundesland] [char](100) NOT NULL, 
20.
	[Emailadresse] [char](100) NOT NULL, 
21.
	[Abteilung] [char](100) NOT NULL, 
22.
	[Land] [char](10) NOT NULL, 
23.
	[Webseite] [char](50) NOT NULL, 
24.
	[Postleitzahl] [char](50) NOT NULL, 
25.
	[Firma] [char](50) NOT NULL, 
26.
) ON [PRIMARY] 
27.
 
28.
GO 
29.
SET ANSI_PADDING OFF
Wenn ich dann über den SQL Manager die Daten eintippe zum t esten, dann hab ich immer ganz viele Leerschritte hinter meinem eigentlichen Text und dann kann das Skript natürlich nix damit anfangen.

Beispiel das zusammensetzen von userPrincipalName ergibt das hier mit vielen Blanks dazwischen. Wieso?

Heiko .Test @domain.loc

Edit: Ich glaub die Blanks sind das nicht. Ich hab keine Ahnung warum ein Attribut nicht im zulässigen Bereich ist
Bitte warten ..
Mitglied: colinardo
04.08.2014, aktualisiert um 23:26 Uhr
Wenn ich dann über den SQL Manager die Daten eintippe zum t esten, dann hab ich immer ganz viele Leerschritte hinter meinem eigentlichen Text und dann kann das Skript natürlich nix damit anfangen.
Logisch weil du den Datentyp [char] mit einer festen Anzahl Zeichen verwendest anstatt z.B. [nvarchar] mit einer variablen Anzahl und Unicode-Support. http://msdn.microsoft.com/de-de/library/ms186939.aspx

In Powershell müsstest du jetzt diese zusätzlichen Blanks mit Trim() vorher eliminieren. Zusätzlich solltest du Felder auf Vorhandensein überprüfen, wenn du also keinen Wert in einer Spalte stehen hast, und du das dann an New-ADUser übergibst ist die Fehlermeldung klar System.DBNull = Kein Wert in der Spalte !
Da ich hier den Inhalt deiner DB nicht sehen kann und wie Ihr die Werte in die Datenbank geschrieben habt, kann ich nur vermuten das ihr dabei einen Fehler gemacht habt vermutlich falsche Kollation(Zeichenformat) verwendet.
Nehme also zu aller erst mal das new-aduser aus dem Script heraus, und lass dir alle Spalten in der Shell ausgeben, und überprüfe sie, erst wenn hier alles korrekt ist kannst du es wieder mit new-aduser versuchen.
ich weiß aber nicht wie ich das hinbiegen soll. Ist nicht mein Streckenpferd.
dann lass diesen Part jemand anderes übernehmen.

Ich persönlich lasse mir den Inhalt einer SQL-Tabelle immer mit folgender Funktion als Datatable zurückgeben:
01.
function Get-SQLTableContents($query,$server,$database,$username,$password){ 
02.
    $conn = new-object System.Data.SqlClient.SqlConnection 
03.
    $conn.ConnectionString = “Server=$server;Database=$database;Integrated Security=False;UID=$username;PWD=$password” 
04.
        try{ 
05.
            $conn.Open() 
06.
            $cmd = $conn.CreateCommand() 
07.
            $cmd.CommandText = $query 
08.
            $cmd.Connection = $conn 
09.
 
10.
            $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
11.
            $SqlAdapter.SelectCommand = $cmd 
12.
            $dt = New-Object System.Data.DataTable 
13.
            $SqlAdapter.Fill($dt) | out-null 
14.
            $conn.close() 
15.
            return $dt 
16.
17.
        catch{ 
18.
            echo "Fehler: $($_.Exception.Message)" 
19.
            $conn.close() 
20.
            return $false 
21.
22.
23.
 
24.
$data = Get-SQLTableContents "Select * from TestTabelle" "SERVERNAME" "DATENBANKNAME" "USERNAME" "PASSWORD" 
25.
$data | ft -AutoSize -Wrap
Grüße Uwe
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
PowerShell: SQL - AD
gelöst Frage von teslajrBatch & Shell8 Kommentare

Hallo Leute Ich möchte aus der MS-SQL-Datenbank ActiveDirectory Benutzer updaten. Aus der DB kann ich lesen und AD auch ...

Windows Userverwaltung
Mehrer Benutzer im AD anlegen und Eigenschaften übertragen ????
Frage von Snoopy76Windows Userverwaltung1 Kommentar

Hallo, ich kenn mich in der AD Welt nicht besonders aus und habe die Aufgabe bekommen an meiner Schule ...

Batch & Shell
Mehrere AD Benutzer aus CSV Datei mit PowerShell erstellen
Frage von windelterroristBatch & Shell1 Kommentar

Hallo Admins :) Mein Skript soll mehrere AD User aus einer CSV Datei per PowerShell erstellen. Soweit funktioniert das ...

Batch & Shell
Powershell: Benutzer auslesen aus AD (Get-ADUser)
gelöst Frage von SmogKielBatch & Shell2 Kommentare

HALLOOOO !! Ich versuche mich gerade in Powershell und habe ein Skript geschrieben das einen Benutzernamen aus dem AD ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 14 StundenViren und Trojaner1 Kommentar

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 18 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware10 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...

Cloud-Dienste
PIM als SaaS Nutzungsgebühr
Frage von vanTastCloud-Dienste8 Kommentare

Moin, wir haben uns ein PIM (Product Information Management) nach unseren Ansprüchen für viel Geld als SaaS-Lösung bauen lassen. ...