<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>blissful abstraction</title>
        <link>http://paulhorsfall.co.uk/Default.aspx</link>
        <description />
        <language>en-GB</language>
        <copyright>Paul Horsfall</copyright>
        <managingEditor>horsfallp@yahoo.co.uk</managingEditor>
        <generator>Subtext Version 1.9.4.78</generator>
        <image>
            <title>blissful abstraction</title>
            <url>http://paulhorsfall.co.uk/images/RSS2Image.gif</url>
            <link>http://paulhorsfall.co.uk/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Using PowerShell and Reflection to Update CanToggleHidden</title>
            <link>http://paulhorsfall.co.uk/archive/2007/11/12/Using-PowerShell-and-Reflection-to-Update-CanToggleHidden.aspx</link>
            <description>&lt;p&gt;If you have SharePoint list that contains a hidden field with the &lt;a href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.spfield.cantogglehidden.aspx"&gt;CanToggleHidden&lt;/a&gt; field set to True, there's no way for you make the field visible through either the UI or the object model. No way that is, except for to &lt;a href="http://blogs.flexnetconsult.co.uk/colinbyrne/2006/02/07/AddingAHiddenSharePointFieldInCode.aspx"&gt;use reflection to reach into the SPField class&lt;/a&gt; and have &lt;a href="http://msdn2.microsoft.com/en-us/library/ms954981.aspx"&gt;a non-public method&lt;/a&gt; do the work for you. This is the situation I found myself in and &lt;a href="http://blogs.flexnetconsult.co.uk/colinbyrne/"&gt;Colin's&lt;/a&gt; solution was perfect, but rather than creating ConsoleApplication617 I thought it would be nice to use &lt;a href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx"&gt;PowerShell&lt;/a&gt; to do this more interactively. It went a little like this:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;[System.Reflection.Assembly]::LoadWithPartialName(&lt;span class="str"&gt;"Microsoft.SharePoint"&lt;/span&gt;)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;$site = new-object &lt;span class="str"&gt;"Microsoft.SharePoint.SPSite"&lt;/span&gt; &lt;span class="str"&gt;"http://localhost/applications/ms"&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;$web = $site.OpenWeb()&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;$list = $web.Lists[&lt;span class="str"&gt;"Categorizations"&lt;/span&gt;]&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;$field = $list.Fields[&lt;span class="str"&gt;"Sequence"&lt;/span&gt;]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;$type = $field.GetType()&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;$mi = $type.GetMethod(&lt;span class="str"&gt;"SetFieldBoolValue"&lt;/span&gt;, [Reflection.BindingFlags]&lt;span class="str"&gt;"Instance,NonPublic"&lt;/span&gt;)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;$mi.Invoke($field, (&lt;span class="str"&gt;"CanToggleHidden"&lt;/span&gt;, $true))&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;$field.Hidden = $false&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;$field.Update()&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;(PowerShell's enum syntax is interesting in that it will &lt;a href="http://www.nivot.org/2007/10/12/UsingEnumeratedTypesEnumsInPowerShell.aspx"&gt;coerce a comma-separated list of values into OR'd flags&lt;/a&gt; as on line 7.)&lt;/p&gt;&lt;img src="http://paulhorsfall.co.uk/aggbug/24.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Horsfall</dc:creator>
            <guid>http://paulhorsfall.co.uk/archive/2007/11/12/Using-PowerShell-and-Reflection-to-Update-CanToggleHidden.aspx</guid>
            <pubDate>Mon, 12 Nov 2007 20:12:21 GMT</pubDate>
            <wfw:comment>http://paulhorsfall.co.uk/comments/24.aspx</wfw:comment>
            <comments>http://paulhorsfall.co.uk/archive/2007/11/12/Using-PowerShell-and-Reflection-to-Update-CanToggleHidden.aspx#feedback</comments>
            <wfw:commentRss>http://paulhorsfall.co.uk/comments/commentRss/24.aspx</wfw:commentRss>
            <trackback:ping>http://paulhorsfall.co.uk/services/trackbacks/24.aspx</trackback:ping>
        </item>
        <item>
            <title>Error - This page has been modified since you opened it. You must open the page again.</title>
            <link>http://paulhorsfall.co.uk/archive/2007/09/27/Error---This-page-has-been-modified-since-you-opened.aspx</link>
            <description>&lt;p&gt;We were seeing an intermittent problem on our MOSS farm whereby we'd receive the following error when saving changes to list items and web pages etc.&lt;/p&gt;
