Showing posts with label Automation. Show all posts
Showing posts with label Automation. Show all posts

Monday, October 19, 2009

Output Active Directory LDAP user properties to MS Word

Sometimes you want to generate Outlook signatures automatically using a users's Active Directory data. There are plenty of articles on how to do this during a user login event, but I thought I'd pass along some code in C#, because almost everything out there is in VBscript, which is fine but I'm sick of using scripts and there are certain tricks you cannot pull, like making an image, like a logo or a twitter button, into a link within the signature.  For that, you'll need the full Word Interop.

Here is a little function that will get you through the part I found trickiest.  Note that you'll need to add the following references:
  • Microsoft.Office.Interop.Word
  • System.DirectoryServices
  • System.DirectoryServices.AccountManagement...
*************************************

using Word = Microsoft.Office.Interop.Word;

using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;

protected void PrintLdapProperties()
{

Word.Application oApplication = new Microsoft.Office.Interop.Word.Application();
oApplication.Visible = true;

if (oApplication == null)
{
return;
}

string strDistinguishedName = UserPrincipal.Current.DistinguishedName;
DirectoryEntry oEntry = new DirectoryEntry("LDAP://" + strDistinguishedName);
System.DirectoryServices.PropertyCollection oColl = oEntry.Properties;
Object oMissing = System.Type.Missing;
Word.Document oDocument = oApplication.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
Word.Selection oSelection = oApplication.Selection;

int NumRows = 2;
int NumColumns = 2;

Microsoft.Office.Interop.Word.Table oTable = oSelection.Tables.Add(oSelection.Range, NumRows, NumColumns, ref oMissing, ref oMissing);

Microsoft.Office.Interop.Word.Cell oCell = oTable.Cell(1, 1);

int i = 1;

foreach (string strPropertyName in oColl.PropertyNames)

{

oCell.Select();
oSelection.TypeText(strPropertyName);
oCell.Next.Select();
oSelection.TypeText(oColl[strPropertyName].Value.ToString());
oTable.Rows.Add(ref oMissing);
oCell = oTable.Cell(i + 1, 1);
i++;

}

}