Hi,
sehr schön, ja die blöde PageSize... damit habe ich auch gekämpft.
Hi,
hiermit lese ich unser gesamtes Directory aus...
using System;
using System.Collections.Generic;
using System.DirectoryServices;
using System.IO;
namespace ReadOut_AD_Accounts
{
class Program
{
static void Main(string[] args)
{
DirectoryEntry dirE = new DirectoryEntry("LDAP://dchostname.vmlab.zz/dc=vmlab,dc=zz");
DirectorySearcher dirS = new DirectorySearcher(dirE);
StreamWriter outFile = new StreamWriter("C:\\out.csv", false, System.Text.Encoding.Default);
dirS.PageSize = 100;
//dirS.Filter = "(&(mail=*)(|(objectCategory=person)(objectCategory=contact)))";
dirS.Filter = "(&(|(objectCategory=person)(objectCategory=contact)))";
HashSet<string> properties = new HashSet<string>();
properties.Add("sAMAccountname");
properties.Add("displayName");
properties.Add("sn");
properties.Add("givenName");
properties.Add("title");
properties.Add("description");
properties.Add("physicalDeliveryOfficeName");
properties.Add("telephoneNumber");
properties.Add("streetAddress");
properties.Add("l");
properties.Add("st");
properties.Add("postalCode");
properties.Add("homePhone");
properties.Add("mobile");
properties.Add("facsimileTelephoneNumber");
properties.Add("info");
properties.Add("department");
properties.Add("company");
properties.Add("manager");
properties.Add("memberOf");
foreach (string property in properties)
{
Console.Write(property + ";");
outFile.Write(property + ";");
}
Console.WriteLine();
outFile.WriteLine();
foreach (SearchResult result in dirS.FindAll())
{
foreach (string property in properties)
{
Console.Write(getValue(result, property));
outFile.Write(getValue(result, property));
}
Console.WriteLine();
outFile.WriteLine();
}
outFile.Close();
Console.ReadKey();
}
static string getValue(SearchResult result, string propName)
{
if (result.Properties[propName].Count > 0)
return result.Properties[propName][0].ToString().Replace(Environment.NewLine, "\\") + ";";
return ";";
}
}
}
.....
Noch eine Frage, wie genau greife ich auf einen bestimmten Pfad zu?
D.h. wenn ich nur die User aus einer OU haben möchte heißt z.B.Nur Berlin, Gesellschaft1, Users <--
Habt ihr da eine Möglichkeit für mich?
Danke nochmal!
Dazu musst du einfach nur den LDAP Pfad anpassen.
DirectoryEntry dirE = new DirectoryEntry("LDAP://domaincontroller.domain.zz/ou=Users,ou=Gesellschaft1,ou=Berlin,dc=domain,dc=zz");
Lade dir mal einen LDAP Browser z.B. von softerra herunter. Mit dem kannst Du dann entsprechende LDAP Abfragen gegen das AD abdrücken.
Das Hilft durchaus bei der Fehlersuche, und auch am Anfang, wenn man LDAP queries noch nicht so gut hinbekommt.
Sehr hilfreich ist auch noch SelfADSI.
Gruß
tokka
Hi,
setz mal den Filter des DirectorySearcher auf
dirS.Filter = "(&(|(objectCategory=person)(objectCategory=contact)))";
Gruß
Tokka
Hallo Zusammen,
ich habe ein Frage bezüglich der "Organisation" einer Solution im VS 2010.
Ich habe eine Solution "MyLibrary" angelegt. Dieser Solution habe ich zwei Projekte (Klassenbibliothek) hinzugefügt.
Wenn ich nun meine Solution compiliere, erhalte ich pro Klassenbibliotheksprojekt eine DLL.
Meine Frage ist nun, ist es möglich, die Struktur der Solution beizubehalten, aber nur eine DLL als Release zu bekommen??
Danke
Hi,
um alle User einer bestimmten Gruppe auszugeben muss der DN der Gruppe angegeben werden. Wildcards sind dabei nicht erlaubt!!
Der Filte wäre wie folgt:
"(&(objectCategory=person)(objectClass=user)" _
& "(memberOf=cn=TestGroup,ou=Sales,dc=MyDomain,dc=com))"
Alternativ geht auch sowas:
using System.DirectoryServices;
DirectoryEntry group = new DirectoryEntry("LDAP://CN=MyGroup, …");
DirectorySearcher src = new DirectorySearcher(group "(&(objectClass=user)(objectCategory=Person))");
src.AttributeScopedQuery = "member";
src.PropertiesToLoad.Add("sn");
src.PropertiesToLoad.Add("givenName");
src.PropertiesToLoad.Add("telephoneNumber");
foreach(SearchResult res in src.FindAll())
{
Console.WriteLine("…");
}
Quelle: MSDN
Gruß
Tokka
Hallo Zusammen,
ich habe ein kleines .Net Programm entwickelt, mit dem Ich Änderungen an AD Accounts (Gruppenmitgliedschaften) vornehmen kann.
In der assebly.exe.cfg habe ich die Credentials des entsprechenden Users hinterlegt.
Führe ich das Tool als angemeldeter "Domain Admin" aus, geht alles.
Wenn Ich das Tool als "normaler" User ausführe, fällt das Tool auf die Nase.
Es ist offensichtlich, dass die hinterlegten Credentials nicht "gezogen" werden.
Habt Ihr ne Idee, wie man das Programm unter einem anderen User ausführen kann?
Gruß
Tokka
N'abend zusammen,
ich habe eine Frage zu Interfaces.
Ich habe ein Interface IPersonDAL erstellt:
interface IPersonDal
{
int Insert(string firstName, string lastName, int age);
}
Dieses wird wie folgt eingesetzt:
public class PersonDAL :IPersonDal {
public int Insert(string firstName, string lastName, int age) {
...
SqlCommand dCmd = new SqlCommand("InsertData", conn);
....
try {
...
}
...
}
Soweit ist mir alles klar!
Aber nun greife ich aus dem BLL auf die Methoden der DAL zu.
Aber wer kann mir erklären welchen es Sinn macht, die Instanziierung mittels
IPersonDal pDAL = new PersonDAL();
durchzuführen?
Bisher habe ich immer
PersonDal pDAL = new PersonDAL();
genutzt.
Danke
Ergänzug:
Wenn ich das recht verstehe, müsste ich die Instanziierung der DAL in der BLL gegen das Interface durchführen, da die Implementierung ja immer gegen ein Interface und nicht gegen eine konkrete Klasse erfolgen soll.
So wie ich es früher gemacht habe, würde die Implementierung nciht der losen Kopplung entsprechen.
Liege ich damit richtig??
Moin!
Ja, Windows2008 als Workstation zu nutzen bzw. es in eine Workstation zu verwandeln ist auch ne nette idee. Allerdings ist die Lizenz ja unwesentlich teurer 😃
Moin!
Wir stellen gerade bei einem Kunden sämtliche Server auf "Server 2008" um. Im eigenen Stall werden alle neu benötigten Server auch auf 2008 betrieben.
Aus meiner Sicht sind hier viele Verbesserungen (Clusterfähige PKI, Read-Only Domaincontroller, DFS, Password-Policy, uvm.). Gut, die Oberfläche ist gewöhnungsbedurftig, aber eigentlich ist alles ja sehr ähnlich wie in der lten Version.
Bezüglich deines Bugs schau mal hier. Da Server 2008 und Vista auf dem identischen Kernel basieren, sollte der Tipp helfen.
Gruß