&lt;p&gt;"This page has been modified since you opened it. You must open the page again."&lt;/p&gt;
&lt;p&gt;There is an &lt;a href="http://support.microsoft.com/kb/892348"&gt;article on TechNet talking about a similar issue&lt;/a&gt; which affects SharePoint Portal Server 2003 when you're using Windows NLB and have affinity set to 'none' as we had on our MOSS farm. It suggests making sessions sticky (&lt;a href="http://blogs.msdn.com/joelo/archive/2007/01/05/nlb-network-load-balancing-and-sharepoint-troubleshooting-and-configuration-tips.aspx"&gt;as Joel Oleson does&lt;/a&gt;) which we've done, and up to this point it looks to have resolved the issue with no side effects.&lt;/p&gt;&lt;img src="http://paulhorsfall.co.uk/aggbug/22.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Horsfall</dc:creator>
            <guid>http://paulhorsfall.co.uk/archive/2007/09/27/Error---This-page-has-been-modified-since-you-opened.aspx</guid>
            <pubDate>Thu, 27 Sep 2007 22:52:53 GMT</pubDate>
            <wfw:comment>http://paulhorsfall.co.uk/comments/22.aspx</wfw:comment>
            <comments>http://paulhorsfall.co.uk/archive/2007/09/27/Error---This-page-has-been-modified-since-you-opened.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://paulhorsfall.co.uk/comments/commentRss/22.aspx</wfw:commentRss>
            <trackback:ping>http://paulhorsfall.co.uk/services/trackbacks/22.aspx</trackback:ping>
        </item>
        <item>
            <title>SharePoint Bookmarklets</title>
            <link>http://paulhorsfall.co.uk/archive/2007/08/13/SharePoint-Bookmarklets.aspx</link>
            <description>&lt;p&gt;To avoid littering my bookmarks toolbar with a &lt;a href="http://en.wikipedia.org/wiki/Zillion"&gt;zillion&lt;/a&gt; buttons, I've created these &lt;a href="http://en.wikipedia.org/wiki/Bookmarklet"&gt;bookmarklets&lt;/a&gt; which help get you to useful places in SharePoint &lt;u&gt;relative to the site you're currently viewing&lt;/u&gt;.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="javascript:if(typeof(L_Menu_BaseUrl)!='undefined')location.href=L_Menu_BaseUrl+'/_layouts/settings.aspx';"&gt;Current Site Settings&lt;/a&gt;  &lt;/li&gt;&lt;li&gt;&lt;a href="javascript:if(typeof(L_Menu_BaseUrl)!='undefined')location.href='/_layouts/settings.aspx';"&gt;All Site Settings&lt;/a&gt;  &lt;/li&gt;&lt;li&gt;&lt;a href="javascript:if(typeof(L_Menu_BaseUrl)!='undefined')location.href=L_Menu_BaseUrl+'/_layouts/viewlsts.aspx';"&gt;All Site Content&lt;/a&gt;  &lt;/li&gt;&lt;li&gt;&lt;a href="javascript:if(typeof(L_Menu_BaseUrl)!='undefined')location.href=L_Menu_BaseUrl+'/_layouts/mcontent.aspx';"&gt;Site Libraries and Lists&lt;/a&gt;  &lt;/li&gt;&lt;li&gt;&lt;a href="javascript:if(typeof(L_Menu_BaseUrl)!='undefined')location.href=L_Menu_BaseUrl+'/Pages/Forms/AllItems.aspx';"&gt;Pages Library&lt;/a&gt;  &lt;/li&gt;&lt;li&gt;&lt;a href="javascript:if(typeof(L_Menu_BaseUrl)!='undefined')location.href=L_Menu_BaseUrl+'/_layouts/sitemanager.aspx';"&gt;Site Content and Structure&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 0px 0px 5px; border-right-width: 0px" height="199" alt="The bookmarklets in FireFox" src="http://paulhorsfall.co.uk/images/paulhorsfall_co_uk/WindowsLiveWriter/SharePointBookmarklets_10D4E/bookmarklets_2.jpg" width="212" align="right" border="0" /&gt;  To add them to your browser, right-click on each of the links above and select "Bookmark this link" or "Add to Favorites". For convenience you'll probably want to add them to either the "Bookmarks toolbar" or "Links" folder, making sure the relevant toolbar is visible in your browser. I've added a few these to a MOSS sub-folder so that they appear as a pop-up menu. And before you say anything, I know I could &lt;a href="http://blogs.technet.com/stefan_gossner/archive/2007/05/15/adding-modify-all-site-settings-to-the-root-of-the-site-action-menu.aspx"&gt;add these to the Site Actions menu&lt;/a&gt; but I think these are quicker to use and easier to set-up.&lt;/p&gt; &lt;p&gt;Some of these are MOSS specific but it should be fairly obvious which will work with WSS. They all work in the same way, using the 'L_Menu_BaseUrl' JavaScript variable to build up the URL of a page usually in the '_layouts' folder. If I've not included a bookmarklet for that page you're always hunting for, it should be easy enough for you to put it together yourself.&lt;/p&gt; &lt;p&gt;Hope you find them useful.&lt;/p&gt;&lt;img src="http://paulhorsfall.co.uk/aggbug/21.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Horsfall</dc:creator>
            <guid>http://paulhorsfall.co.uk/archive/2007/08/13/SharePoint-Bookmarklets.aspx</guid>
            <pubDate>Mon, 13 Aug 2007 18:26:02 GMT</pubDate>
            <wfw:comment>http://paulhorsfall.co.uk/comments/21.aspx</wfw:comment>
            <comments>http://paulhorsfall.co.uk/archive/2007/08/13/SharePoint-Bookmarklets.aspx#feedback</comments>
            <wfw:commentRss>http://paulhorsfall.co.uk/comments/commentRss/21.aspx</wfw:commentRss>
            <trackback:ping>http://paulhorsfall.co.uk/services/trackbacks/21.aspx</trackback:ping>
        </item>
        <item>
            <title>Importing Existing HTML Content into MOSS</title>
            <link>http://paulhorsfall.co.uk/archive/2007/07/29/Importing-Existing-HTML-Content-into-MOSS.aspx</link>
            <description>&lt;p&gt;I had a requirement to import about 1800 pages from our existing Intranet into a new MOSS based site. Here are a few resources I've used which might be useful if you're doing something similar.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;u&gt;Programmatically Adding Pages to a MOSS Publishing Site&lt;/u&gt;&lt;br /&gt;I decided to put together a tool that would walk an XML file exported from the existing site describing the structure of the content, creating MOSS sites (from custom site definitions) and importing pages as it went. At its core is code based on Andrew Connell's &lt;a href="http://www.andrewconnell.com/blog/archive/2006/11/15/5168.aspx"&gt;Programmatically adding pages to a MOSS Publishing site&lt;/a&gt; post.&lt;br /&gt;&lt;br /&gt; &lt;/li&gt;&lt;li&gt;&lt;u&gt;Html Agility Pack - A .NET Html Parser&lt;br /&gt;&lt;/u&gt;To ensure that links within our content continue to function it was necessary to parse each Html page and pull out the href attribute from each A tag so that the Url could be rewritten. &lt;a href="http://www.codeplex.com/htmlagilitypack"&gt;Html Agility Pack&lt;/a&gt; is a wonderful .NET library that makes this simple; you load Html from files, streams or strings and query for Html nodes using XPATH. A simple href rewriting sample would look something like this:&lt;br /&gt;&lt;br /&gt; &lt;div class="CodeFormatContainer"&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;HtmlDocument doc = &lt;span class="kwrd"&gt;new&lt;/span&gt; HtmlDocument();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;doc.Load(&lt;span class="str"&gt;"file.htm"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(HtmlNode link &lt;span class="kwrd"&gt;in&lt;/span&gt; doc.DocumentElement.SelectNodes(&lt;span class="str"&gt;"//a[@href]"&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;  HtmlAttribute href = link.Attributes[&lt;span class="str"&gt;"href]"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;  href.Value = FixLink(att);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;doc.Save(&lt;span class="str"&gt;"file.htm"&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;I've ended up using this for a lot more than rewriting links as this proved the perfect opportunity to modify some ids that are better applied as classes, set certain links to open in new windows and replace tokens used by the existing CMS.&lt;br /&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;u&gt;Automatically Publishing All Items in a Publishing Site&lt;br /&gt;&lt;/u&gt;If you're doing anything like this you'll invariably find yourself with a few hundred pages to check-in, publish or approve at some point. Well, Mr. Connell has saved us some work again, &lt;a href="http://www.andrewconnell.com/blog/articles/MossStsadmWcmCommands.aspx"&gt;his extensions to stsadm.exe&lt;/a&gt; make publishing all of your pages as simple as:&lt;br /&gt;&lt;br /&gt;
