<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arricc &#187; vbscript</title>
	<atom:link href="http://www.arricc.net/tag/vbscript/feed" rel="self" type="application/rss+xml" />
	<link>http://www.arricc.net</link>
	<description>50% IT snippets that I couldn&#039;t readily find existing help on. 50% drivel.</description>
	<lastBuildDate>Mon, 05 Jul 2010 23:26:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Photos in Active Directory</title>
		<link>http://www.arricc.net/active-directory-photos-sharepoint.php</link>
		<comments>http://www.arricc.net/active-directory-photos-sharepoint.php#comments</comments>
		<pubDate>Thu, 09 Nov 2006 13:12:09 +0000</pubDate>
		<dc:creator>Fizzgig</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[vbscript]]></category>
		<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[vb.net]]></category>

		<guid isPermaLink="false">http://www.arricc.net/active-directory-photos-sharepoint.php</guid>
		<description><![CDATA[UPDATE: The number one reason people come to this page is they want pictures in Outlook from the Global Address List. It appears this is now possible using Outlook 2010 against Exchange 2010 as outlined by Ilse Van Criekinge in her Technet blog. Oh my blog, how I&#8217;ve neglected you. Here&#8217;s a couple of things [...]]]></description>
			<content:encoded><![CDATA[<p>UPDATE:<br />
The number one reason people come to this page is they want pictures in Outlook from the Global Address List.<br />
It appears this is now possible using Outlook 2010 against Exchange 2010 as outlined by Ilse Van Criekinge in her <a href="http://blogs.technet.com/ilvancri/archive/2009/11/17/upload-picture-in-outlook-2010-using-the-exchange-management-shell-exchange-2010.aspx">Technet blog</a>.</p>
<hr />
Oh my blog, how I&#8217;ve neglected you.</p>
<p>Here&#8217;s a couple of things I managed to cook up at work this week, again after spending an inordinate amount of time on Google looking for the answer and having to piece it together bit by bit.</p>
<p>The problem: how to store (and retrieve) staff photos in Active Directory. After the first twenty or so webpages I&#8217;d decided on using the jpegPhoto attribute. The secondary problem of getting the staff to submit to getting their pictures taken has already been solved by the new photopasses we&#8217;re all getting.<br />
<span id="more-27"></span></p>
<p><strong>Warning: </strong>There are some technical considerations to batch importing a large number of pictures into your AD regarding your replication topology. If you had a domain controller at the end of a very slow/poor connection then this could tie up that connection for a prolonged period of time, and as such the pictures could best be stored in ADAM or some other structured content store. </p>
<p>Ok thats the warning out of the way, now on the cool stuff:</p>
<p>1) Resize the images down to an appropriate size, I used Irfanview to batch resize the massive digital camera pics down to about 200&#215;200 pixels resulting in ~25kb files.<br />
2) Save all the pics in a directory named &#8220;Firstname Lastname.jpg&#8221;<br />
3) Run this vbscript with sufficient (Domain Admin?) rights.<br />
<div class="codeblock"><code><span class="synStatement">Const</span> ForReading <span class="synStatement">=</span> <span class="synConstant">1</span><br />InDir <span class="synStatement">=</span> <span class="synConstant">&quot;C:\Temp\Staff Photos&quot;</span><br /><span class="synPreProc">Set</span> fso <span class="synStatement">=</span> <span class="synIdentifier">CreateObject</span><span class="synStatement">(</span><span class="synConstant">&quot;Scripting.FileSystemObject&quot;</span><span class="synStatement">)</span><br /><span class="synPreProc">set</span> oIADS <span class="synStatement">=</span> <span class="synIdentifier">GetObject</span><span class="synStatement">(</span><span class="synConstant">&quot;LDAP://RootDSE&quot;</span><span class="synStatement">)</span><br />strDefaultNC <span class="synStatement">=</span> oIADS<span class="synStatement">.Get(</span><span class="synConstant">&quot;defaultnamingcontext&quot;</span><span class="synStatement">)</span><br /><span class="synPreProc">Set</span> theConn <span class="synStatement">=</span> <span class="synIdentifier">CreateObject</span><span class="synStatement">(</span><span class="synConstant">&quot;ADODB.Connection&quot;</span><span class="synStatement">)</span><br />theConn<span class="synStatement">.</span>Provider <span class="synStatement">=</span> <span class="synConstant">&quot;ADsDSOObject&quot;</span><br />theConn<span class="synStatement">.</span><span class="synPreProc">Open</span> <span class="synConstant">&quot;ADs Provider&quot;</span><br /><span class="synPreProc">Set</span> theCmd&nbsp; <span class="synStatement">=</span> <span class="synIdentifier">CreateObject</span><span class="synStatement">(</span><span class="synConstant">&quot;ADODB.Command&quot;</span><span class="synStatement">)</span><br />theCmd<span class="synStatement">.</span>ActiveConnection <span class="synStatement">=</span> theConn<br /><span class="synPreProc">Set</span> objRecordSet <span class="synStatement">=</span> <span class="synIdentifier">CreateObject</span><span class="synStatement">(</span><span class="synConstant">&quot;ADODB.Recordset&quot;</span><span class="synStatement">)</span><br /><span class="synStatement">For</span> <span class="synStatement">Each</span> tFile <span class="synStatement">In</span> fso<span class="synStatement">.</span>GetFolder<span class="synStatement">(</span>InDir<span class="synStatement">).</span><span class="synPreProc">Files</span><br />&nbsp; &nbsp; tName <span class="synStatement">=</span> tFile<span class="synStatement">.Name</span><br />&nbsp; &nbsp; <span class="synComment">'Gets the persons Name from the file by stripping the extention.</span><br />&nbsp; &nbsp; tName <span class="synStatement">=</span> <span class="synIdentifier">Left</span><span class="synStatement">(</span>tName<span class="synStatement">,</span> InStrRev<span class="synStatement">(</span>tName<span class="synStatement">,</span><span class="synConstant">&quot;.&quot;</span><span class="synStatement">)-</span><span class="synConstant">1</span><span class="synStatement">)</span><br />&nbsp; &nbsp; <span class="synComment">'You may need to tweak this bit depending on your naming conventions.</span><br />&nbsp; &nbsp; strQuery <span class="synStatement">=</span> <span class="synConstant">&quot;&lt;LDAP://&quot;</span> <span class="synStatement">&amp;</span> strDefaultNC <span class="synStatement">&amp;</span> <span class="synConstant">&quot;&gt;;&quot;</span> <span class="synStatement">&amp; _</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synConstant">&quot;(&amp;(objectClass=person)(name=&quot;</span> <span class="synStatement">&amp;</span> tName <span class="synStatement">&amp;</span> <span class="synConstant">&quot;));name,adspath;subtree&quot;</span><br />&nbsp; &nbsp; theCmd<span class="synStatement">.</span>CommandText <span class="synStatement">=</span> strQuery<br />&nbsp; &nbsp; <span class="synPreProc">Set</span> objRS <span class="synStatement">=</span> theCmd<span class="synStatement">.</span><span class="synPreProc">Execute</span><br />&nbsp; &nbsp; <span class="synStatement">If</span> objRS<span class="synStatement">.</span>RecordCount <span class="synStatement">=</span> <span class="synConstant">0</span> <span class="synStatement">Then</span><br />&nbsp; &nbsp; &nbsp;  <span class="synIdentifier">MsgBox</span> <span class="synConstant">&quot;Can't find account for &quot;</span> <span class="synStatement">&amp;</span> tName<br />&nbsp; &nbsp; <span class="synStatement">Else</span><br />&nbsp; &nbsp; &nbsp;  <span class="synPreProc">Set</span> objUser <span class="synStatement">=</span> <span class="synIdentifier">GetObject</span><span class="synStatement">(</span>objRS<span class="synStatement">(</span><span class="synConstant">&quot;adspath&quot;</span><span class="synStatement">))</span><br />&nbsp; &nbsp; &nbsp;  ObjUser<span class="synStatement">.Put</span> <span class="synConstant">&quot;jpegPhoto&quot;</span><span class="synStatement">,</span> ReadByteArray<span class="synStatement">(</span>tFile<span class="synStatement">.</span>Path<span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp;  ObjUser<span class="synStatement">.</span>SetInfo<br />&nbsp; &nbsp; <span class="synStatement">End</span> <span class="synStatement">If</span><br /><span class="synStatement">Next</span><br /><span class="synComment">'Stolen from http://www.ericphelps.com/q193998/index.htm</span><br /><span class="synStatement">Function</span> ReadByteArray<span class="synStatement">(</span>strFileName<span class="synStatement">)</span><br />&nbsp; &nbsp;  <span class="synStatement">Const</span> adTypeBinary <span class="synStatement">=</span> <span class="synConstant">1</span><br />&nbsp; &nbsp;  <span class="synStatement">Dim</span> bin<br />&nbsp; &nbsp;  <span class="synPreProc">Set</span> bin <span class="synStatement">=</span> <span class="synIdentifier">CreateObject</span><span class="synStatement">(</span><span class="synConstant">&quot;ADODB.Stream&quot;</span><span class="synStatement">)</span><br />&nbsp; &nbsp;  bin<span class="synStatement">.Type</span> <span class="synStatement">=</span> adTypeBinary<br />&nbsp; &nbsp;  bin<span class="synStatement">.</span><span class="synPreProc">Open</span><br />&nbsp; &nbsp;  bin<span class="synStatement">.</span>LoadFromFile strFileName<br />&nbsp; &nbsp;  ReadByteArray <span class="synStatement">=</span> bin<span class="synStatement">.</span>Read<br /><span class="synStatement">End</span> <span class="synStatement">Function</span><br /></code></div><br />
Download: <a id="p29" href="http://www.arricc.net/wp-content/uploads/userphotovb.txt">UserPhoto.vb</a></p>
<p>Ok, thats the import done. I&#8217;m not entirely sure that that is the most appropriate format to store the pictures in, but they can be retrieved with the code below.</p>
<p>As part of a project I&#8217;m working on I&#8217;m looking at the implementation of <a href="http://www.microsoft.com/sharepoint">Sharepoint</a> across various parts of our company, so lets create a SharePoint Webpart to display the pics!</p>
<p>My first problem was how to create a webpart to output an image, not link to an image. In the end, thanks mainly to <a href="http://binaryjam.wordpress.com/2006/09/27/dynamic-images-from-web-parts/">Simon Tocker</a> I managed to get it working.</p>
<p><div class="codeblock"><code>Imports System<br />Imports System<span class="synStatement">.</span>ComponentModel<br />Imports System<span class="synStatement">.</span>Web<span class="synStatement">.</span>UI<br />Imports System<span class="synStatement">.</span>Web<span class="synStatement">.</span>UI<span class="synStatement">.</span>WebControls<br />Imports System<span class="synStatement">.</span>Xml<span class="synStatement">.</span>Serialization<br />Imports Microsoft<span class="synStatement">.</span>SharePoint<br />Imports Microsoft<span class="synStatement">.</span>SharePoint<span class="synStatement">.</span>Utilities<br />Imports Microsoft<span class="synStatement">.</span>SharePoint<span class="synStatement">.</span>WebPartPages<br />Imports System<span class="synStatement">.</span>DirectoryServices<br />Imports System<span class="synStatement">.</span>Drawing<br /><span class="synComment">'Description for UserPhoto.</span><br /><span class="synStatement">&lt;</span>DefaultProperty<span class="synStatement">(</span><span class="synConstant">&quot;Text&quot;</span><span class="synStatement">),</span> ToolboxData<span class="synStatement">(</span><span class="synConstant">&quot;&lt;{0}:UserPhoto runat=server&gt;&lt;/{0}:UserPhoto&gt;&quot;</span><span class="synStatement">),</span> XmlRoot<span class="synStatement">(</span>Namespace:<span class="synStatement">=</span><span class="synConstant">&quot;WebParts&quot;</span><span class="synStatement">)&gt; _</span><br /><span class="synStatement">Public</span> Class UserPhoto<br />&nbsp; &nbsp; Inherits Microsoft<span class="synStatement">.</span>SharePoint<span class="synStatement">.</span>WebPartPages<span class="synStatement">.</span>WebPart<br />&nbsp; &nbsp; <span class="synStatement">Implements</span> System<span class="synStatement">.</span>Web<span class="synStatement">.</span>IHttpHandler<br />&nbsp; &nbsp; <span class="synStatement">Private</span> <span class="synStatement">Const</span> _defaultText <span class="synStatement">As</span> <span class="synType">String</span> <span class="synStatement">=</span> <span class="synConstant">&quot;&quot;</span><br />&nbsp; &nbsp; <span class="synStatement">Dim</span> _name <span class="synStatement">As</span> <span class="synType">String</span> <span class="synStatement">=</span> _defaultText<br />&nbsp; &nbsp; <span class="synComment">' Dim imgCtrl As Image</span><br />&nbsp; &nbsp; <span class="synStatement">&lt;</span>Browsable<span class="synStatement">(</span><span class="synConstant">True</span><span class="synStatement">),</span> Category<span class="synStatement">(</span><span class="synConstant">&quot;Miscellaneous&quot;</span><span class="synStatement">),</span> DefaultValue<span class="synStatement">(</span>_defaultText<span class="synStatement">),</span> WebPartStorage<span class="synStatement">(</span>Storage<span class="synStatement">.</span>Shared<span class="synStatement">),</span> FriendlyName<span class="synStatement">(</span><span class="synConstant">&quot;Users Name&quot;</span><span class="synStatement">),</span> Description<span class="synStatement">(</span><span class="synConstant">&quot;Text Property&quot;</span><span class="synStatement">)&gt; _</span><br />&nbsp; &nbsp; <span class="synStatement">Property</span> [UName]<span class="synStatement">()</span> <span class="synStatement">As</span> <span class="synType">String</span><br />&nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Get</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Return</span> _name<br />&nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">End</span> <span class="synStatement">Get</span><br />&nbsp; &nbsp; &nbsp; &nbsp; <span class="synPreProc">Set</span><span class="synStatement">(ByVal</span> Value <span class="synStatement">As</span> <span class="synType">String</span><span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _name <span class="synStatement">=</span> Value<br />&nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">End</span> <span class="synPreProc">Set</span><br />&nbsp; &nbsp; <span class="synStatement">End</span> <span class="synStatement">Property</span><br />&nbsp; &nbsp; <span class="synComment">'Render this Web Part to the output parameter specified.</span><br />&nbsp; &nbsp; Protected Overrides <span class="synStatement">Sub</span> RenderWebPart<span class="synStatement">(ByVal</span> output <span class="synStatement">As</span> System<span class="synStatement">.</span>Web<span class="synStatement">.</span>UI<span class="synStatement">.</span>HtmlTextWriter<span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; EnsureChildControls<span class="synStatement">()</span><br />&nbsp; &nbsp; &nbsp; &nbsp; output<span class="synStatement">.Write(</span><span class="synConstant">&quot;&lt;center&gt;&lt;img src='_layouts/uImage.ashx?user=&quot;</span> <span class="synStatement">&amp;</span> SPEncode<span class="synStatement">.</span>UrlEncode<span class="synStatement">(</span>UName<span class="synStatement">)</span> <span class="synStatement">&amp;</span> <span class="synConstant">&quot;' /&gt;&lt;/center&gt;&quot;</span><span class="synStatement">)</span><br />&nbsp; &nbsp; <span class="synStatement">End</span> <span class="synStatement">Sub</span><br />&nbsp; &nbsp; Protected Overrides <span class="synStatement">Sub</span> EnsureChildControls<span class="synStatement">()</span><br />&nbsp; &nbsp; <span class="synStatement">End</span> <span class="synStatement">Sub</span><br />&nbsp; &nbsp; <span class="synStatement">Public</span> ReadOnly <span class="synStatement">Property</span> IsReusable<span class="synStatement">()</span> <span class="synStatement">As</span> <span class="synType">Boolean</span> <span class="synStatement">Implements</span> System<span class="synStatement">.</span>Web<span class="synStatement">.</span>IHttpHandler<span class="synStatement">.</span>IsReusable<br />&nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Get</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Return</span> <span class="synConstant">True</span><br />&nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">End</span> <span class="synStatement">Get</span><br />&nbsp; &nbsp; <span class="synStatement">End</span> <span class="synStatement">Property</span><br />&nbsp; &nbsp; <span class="synStatement">Public</span> <span class="synStatement">Sub</span> ProcessRequest<span class="synStatement">(ByVal</span> context <span class="synStatement">As</span> System<span class="synStatement">.</span>Web<span class="synStatement">.</span>HttpContext<span class="synStatement">)</span> <span class="synStatement">Implements</span> System<span class="synStatement">.</span>Web<span class="synStatement">.</span>IHttpHandler<span class="synStatement">.</span>ProcessRequest<br />&nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Dim</span> response <span class="synStatement">As</span> System<span class="synStatement">.</span>Web<span class="synStatement">.</span>HttpResponse <span class="synStatement">=</span> context<span class="synStatement">.</span>Response<br />&nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Dim</span> request <span class="synStatement">As</span> System<span class="synStatement">.</span>Web<span class="synStatement">.</span>HttpRequest <span class="synStatement">=</span> context<span class="synStatement">.</span>Request<br />&nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Dim</span> who <span class="synStatement">As</span> <span class="synType">String</span><br />&nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Dim</span> outImg <span class="synStatement">As</span> System<span class="synStatement">.</span>Drawing<span class="synStatement">.</span>Image<br />&nbsp; &nbsp; &nbsp; &nbsp; Try<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Dim</span> AuthUser <span class="synStatement">As</span> <span class="synType">String</span> <span class="synStatement">=</span> <span class="synIdentifier">Right</span><span class="synStatement">(</span>request<span class="synStatement">.</span>ServerVariables<span class="synStatement">(</span><span class="synConstant">&quot;AUTH_USER&quot;</span><span class="synStatement">),</span> <span class="synIdentifier">Len</span><span class="synStatement">(</span>request<span class="synStatement">.</span>ServerVariables<span class="synStatement">(</span><span class="synConstant">&quot;AUTH_USER&quot;</span><span class="synStatement">))</span> <span class="synStatement">-</span> <span class="synIdentifier">InStr</span><span class="synStatement">(</span>request<span class="synStatement">.</span>ServerVariables<span class="synStatement">(</span><span class="synConstant">&quot;AUTH_USER&quot;</span><span class="synStatement">),</span> <span class="synConstant">&quot;\&quot;</span><span class="synStatement">))</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Dim</span> ds <span class="synStatement">As</span> New DirectorySearcher<span class="synStatement">(</span><span class="synConstant">&quot;ldap://dc=example,dc=net&quot;</span><span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">If</span> <span class="synStatement">Not</span> <span class="synStatement">(</span>request<span class="synStatement">.</span>QueryString<span class="synStatement">(</span><span class="synConstant">&quot;user&quot;</span><span class="synStatement">)</span> <span class="synStatement">Is</span> <span class="synConstant">Nothing</span><span class="synStatement">)</span> <span class="synStatement">Then</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; who <span class="synStatement">=</span> request<span class="synStatement">.</span>QueryString<span class="synStatement">(</span><span class="synConstant">&quot;user&quot;</span><span class="synStatement">).</span>ToString<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">End</span> <span class="synStatement">If</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ds<span class="synStatement">.</span>Filter <span class="synStatement">=</span> <span class="synConstant">&quot;(&amp;&quot;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">If</span> who <span class="synStatement">&lt;&gt;</span> <span class="synConstant">&quot;&quot;</span> <span class="synStatement">Then</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ds<span class="synStatement">.</span>Filter <span class="synStatement">&amp;=</span> <span class="synConstant">&quot;(name=&quot;</span> <span class="synStatement">&amp;</span> who <span class="synStatement">&amp;</span> <span class="synConstant">&quot;)&quot;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Else</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ds<span class="synStatement">.</span>Filter <span class="synStatement">&amp;=</span> <span class="synConstant">&quot;(sAMAccountname=&quot;</span> <span class="synStatement">&amp;</span> AuthUser <span class="synStatement">&amp;</span> <span class="synConstant">&quot;)&quot;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">End</span> <span class="synStatement">If</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ds<span class="synStatement">.</span>Filter <span class="synStatement">&amp;=</span> <span class="synConstant">&quot;(jpegPhoto=*))&quot;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Dim</span> res <span class="synStatement">As</span> SearchResult<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res <span class="synStatement">=</span> ds<span class="synStatement">.</span>FindOne<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Try<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">If</span> <span class="synStatement">Not</span> <span class="synStatement">(</span>res <span class="synStatement">Is</span> <span class="synConstant">Nothing</span><span class="synStatement">)</span> <span class="synStatement">Then</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synComment">'Dim imgStr As String = res.Properties(&quot;jpegPhoto&quot;).Item(0)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Dim</span> imgByte<span class="synStatement">()</span> <span class="synStatement">As</span> <span class="synType">Byte</span> <span class="synStatement">=</span> res<span class="synStatement">.</span>Properties<span class="synStatement">(</span><span class="synConstant">&quot;jpegPhoto&quot;</span><span class="synStatement">).</span><span class="synPreProc">Item</span><span class="synStatement">(</span><span class="synConstant">0</span><span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Dim</span> ms <span class="synStatement">As</span> System<span class="synStatement">.</span>IO<span class="synStatement">.</span>MemoryStream<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ms <span class="synStatement">=</span> New System<span class="synStatement">.</span>IO<span class="synStatement">.</span>MemoryStream<span class="synStatement">(</span>imgByte<span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Dim</span> newImage <span class="synStatement">As</span> System<span class="synStatement">.</span>Drawing<span class="synStatement">.</span>Image<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newImage <span class="synStatement">=</span> System<span class="synStatement">.</span>Drawing<span class="synStatement">.</span>Image<span class="synStatement">.</span>FromStream<span class="synStatement">(</span>ms<span class="synStatement">,</span> <span class="synConstant">True</span><span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response<span class="synStatement">.</span>ContentType <span class="synStatement">=</span> <span class="synConstant">&quot;image/jpeg&quot;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newImage<span class="synStatement">.</span><span class="synPreProc">Save</span><span class="synStatement">(</span>response<span class="synStatement">.</span>OutputStream<span class="synStatement">,</span> System<span class="synStatement">.</span>Drawing<span class="synStatement">.</span>Imaging<span class="synStatement">.</span>ImageFormat<span class="synStatement">.</span>Jpeg<span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Else</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response<span class="synStatement">.</span><span class="synPreProc">Clear</span><span class="synStatement">()</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Dim</span> msg <span class="synStatement">As</span> <span class="synType">String</span> <span class="synStatement">=</span> <span class="synConstant">&quot;No image for &quot;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">If</span> who <span class="synStatement">=</span> <span class="synConstant">&quot;&quot;</span> <span class="synStatement">Then</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; msg <span class="synStatement">&amp;=</span> <span class="synConstant">&quot;you&quot;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Else</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; msg <span class="synStatement">&amp;=</span> who<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">End</span> <span class="synStatement">If</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outImg <span class="synStatement">=</span> DoImage<span class="synStatement">(</span>msg<span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response<span class="synStatement">.</span>ContentType <span class="synStatement">=</span> <span class="synConstant">&quot;image/jpeg&quot;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outImg<span class="synStatement">.</span><span class="synPreProc">Save</span><span class="synStatement">(</span>response<span class="synStatement">.</span>OutputStream<span class="synStatement">,</span> System<span class="synStatement">.</span>Drawing<span class="synStatement">.</span>Imaging<span class="synStatement">.</span>ImageFormat<span class="synStatement">.</span>Jpeg<span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">End</span> <span class="synStatement">If</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Catch ex <span class="synStatement">As</span> Exception<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response<span class="synStatement">.</span><span class="synPreProc">Clear</span><span class="synStatement">()</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outImg <span class="synStatement">=</span> DoImage<span class="synStatement">(</span>who <span class="synStatement">&amp;</span> <span class="synConstant">&quot; : &quot;</span> <span class="synStatement">&amp;</span> ex<span class="synStatement">.</span>Message<span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response<span class="synStatement">.</span>ContentType <span class="synStatement">=</span> <span class="synConstant">&quot;image/jpeg&quot;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outImg<span class="synStatement">.</span><span class="synPreProc">Save</span><span class="synStatement">(</span>response<span class="synStatement">.</span>OutputStream<span class="synStatement">,</span> System<span class="synStatement">.</span>Drawing<span class="synStatement">.</span>Imaging<span class="synStatement">.</span>ImageFormat<span class="synStatement">.</span>Jpeg<span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">End</span> Try<br />&nbsp; &nbsp; &nbsp; &nbsp; Catch es <span class="synStatement">As</span> Exception<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response<span class="synStatement">.</span><span class="synPreProc">Clear</span><span class="synStatement">()</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outImg <span class="synStatement">=</span> DoImage<span class="synStatement">(</span>who <span class="synStatement">&amp;</span> <span class="synConstant">&quot; : &quot;</span> <span class="synStatement">&amp;</span> es<span class="synStatement">.</span>Message<span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response<span class="synStatement">.</span>ContentType <span class="synStatement">=</span> <span class="synConstant">&quot;image/jpeg&quot;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outImg<span class="synStatement">.</span><span class="synPreProc">Save</span><span class="synStatement">(</span>response<span class="synStatement">.</span>OutputStream<span class="synStatement">,</span> System<span class="synStatement">.</span>Drawing<span class="synStatement">.</span>Imaging<span class="synStatement">.</span>ImageFormat<span class="synStatement">.</span>Jpeg<span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">End</span> Try<br />&nbsp; &nbsp; <span class="synStatement">End</span> <span class="synStatement">Sub</span><br />&nbsp; &nbsp; <span class="synStatement">Public</span> <span class="synStatement">Function</span> DoImage<span class="synStatement">(ByVal</span> msg <span class="synStatement">As</span> <span class="synType">String</span><span class="synStatement">,</span> Optional <span class="synStatement">ByVal</span> w <span class="synStatement">As</span> <span class="synType">Integer</span> <span class="synStatement">=</span> <span class="synConstant">200</span><span class="synStatement">,</span> Optional <span class="synStatement">ByVal</span> h <span class="synStatement">As</span> <span class="synType">Integer</span> <span class="synStatement">=</span> <span class="synConstant">50</span><span class="synStatement">)</span> <span class="synStatement">As</span> System<span class="synStatement">.</span>Drawing<span class="synStatement">.</span>Image<br />&nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Dim</span> img <span class="synStatement">As</span> System<span class="synStatement">.</span>Drawing<span class="synStatement">.</span>Image<br />&nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Dim</span> g <span class="synStatement">As</span> Graphics<br />&nbsp; &nbsp; &nbsp; &nbsp; img <span class="synStatement">=</span> New Bitmap<span class="synStatement">(</span>w<span class="synStatement">,</span> h<span class="synStatement">,</span> System<span class="synStatement">.</span>Drawing<span class="synStatement">.</span>Imaging<span class="synStatement">.</span>PixelFormat<span class="synStatement">.</span>Format32bppArgb<span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; g <span class="synStatement">=</span> Graphics<span class="synStatement">.</span>FromImage<span class="synStatement">(</span>img<span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; g<span class="synStatement">.</span>FillRectangle<span class="synStatement">(</span>New SolidBrush<span class="synStatement">(</span>Color<span class="synStatement">.</span>White<span class="synStatement">),</span> <span class="synConstant">0</span><span class="synStatement">,</span> <span class="synConstant">0</span><span class="synStatement">,</span> img<span class="synStatement">.Width,</span> img<span class="synStatement">.</span>Height<span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; g<span class="synStatement">.</span>DrawString<span class="synStatement">(</span>msg<span class="synStatement">,</span> New Font<span class="synStatement">(</span><span class="synConstant">&quot;Verdana&quot;</span><span class="synStatement">,</span> <span class="synConstant">10</span><span class="synStatement">.</span>0F<span class="synStatement">),</span> New SolidBrush<span class="synStatement">(</span>Color<span class="synStatement">.</span>Black<span class="synStatement">),</span> <span class="synConstant">0</span><span class="synStatement">,</span> <span class="synConstant">0</span><span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Return</span> img<br />&nbsp; &nbsp; <span class="synStatement">End</span> <span class="synStatement">Function</span><br />&nbsp; &nbsp; Protected Overrides <span class="synStatement">Sub</span> OnPreRender<span class="synStatement">(ByVal</span> e <span class="synStatement">As</span> System<span class="synStatement">.</span>EventArgs<span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; MyBase<span class="synStatement">.</span>OnPreRender<span class="synStatement">(</span>e<span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">If</span> UName <span class="synStatement">&lt;&gt;</span> <span class="synConstant">&quot;&quot;</span> <span class="synStatement">Then</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Me<span class="synStatement">.</span>Title <span class="synStatement">=</span> UName<br />&nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Else</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Try<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Dim</span> AuthUser <span class="synStatement">As</span> <span class="synType">String</span> <span class="synStatement">=</span> <span class="synIdentifier">Right</span><span class="synStatement">(</span>context<span class="synStatement">.</span>Request<span class="synStatement">.</span>ServerVariables<span class="synStatement">(</span><span class="synConstant">&quot;AUTH_USER&quot;</span><span class="synStatement">),</span> <span class="synIdentifier">Len</span><span class="synStatement">(</span>context<span class="synStatement">.</span>Request<span class="synStatement">.</span>ServerVariables<span class="synStatement">(</span><span class="synConstant">&quot;AUTH_USER&quot;</span><span class="synStatement">))</span> <span class="synStatement">-</span> <span class="synIdentifier">InStr</span><span class="synStatement">(</span>context<span class="synStatement">.</span>Request<span class="synStatement">.</span>ServerVariables<span class="synStatement">(</span><span class="synConstant">&quot;AUTH_USER&quot;</span><span class="synStatement">),</span> <span class="synConstant">&quot;\&quot;</span><span class="synStatement">))</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Dim</span> ds <span class="synStatement">As</span> New DirectorySearcher<span class="synStatement">(</span><span class="synConstant">&quot;ldap://dc=example,dc=net&quot;</span><span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ds<span class="synStatement">.</span>Filter <span class="synStatement">=</span> <span class="synConstant">&quot;(sAMAccountname=&quot;</span> <span class="synStatement">&amp;</span> AuthUser <span class="synStatement">&amp;</span> <span class="synConstant">&quot;)&quot;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">Dim</span> res <span class="synStatement">As</span> SearchResult<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res <span class="synStatement">=</span> ds<span class="synStatement">.</span>FindOne<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Me<span class="synStatement">.</span>Title <span class="synStatement">=</span> res<span class="synStatement">.</span>Properties<span class="synStatement">(</span><span class="synConstant">&quot;Display Name&quot;</span><span class="synStatement">).</span><span class="synPreProc">Item</span><span class="synStatement">(</span><span class="synConstant">0</span><span class="synStatement">)</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Catch<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Me<span class="synStatement">.</span>Title <span class="synStatement">=</span> <span class="synConstant">&quot;Your Photo&quot;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">End</span> Try<br />&nbsp; &nbsp; &nbsp; &nbsp; <span class="synStatement">End</span> <span class="synStatement">If</span><br />&nbsp; &nbsp; <span class="synStatement">End</span> <span class="synStatement">Sub</span><br /><span class="synStatement">End</span> Class<br /></code></div><br />
Download: <a id="p28" href="http://www.arricc.net/wp-content/uploads/photoloadervbs.txt">PhotoLoader.vbs</a></p>
<p>Additional to that .Net code, the assembly must be installed into the GAC, this made it pretty hard for me to debug the handler! I&#8217;m going to be splitting it into its own class as having the assembly installed in the GAC means it ignores the one I keep putting into /bin! Also, as mentioned by Simon you need to edit your sharepoint web.config and add a line to the httphandlers section.</p>
<p><div class="codeblock"><code><span class="synIdentifier">&lt;add </span><span class="synType">verb</span>=<span class="synConstant">&quot;GET&quot;</span><span class="synIdentifier"> </span><span class="synType">path</span>=<span class="synConstant">&quot;uImage.ashx&quot;</span><span class="synIdentifier"> </span><span class="synType">type</span>=<span class="synConstant">&quot;WebParts.UserPhoto, WebParts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5**************d&quot;</span><span class="synIdentifier"> /&gt;</span><br /></code></div><br />
I also had to set my Sharepoint trust level to Full as I kept getting a message about AllowPartiallyTrustedCallers() not being set, and I couldn&#8217;t for the life of me work out how to set it!</p>
<p class="buymebeer"><form action="https://www.paypal.com/cgi-bin/webscr" target="paypal" method="post"><input type="hidden" name="cmd" value="_xclick" /><input type="hidden" name="business" value="mark@arricc.net" /><input type="hidden" name="return" value="http://www.arricc.net/pp-thanks.php" /><input type="hidden" name="item_name" value="Buy Me a Beer for Photos in Active Directory" /><input type="hidden" name="currency_code" value="GBP" /><input type="hidden" name="amount" value="5" /><input type="image" src="http://www.arricc.net/wp-content/plugins/buy-me-beer/icon_beer.gif" align="left" alt="" title="" hspace="3" /></form><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&amp;business=mark@arricc.net&amp;currency_code=GBP&amp;amount=5&amp;return=http://www.arricc.net/pp-thanks.php&amp;item_name=Buy+Me+a+Beer+for+Photos+in+Active+Directory" target="paypal">If you find this article useful, buy me a beer!</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.arricc.net/active-directory-photos-sharepoint.php/feed</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
	</channel>
</rss>
