Archive for the ‘Active Directory’ Category.

Get Active Directory User’s GUID and SID in C#? (Part 2)

Yesterday we learned how to Get the Current User’s Active Directory info. Today we will learn how to get a named user’s Active Directory info?

Get a named User’s Active Directory info?

The first steps are the same as yesterday.

Step 1 – Create a new Console Application project in Visual Studio.

Step 2 – Add a .NET reference to System.DirectoryServices.AccountManagement.

Step 3 – Populate the Main Method as shown below.

[csharp]
using System;
using System.DirectoryServices.AccountManagement;

namespace NamedUserAdInfo
{
class Program
{
static void Main(string[] args)
{
string userName = "Rhyous";
PrincipalContext context = new PrincipalContext(ContextType.Domain);
UserPrincipal user = UserPrincipal.FindByIdentity(context, userName);
Console.WriteLine("Name: " + user.Name);
Console.WriteLine("User: " + user.UserPrincipalName);
Console.WriteLine("GUID: " + user.Guid);
Console.WriteLine(" SID: " + user.Sid);
}
}
}
[/csharp]

The only difference between the current user and a named user is that there is a static value for the current user called UserPrincipal.Current whereas for a named user, you need the user name.

Writing a program that does both

OK, so lets make a program that takes a parameter and does both. Here it is.

[csharp]
using System;
using System.DirectoryServices.AccountManagement;

namespace GetAdUserInfo
{
class Program
{
static UserPrincipal user = UserPrincipal.Current;

static void Main(string[] args)
{
ParseArgs(args);
OutputUserInformation();
}

private static void OutputUserInformation()
{
Console.WriteLine("Name: " + user.Name);
Console.WriteLine("User: " + user.UserPrincipalName);
Console.WriteLine("GUID: " + user.Guid);
Console.WriteLine(" SID: " + user.Sid);
}

private static void ParseArgs(string[] args)
{
foreach (var arg in args)
{
if (arg.StartsWith("user=", StringComparison.CurrentCultureIgnoreCase))
{
string[] splitArgs = arg.Split("=".ToCharArray());
string userName = string.Empty;
if (splitArgs.Length == 2)
userName = splitArgs[1];
if (string.IsNullOrWhiteSpace(userName))
{
Syntax();
}

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// find a user
user = UserPrincipal.FindByIdentity(ctx, userName);
continue;
}

if (arg.StartsWith("user=", StringComparison.CurrentCultureIgnoreCase))
{
Syntax();
}

// if arg not found treat it like /?
{
Console.WriteLine("Argument not found: " + arg);
Syntax();
}
}
}

private static void Syntax()
{
String fullExeNameAndPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
String ExeName = System.IO.Path.GetFileName(fullExeNameAndPath);
Console.WriteLine(ExeName + " user=[username]");
}
}
}
[/csharp]

Here are the sample projects.
GetAdUserInfo.zip