&lt;div class="CodeFormatContainer"&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;stsadm.exe -o publishallitems -url http://localhost -list Pages -includesubsites&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Note: There's a bug in the version I downloaded which results in an infinite loop when using the 'includesubsites' option; the solution is documented in &lt;a href="http://www.andrewconnell.com/blog/articles/MossStsadmWcmCommands.aspx#feedback"&gt;the comments of Andrew's post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;u&gt;3rd Party Tools&lt;br /&gt;&lt;/u&gt;Depending on your specific situation it might be appropriate to look at 3rd party tools and although I've never used it, &lt;a href="http://www.metalogix.net/"&gt;Metalogix Migration Manager&lt;/a&gt; looks to be a comprehensive solution. (Their site is down at the time of posting. In the meantime, you can read more in &lt;a href="http://blogs.technet.com/stefan_gossner/archive/2006/09/11/455350.aspx"&gt;this post by Stefan Gossner&lt;/a&gt;.) If there are any other tools I should mention leave a comment and I'll add them here.&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://paulhorsfall.co.uk/aggbug/20.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Horsfall</dc:creator>
            <guid>http://paulhorsfall.co.uk/archive/2007/07/29/Importing-Existing-HTML-Content-into-MOSS.aspx</guid>
            <pubDate>Sun, 29 Jul 2007 17:29:03 GMT</pubDate>
            <wfw:comment>http://paulhorsfall.co.uk/comments/20.aspx</wfw:comment>
            <comments>http://paulhorsfall.co.uk/archive/2007/07/29/Importing-Existing-HTML-Content-into-MOSS.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://paulhorsfall.co.uk/comments/commentRss/20.aspx</wfw:commentRss>
            <trackback:ping>http://paulhorsfall.co.uk/services/trackbacks/20.aspx</trackback:ping>
        </item>
        <item>
            <title>Unable to Configure MOSS Property Import Mappings</title>
            <link>http://paulhorsfall.co.uk/archive/2007/07/13/Unable-to-Configure-MOSS-Property-Import-Mappings.aspx</link>
            <description>&lt;p&gt;Today I spent some time troubleshooting a problem whereby it wasn't possible to add or edit user profile property import mappings because the 'Data source field to map' drop down and the 'Enter field to map' text box were missing from the 'User Profile Property' page in shared services administration. Instead of seeing this:  &lt;/p&gt;&lt;p&gt;&lt;img height="210" alt="Expected Property Import Mapping Options Screenshot" src="http://paulhorsfall.co.uk/images/paulhorsfall_co_uk/WindowsLiveWriter/UnabletoConfigureMOSSPropertyImportMappi_12FA4/MOSSProfileImportFixedThumb.jpg" width="500" /&gt;  &lt;/p&gt;&lt;p&gt;I had the following, with the note 'The selection of directory service properties is disabled because the portal is in an untrusted domain or no directory service import is configured yet'.  &lt;/p&gt;&lt;p&gt;&lt;img height="224" alt="Unexpected Property Import Mapping Options Screenshot" src="http://paulhorsfall.co.uk/images/paulhorsfall_co_uk/WindowsLiveWriter/UnabletoConfigureMOSSPropertyImportMappi_12FA4/MOSSProfileImportErrorThumb.jpg" width="500" /&gt;  &lt;/p&gt;&lt;p&gt;Additionally, the 'Manage Connections' &amp;gt; 'Edit Connection' page was missing the options to select the active directory source from which to import profiles. Any attempt to change the settings on this page resulted in a popup with the following error. 'This directory service setting has not been validated because the current user is not authenticated to the directory. It may be a valid setting. Do you want to save this directory service connection setting?'  &lt;/p&gt;&lt;p&gt;Although not entirely clear, the current user to which this error refers is the account used for the shared service provider application pool. I had it configured to use a local service account which would successfully import profiles from AD (using the default content access account) but this apparently isn't enough to allow you to work with property import mappings. Once I'd switched the SSP application pool to use a domain account everything behaved as expected.  &lt;/p&gt;&lt;img src="http://paulhorsfall.co.uk/aggbug/19.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Horsfall</dc:creator>
            <guid>http://paulhorsfall.co.uk/archive/2007/07/13/Unable-to-Configure-MOSS-Property-Import-Mappings.aspx</guid>
            <pubDate>Fri, 13 Jul 2007 20:43:23 GMT</pubDate>
            <wfw:comment>http://paulhorsfall.co.uk/comments/19.aspx</wfw:comment>
            <comments>http://paulhorsfall.co.uk/archive/2007/07/13/Unable-to-Configure-MOSS-Property-Import-Mappings.aspx#feedback</comments>
            <slash:comments>14</slash:comments>
            <wfw:commentRss>http://paulhorsfall.co.uk/comments/commentRss/19.aspx</wfw:commentRss>
            <trackback:ping>http://paulhorsfall.co.uk/services/trackbacks/19.aspx</trackback:ping>
        </item>
        <item>
            <title>Passing the Trunk Test with SharePoint</title>
            <link>http://paulhorsfall.co.uk/archive/2007/06/27/Passing-the-Trunk-Test-with-SharePoint.aspx</link>
            <description>&lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="Don't Make Me Think" src="http://paulhorsfall.co.uk/images/paulhorsfall_co_uk/WindowsLiveWriter/b1e9f0791c75_5A4/dontmakemethink_1.jpg" align="right" border="0" /&gt; Having just got back from Las Vegas I've spent the last couple of days getting back up to speed on the SharePoint project I'm working on. (Actually, I've been back a little more than a week now, but never mind.) I haven't yet posted anything about the work we're doing (although I hope to change that in the not too distant future) but in essence two developers, a designer and I are working on migrating an Intranet to SharePoint. Although I certainly consider myself a developer rather than a designer the work we are doing has piqued my interest in web usability enough that I packed a copy of &lt;a href="http://www.sensible.com/buythebook.html"&gt;Don't Make Me Think&lt;/a&gt; for the trip and killed the majority of time I was awake on the flight out reading it cover to cover. If you're new to user experience or you’re looking for some help taking a fresh look at an existing site (which you may well have stopped looking at objectively a long time ago), I think you'd likely find it worth your time spending a couple of hours exploring the principals of simplicity and convention extolled in &lt;a href="http://www.sensible.com/"&gt;Steve Krug's&lt;/a&gt; excellent book. Ok, so this book is short, but not so short as to make me distilling it down to two principles fair; read &lt;a href="http://www.smartpagerank.com/articles/dont-think-review.php"&gt;this recent review&lt;/a&gt; for a more detailed appraisal. (It's worth pointing out that this book is specifically about web sites, including e-commerce sites, rather than web applications.)&lt;/p&gt; &lt;p&gt;About halfway through the book Krug presents his "Trunk Test", the idea being that there are six questions you should be able to answer "&lt;u&gt;without hesitation&lt;/u&gt;" (emphasis mine) if you were "dumped on a page somewhere deep in the bowels of a Web site". This got me thinking about how we're tackling each of these on our project and more generally about the tools that SharePoint, and in particular the MOSS web content management features give you to help make sure you pass the test.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;u&gt;What site is this? (Site ID)&lt;/u&gt;&lt;br /&gt;An easy &lt;a href="http://en.wikipedia.org/wiki/University_Challenge"&gt;starter for 10&lt;/a&gt; then, master pages are your friend. (Although you might not be on speaking terms once you've finished...) Use them to give all you pages a consistent look and feel.&lt;br /&gt;&lt;br /&gt; &lt;/li&gt;&lt;li&gt;&lt;u&gt;What page am I on? (Page Title)&lt;/u&gt;&lt;br /&gt;Again, simple on the surface, as long as you don't lose your mind and leave the page name out altogether. The trick is in the placement, and the Title field control within each of your page layouts correctly encourages you to have the title frame the content, rather than the content and the navigation for example.&lt;br /&gt;&lt;br /&gt; &lt;/li&gt;&lt;li&gt;&lt;u&gt;What are the major sections of this site?&lt;/u&gt;&lt;br /&gt;You'll probably handle this using the Global Navigation. Although it can be used as a drop down menu we prefer to configure it to display simple tabs by setting MaximumDynamicDisplayLevels to 0 on the AspMenu control within the master page. To have your root site ('Home' in our case) show up as a tab, set StaticDisplayLevels to 2 and set StartFromCurrentNode to true on PortalSiteMapDataSource. You have considerable control over the look and feel via CSS, with the ability to specify a class to be used on each tab plus two further classes to be used for the hover and selected states.&lt;br /&gt;&lt;br /&gt; &lt;/li&gt;&lt;li&gt;&lt;u&gt;What are my options at this level?&lt;/u&gt;&lt;br /&gt;Things start getting interesting when you look at SharePoint's Current Navigation. There are a lot of options available both in the GUI and as properties of the menu control that are worth experimenting with for a while. While the GUI options are set per site, the properties of the menu control are set per master page, so our approach has been to create a master page and an accompanying site definition for each level of our navigation. Each site definition sets the correct master page and navigation options for a given level, and ensures that sub-sites can only be created using an appropriate site definition. Be sure to use the PortalSiteMapDataSource site map data source here as it &lt;a href="http://msdn2.microsoft.com/en-us/library/ms558975.aspx"&gt;contains enhancements that make it more suitable than the default site map data source for use on a MOSS publishing site&lt;/a&gt;. If you've not already done so, read &lt;a href="http://blogs.msdn.com/ecm/archive/2007/02/10/moss-navigation-deep-dive-part-1.aspx"&gt;Part 1&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/ecm/archive/2007/02/16/moss-navigation-deep-dive-part-2.aspx"&gt;Part 2&lt;/a&gt; of the MOSS Navigation Deep-dive to get an overview of how all of this hangs together, then read the comments to get an idea of some of the challenges.&lt;br /&gt;&lt;br /&gt; &lt;/li&gt;&lt;li&gt;&lt;u&gt;Where am I in the scheme of things?&lt;/u&gt;&lt;br /&gt;As well as the breadcrumb (implemented using ASP.NET's &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.sitemappath.aspx"&gt;SiteMapPath&lt;/a&gt; control within PlaceHolderTitleBreadcrumb) consider the more subtle cues from the currently selected elements of the Global (tabs) and Current Navigation.&lt;br /&gt;&lt;br /&gt; &lt;/li&gt;&lt;li&gt;&lt;u&gt;How can I search?&lt;/u&gt;&lt;br /&gt;Every master page includes a search box by default and unless you have a good reason to do otherwise you should leave it there. On a publishing site use the SearchBoxEx control which is more configurable than the default SearchBox although not well documented. Have a look at the out of the box publishing master pages (BlueBand.master etc.) and &lt;a href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.portal.webcontrols.searchboxex_properties.aspx"&gt;the class documentation on MSDN&lt;/a&gt; as a starting point. (Tip: If you want your search box to respect Site Collection Administration &amp;gt; Search Settings, be sure to set the UseSiteDefaults property to true.) &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;This isn't meant to be a comprehensive list of the usability related publishing features in MOSS by any means, and don't get me wrong, this stuff can be difficult and it isn't made any easier by the sporadic documentation. However, once up the learning curve there is much at your disposal to tackle the questions Krug poses, and I'm happy with the answers we've come up with so far.&lt;/p&gt; &lt;p&gt;How are you using SharePoint to pass the Trunk Test?&lt;/p&gt;&lt;img src="http://paulhorsfall.co.uk/aggbug/18.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Horsfall</dc:creator>
            <guid>http://paulhorsfall.co.uk/archive/2007/06/27/Passing-the-Trunk-Test-with-SharePoint.aspx</guid>
            <pubDate>Wed, 27 Jun 2007 00:04:05 GMT</pubDate>
            <wfw:comment>http://paulhorsfall.co.uk/comments/18.aspx</wfw:comment>
            <comments>http://paulhorsfall.co.uk/archive/2007/06/27/Passing-the-Trunk-Test-with-SharePoint.aspx#feedback</comments>
            <wfw:commentRss>http://paulhorsfall.co.uk/comments/commentRss/18.aspx</wfw:commentRss>
            <trackback:ping>http://paulhorsfall.co.uk/services/trackbacks/18.aspx</trackback:ping>
        </item>
        <item>
            <title>Drag and Drop, Today and Tomorrow</title>
            <link>http://paulhorsfall.co.uk/archive/2007/05/31/Drag-and-Drop-Today-and-Tomorrow.aspx</link>
            <description>&lt;p&gt;Once or twice we've talked at work about how we'd like the ability to reorder programs (buttons) on the taskbar, and for a while now I've been running a small utility at home called &lt;a href="http://www.freewebs.com/nerdcave/taskbarshuffle.htm"&gt;Taskbar Shuffle&lt;/a&gt; that allows you to do just that. While it might not be quite ready to challenge &lt;a href="http://www.perceptivepixel.com/"&gt;Jeff Han's multi-touch work&lt;/a&gt; or &lt;a href="http://www.popularmechanics.com/technology/industry/4217348.html"&gt;Microsoft Surface&lt;/a&gt;, it does fill one of those "I'm surprised it's not in Windows" holes and is worth a look. (It works great on my XP box and although Vista isn't officially supported, some folk report that it runs under the 32-bit version albeit with some graphical glitches.)&lt;/p&gt; &lt;p&gt;P.S. If you download and get use from a piece of free software, don't forget to either register it or make a donation to help your fellow developer.&lt;/p&gt;&lt;img src="http://paulhorsfall.co.uk/aggbug/17.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Horsfall</dc:creator>
            <guid>http://paulhorsfall.co.uk/archive/2007/05/31/Drag-and-Drop-Today-and-Tomorrow.aspx</guid>
            <pubDate>Thu, 31 May 2007 00:34:43 GMT</pubDate>
            <wfw:comment>http://paulhorsfall.co.uk/comments/17.aspx</wfw:comment>
            <comments>http://paulhorsfall.co.uk/archive/2007/05/31/Drag-and-Drop-Today-and-Tomorrow.aspx#feedback</comments>
            <wfw:commentRss>http://paulhorsfall.co.uk/comments/commentRss/17.aspx</wfw:commentRss>
            <trackback:ping>http://paulhorsfall.co.uk/services/trackbacks/17.aspx</trackback:ping>
        </item>
        <item>
            <title>Stsadm.exe and iisreset Slow Behind Proxy on SharePoint</title>
            <link>http://paulhorsfall.co.uk/archive/2007/05/27/Stsadm.exe-and-iisreset-Slow-Behind-Proxy-on-SharePoint.aspx</link>
            <description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;While putting together &lt;a href="http://paulhorsfall.co.uk/archive/2007/05/21/SharePoint-Sysprep-and-SQL.aspx"&gt;my last post&lt;/a&gt; I ran across a strange problem where the first page access after an iisreset was taking more than 30 seconds to load. At its best, this always takes about twice as long as you'd like but this was unworkable. Worse still the same delay happened each time I used stsadm.exe or any other application that loads the SharePoint DLL. &lt;/p&gt; &lt;p&gt;After a reasonable amount of time troubleshooting this I was fast running out of ideas, and desperate enough to reach for &lt;a href="http://www.ethereal.com/"&gt;Ethereal&lt;/a&gt;. Thankfully, it was there I found the answer to my problem. Each delay was accompanied by outbound requests to http://crl.microsoft.com or http://crl.verisign.com that from behind our proxy were going nowhere fast and taking a long while to timeout. (In this case, CRL stands for &lt;a href="http://en.wikipedia.org/wiki/Certificate_revocation_list"&gt;Client Revocation List&lt;/a&gt;, and &lt;em&gt;I assume&lt;/em&gt; it is been checked to ensure the validity of the digitally signed SharePoint assemblies as they are loaded into the IIS process.) &lt;/p&gt; &lt;p&gt;The solution for my situation then, was as simple as specifying the correct proxy using &lt;a href="http://msdn2.microsoft.com/en-us/library/ms761351.aspx"&gt;proxycfg.exe&lt;/a&gt;. From a command prompt, you'd do something like this:&lt;/p&gt; &lt;div class="CodeFormatContainer"&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;proxycfg -p 192.168.0.1:8080&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class="highlight"&gt;Update 27/06/2007: You need to modify this command to exclude local addresses to prevent MOSS crawls failing, as they too respect this setting. You can exclude all local addresses (those that don't contain a dot) as follows:&lt;/span&gt;&lt;/p&gt;
&lt;div class="CodeFormatContainer"&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;proxycfg -p 192.168.0.1:8080 "&amp;lt;local&amp;gt;"&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class="highlight"&gt;Alternatively, you can exclude specific URLs:&lt;/span&gt;&lt;/p&gt;
&lt;div class="CodeFormatContainer"&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;proxycfg -p 192.168.0.1:8080 "http://moss01"&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class="highlight"&gt;See the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms761351.aspx"&gt;proxycfg.exe documentation&lt;/a&gt; for further details.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This workaround is good enough to get me going again. However,  I'm no expert on certificate infrastructure so leave me a comment if I've missed something or got something wrong.&lt;/p&gt;
&lt;p&gt;Hope this helps.&lt;/p&gt;&lt;img src="http://paulhorsfall.co.uk/aggbug/16.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Horsfall</dc:creator>
            <guid>http://paulhorsfall.co.uk/archive/2007/05/27/Stsadm.exe-and-iisreset-Slow-Behind-Proxy-on-SharePoint.aspx</guid>
            <pubDate>Sun, 27 May 2007 17:09:28 GMT</pubDate>
            <wfw:comment>http://paulhorsfall.co.uk/comments/16.aspx</wfw:comment>
            <comments>http://paulhorsfall.co.uk/archive/2007/05/27/Stsadm.exe-and-iisreset-Slow-Behind-Proxy-on-SharePoint.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://paulhorsfall.co.uk/comments/commentRss/16.aspx</wfw:commentRss>
            <trackback:ping>http://paulhorsfall.co.uk/services/trackbacks/16.aspx</trackback:ping>
        </item>
        <item>
            <title>SharePoint, Sysprep and SQL</title>
            <category>SharePoint</category>
            <link>http://paulhorsfall.co.uk/archive/2007/05/21/SharePoint-Sysprep-and-SQL.aspx</link>
            <description>&lt;p&gt;A while back, I posted about &lt;a href="http://paulhorsfall.co.uk/archive/2007/04/10/How-to-Create-a-Cloneable-SharePoint-Virtual-Machine.aspx"&gt;creating a cloneable SharePoint development machine&lt;/a&gt;. Although the method I described works well enough, you're somewhat limited by the fact that it requires you to install SharePoint in Standalone mode. This is workable for some scenarios, but the performance of &lt;a href="http://en.wikipedia.org/wiki/Windows_Internal_Database"&gt;SQL Server Embedded Edition&lt;/a&gt; (which Standalone mode uses) doesn't seem all that great, and by not running a full version of SQL you're missing out on the profiler and Reporting Services integration etc. Additionally, you're stuck running everything on one box with nowhere to go if you want to add additional virtual servers to test other topologies.&lt;/p&gt; &lt;p&gt;For these reasons, I've spent some time making Sysprep work with a Complete, rather than Standalone install of MOSS. If you've not done so already, now would probably be a good time to go back and read &lt;a href="http://paulhorsfall.co.uk/archive/2007/04/10/How-to-Create-a-Cloneable-SharePoint-Virtual-Machine.aspx"&gt;my previous post&lt;/a&gt; as I'll just point out the differences here to avoid duplication.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;If you're updating an existing Standalone install you need to uninstall SharePoint. You'll also want to &lt;a href="http://decipherinfosys.wordpress.com/2007/05/06/wss-and-sql-server-embedded-edition/"&gt;manually uninstall SSEE&lt;/a&gt;.  &lt;/li&gt;&lt;li&gt;Install a full version of SQL Server 2005 with SP2. I'm using the developer edition configured to use Windows authentication and run as Local System. (I'm happy with this, although you might want to follow the principal of least privilege and use a less powerful account.)  &lt;/li&gt;&lt;li&gt;(Re)Install SharePoint, and from the Advanced screen select Web Front End if you're using WSS, or Complete if you're using MOSS. As before, &lt;u&gt;do not run the SharePoint Products and Technologies Configuration Wizard after the install&lt;/u&gt;.  &lt;/li&gt;&lt;li&gt;Create a local account for use as a SharePoint service account. You don't need to assign any specific permissions to the account at this point, this will happen when we call &lt;a href="http://technet2.microsoft.com/Office/en-us/library/a59c4e8f-9b7f-4127-8199-1b9ab76991501033.mspx"&gt;psconfig.exe&lt;/a&gt; from our configuration script. &lt;span class="highlight"&gt;&lt;a href="http://paulhorsfall.co.uk/archive/2007/07/13/Unable-to-Configure-MOSS-Property-Import-Mappings.aspx"&gt;Update: If you intend to set-up custom profile import mappings read this follow-up post.&lt;/a&gt;&lt;/span&gt;  &lt;/li&gt;&lt;li&gt;From the zip file linked at the bottom of this post, extract mossconfig2.bat into c:\Scripts. (You will still need &lt;a href="http://paulhorsfall.co.uk/downloads/WssSysprep.zip"&gt;the files from the previous post&lt;/a&gt;.) You also need to modify c:\Sysprep\sysprep.inf to call this new script, which now takes 4 parameters:&lt;br /&gt;&lt;br /&gt; &lt;div class="CodeFormatContainer"&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;mossconfig2.bat &amp;lt;SiteOwner&amp;gt; &amp;lt;SiteOwnerEmail&amp;gt; &amp;lt;ServiceAccount&amp;gt; &amp;lt;ServiceAccountPassword&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Since this script runs after the first logon following Sysprep we can assume that the current user is the intended site owner and build the first two parameters from environment variables. The last two parameters are the username and password of the service account we created earlier. The script requires the service account username to be prefixed with the computer name, which is again achieved using environment variables. See sample.inf included in the download for an example of how to call this from Sysprep.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Once you've made these changes you can take a snapshot of the machine and run Sysprep to reseal to machine.&lt;/p&gt;
&lt;p&gt;The trick to making this work is the significantly updated configuration script that automates the work which normally happens when you run the SharePoint Products and Technologies Configuration Wizard. It looks like this:&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;@echo off&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;psconfig -cmd configdb -create -server %COMPUTERNAME% -database SharePoint_Config -user %3 -password %4&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;if not errorlevel 0 goto errhnd&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;psconfig -cmd helpcollections -installall&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;if not errorlevel 0 goto errhnd&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;psconfig -cmd secureresources&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;if not errorlevel 0 goto errhnd&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;psconfig -cmd services -install&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;if not errorlevel 0 goto errhnd&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;psconfig -cmd installfeatures&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;if not errorlevel 0 goto errhnd&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;psconfig -cmd adminvs -provision -port 8000 -windowsauthprovider onlyusentlm&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;if not errorlevel 0 goto errhnd&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;psconfig -cmd applicationcontent -install&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;:SetupServices&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;REM *** Moss Only ***&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;REM echo Starting search&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;stsadm -o osearch -action start -role indexquery -farmcontactemail %2 -farmserviceaccount %3 -farmservicepassword %4 -defaultindexlocation "C:\Program Files\Microsoft Office Servers\12.0\Data\Applications"&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;if not errorlevel 0 goto errhnd&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;:CreateSSP&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;REM *** Moss Only ***&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;REM echo Creating webapps for SSP&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;stsadm -o extendvs -url http://%COMPUTERNAME%:8010 -ownerlogin %1 -owneremail %2 -exclusivelyusentlm -apidname "SSP - 8010" -apcreatenew -apidtype configurableid -apidlogin %3 -apidpwd %4&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;if not errorlevel 0 goto errhnd&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;stsadm -o extendvs -url http://%COMPUTERNAME%:8020 -ownerlogin %1 -owneremail %2 -exclusivelyusentlm -apidname "My Sites - 8020" -apcreatenew -apidtype configurableid -apidlogin %3 -apidpwd %4&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;if not errorlevel 0 goto errhnd&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;REM *** Moss Only ***&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;REM echo Creating SSP&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;stsadm -o createssp -title "Shared Service Provider" -url http://%COMPUTERNAME%:8010 -mysiteurl http://%COMPUTERNAME%:8020 -indexserver %COMPUTERNAME% -indexlocation "%Programfiles%\Microsoft Office Servers\12.0\Data\Applications" -ssplogin %3 -ssppassword %4&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;if not errorlevel 0 goto errhnd&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;:CreateSiteCollection&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;REM For WSS select a suitable site template e.g. STS&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;REM echo Creating site collection&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;stsadm -o extendvs -url http://%COMPUTERNAME%:80 -ownerlogin %1 -owneremail %2 -exclusivelyusentlm -apidname "SharePoint - 80" -sitetemplate BLANKINTERNETCONTAINER -apidtype configurableid -apidlogin %3 -apidpwd %4&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;if not errorlevel 0 goto errhnd&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;iisreset&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;"C:\Scripts\wssdebug.exe" http://localhost /enable&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;goto end&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;:usage&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;REM echo Usage&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;REM echo mossconfig2.bat OwnerLogin OwnerEmail ServiceAccount ServiceAccountPassword&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;REM echo\&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;REM goto end&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;:errhnd&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;:end&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;pause&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This is heavily based on Jukka Paajanen's &lt;a href="http://www.wssdemo.com/Lists/Resources/DispForm.aspx?ID=913"&gt;How to create a web application from the command line&lt;/a&gt; article, with some modifications for running in this context. Once it's finished, you'll have the following setup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A site collection built with the Publishing Portal template that ships with MOSS running on port 80. 
&lt;/li&gt;&lt;li&gt;Central Administration running on port 8000. 
&lt;/li&gt;&lt;li&gt;A Shared Service Provider running on port 8010. 
&lt;/li&gt;&lt;li&gt;A separate web application for hosting My Sites running on port 8020.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;If you're using WSS you'll need to make a couple of modifications. You don't have the Shared Service Provider, My Sites or search to configure so comment out lines 21, 27, 29 and 34. In addition, change the site template parameter supplied to stsadm.exe (line 40) from BLANKINTERNETCONTAINER to STS to have the site collection use the Team Site template. Have a look in C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\1033\XML at WEBTEMP.xml (and also at WEBTEMPSPS.xml if you're using MOSS) to see all of the available templates and their names for use with this parameter.&lt;/p&gt;
&lt;p&gt;It's worth pointing out that there is nothing in the script to perform any configuration on SQL 2005. Despite the machine having its SID replaced and its name changed SQL just keeps on working, although I don't know if this would be the case if you were to use SQL 2000. Having said that, SQL does store the machine's name internally, and the &lt;a href="http://support.microsoft.com/kb/303774"&gt;steps you need to follow to update it&lt;/a&gt; could easily be automated if required. Incidentally, if you need to rename a machine that is already running SharePoint check out &lt;a href="http://www.asaris.de/sites/walsh/Lists/WSSv3%20FAQ/DispForm.aspx?ID=661"&gt;the new 'renameserver' stsadm.exe operation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It's less than ideal having this spread over two posts, but hopefully it's clear enough for you to get what you came here for. If not, feel free to let me know in the comments where I'll try and answer any questions.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://paulhorsfall.co.uk/downloads/WssSysprep2.zip"&gt;WssSysprep2.zip&lt;/a&gt;&lt;/p&gt;&lt;img src="http://paulhorsfall.co.uk/aggbug/15.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Horsfall</dc:creator>
            <guid>http://paulhorsfall.co.uk/archive/2007/05/21/SharePoint-Sysprep-and-SQL.aspx</guid>
            <pubDate>Mon, 21 May 2007 18:31:28 GMT</pubDate>
            <wfw:comment>http://paulhorsfall.co.uk/comments/15.aspx</wfw:comment>
            <comments>http://paulhorsfall.co.uk/archive/2007/05/21/SharePoint-Sysprep-and-SQL.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://paulhorsfall.co.uk/comments/commentRss/15.aspx</wfw:commentRss>
            <trackback:ping>http://paulhorsfall.co.uk/services/trackbacks/15.aspx</trackback:ping>
        </item>
        <item>
            <title>Counting Mouse Clicks With Clickr</title>
            <category>.NET 2.0</category>
            <link>http://paulhorsfall.co.uk/archive/2007/05/09/Counting-Mouse-Clicks-With-Clickr.aspx</link>
            <description>&lt;p&gt;&lt;/p&gt; &lt;p&gt; I recently found myself wondering how many times a day I click the mouse. A quick Google turned up a few promising tools, but none of them were really what I had in mind. As a big fan of keyboard shortcuts, I wanted to know not only how many times I click the mouse but also how many times I click the mouse per application, the idea being that I could use this to figure out which application's shortcuts might be worth learning. With this in mind, I present Clickr. Here's what it does:  &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Counts the total number of left, right and middle (wheel) mouse clicks.  &lt;/li&gt;&lt;li&gt;For each click logs either the description of the executable (default) or window title of the current foreground window. (Logging the description makes the most sense I think. Run two instances of Clickr and log both if you like.)  &lt;/li&gt;&lt;li&gt;Displays the total clicks, clicks per window and the date and time logging began on a Windows Form.  &lt;/li&gt;&lt;li&gt;Minimizes to the notification area (system tray).&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" alt="Clickr Screenshot" src="http://paulhorsfall.co.uk/images/paulhorsfall_co_uk/WindowsLiveWriter/CountingMouseClicksWithClickr_12845/clickrthumb%5B4%5D.png" align="right" border="0" /&gt; Most of this was put together using standard .NET 2.0 Windows Forms stuff. The key to making it work was the fact that you can &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;318804"&gt;use .NET to set a low level hook&lt;/a&gt; to monitor mouse events, and from there it only takes a little more Win32 work to get a handle to the foreground window and ultimately the window title or executable description. Once I had this working, I added a couple of optimizations to firstly cache the descriptions (which are too expensive to fetch for every click) and secondly ensure that I'm not trying to update the form when it's minimized, as this is also fairly expensive and clearly not very sensible.  &lt;/p&gt;&lt;p&gt;I'm not sure anyone else will find this particularly useful but I had fun putting it together and so I thought I'd share it here. There's a link to the executable at the bottom of this post, and although it's not exactly production quality I'll put the source code up as well. It should run on Vista and XP (with the .NET 2.0 Framework) but I've not tested it beyond running it on my machine for a few days, so you mileage may very well vary.&lt;/p&gt; &lt;p&gt;&lt;a href="http://paulhorsfall.co.uk/downloads/Clickr_1_0.zip"&gt;Clickr_1_0.zip&lt;/a&gt;&lt;br /&gt;&lt;a href="http://paulhorsfall.co.uk/downloads/Clickr_Source_1_0.zip"&gt;Clickr_Source_1_0.zip&lt;/a&gt;&lt;/p&gt;&lt;img src="http://paulhorsfall.co.uk/aggbug/14.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Paul Horsfall</dc:creator>
            <guid>http://paulhorsfall.co.uk/archive/2007/05/09/Counting-Mouse-Clicks-With-Clickr.aspx</guid>
            <pubDate>Tue, 08 May 2007 23:05:50 GMT</pubDate>
            <wfw:comment>http://paulhorsfall.co.uk/comments/14.aspx</wfw:comment>
            <comments>http://paulhorsfall.co.uk/archive/2007/05/09/Counting-Mouse-Clicks-With-Clickr.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://paulhorsfall.co.uk/comments/commentRss/14.aspx</wfw:commentRss>
            <trackback:ping>http://paulhorsfall.co.uk/services/trackbacks/14.aspx</trackback:ping>
        </item>
    </channel>
</rss>