SharePoint Cookbook
Providing Bite-Size Recipes for SharePoint Success
Thursday, October 25, 2012
Movin' On Up - This Blog Is Now On Office 365!
Marlene's blog can now be found at: http://www.guio.com/marlene
Troy's blog can now be found at http://www.guio.com/troy
Come on over and see what we're working on!
Tuesday, July 10, 2012
InfoPath Promoted Columns Won't Display
When I looked at the library and at the promoted fields, there was no data in the fields for the old forms that had already been submitted. Somehow I needed to update all the forms, but I didn't want to open them all up and save them again. (Not being lazy, it's just that there were a lot of forms in this library!)
DO NOT - DO NOT!! - use the "Relink Documents" action on the view menu. It will work to update the forms and the data will show up in the promoted columns, but if you have workflows connected to the form, THEY WILL RUN. (Just sayin'. I've had to send one too many apology emails to massive amounts of people because of this. (One is one too many, believe me.))
The solution is deceptively simple and I don't even know why it works, but it does. In the Ribbon, under the Library Tools, Library tab, in the Connect & Export section, click on Open with Explorer. As the files render in the Explorer window, you will see the icons next to the file names change to the InfoPath icon. Wait for them all to change. If you have a lot of files, you can scroll down to expose the ones that have not changed yet. When all the icons have rendered, shut the Explorer window and refresh your view, you will see the promoted columns contain the data that was in the form.
Tuesday, April 3, 2012
Word Viewer in Sandbox
by Troy Lanphier
So, I was working with a client’s farm this evening. They had recently asked me to install Office Web Apps to the farm, and I had obliged, verifying that the Word Viewer had worked without issue.
Yesterday, I get a call from the same client. He states that some of his documents won’t render in the browser.
Doing a mild bit of browsing/troubleshooting, I ran across a blog entry that seemed to indicate that non-DOCX versions of Word documents would not display properly. Sounds plausible, so I passed that along.
The next day, I get a call that DOCX documents are also misbehaving. Checking back in with my site that I had previously visited, I see that all appears to be well. Going to the site where the client is having issue, I found that all was indeed NOT well.
When I tried to access the document via the browser, Word Viewer responds with the most generic error message possible, “Word Web App cannot open this document for viewing due to an unexpected error” – UGH. And of course, there is the obligatory Correlation Error ID; good, I’ll use that in a bit.
I don’t know if you’ve ever gone looking for this error (remember, I said it _is_ generic), but causes of this particular symptom range from misconfigured Service Applications to Database Access. Not wanting to believe either of these were my issue, I went to the ULS for answers.
Keying the Correlation ID into ULSViewer, I see the following issue:
[By the way, if you admin a SharePoint Farm and you haven’t tried ULSViewer, you’re working WAY too hard – here’s the URL, make sure to click the download tab – it’s FREE]
OK, back to our issue/screenshot. What the heck does that mean?!? I went digging and found this post by James Boman. He explains that the Word Viewer runs in the sandbox (no, I don’t know why it would either), and that this limitation causes the Silverlight conversion of Word documents to sometimes fail outright.
Per Boman and several other sources, you can set the WordServerIsSandboxed property to "false” by running a simple set of PowerShell commands. Before you begin this process, you need to know that completing this change will require an IISRESET (brief outage for your farm):
First, set a variable for your Word Viewing service application:
$e = Get-SPServiceApplication | where {$_.TypeName.Equals("Word Viewing Service Application")}
Next, check the existing sandbox status of your service by reviewing the WordServerIsSandboxed property:
$e.WordServerIsSandboxed
Change the existing sandbox status of your service (set the value of the property to “false”):
$e.WordServerIsSandboxed = $false
Verify the changed property:
$e.WordServerIsSandboxed
And finally, perform an IISRESET to have this change take effect:
IISRESET
At this point, your document should successfully display within the web browser using Word Viewer; if not, check the TechNet articles and see what you may have misconfigured.
Tuesday, February 21, 2012
Uninstall IE9
Good news is you can uninstall IE9 if you want. Just go to Control Panel->System and Security->Windows Update->View installed updates and scroll down to IE9. Right click to uninstall. If you have (had) IE8 on the machine, it will go right back to it. Mine did without issues.
(http://windows.microsoft.com/en-US/windows7/how-do-i-install-or-uninstall-internet-explorer-9)
You can also prevent Windows Update from installing IE9 by downloading a Toolkit from Microsoft at http://www.microsoft.com/download/en/details.aspx?id=179.
Monday, February 13, 2012
How to get the %20 out
I'm on a mission. A mission to get the %20 out of SharePoint URLs. They've been around long enough, I think. So ugly. So problematic. Let's just get rid of them, OK?
You see them everywhere, including the URL for the default "Shared Documents" library that comes with a SharePoint team site. What are they and why are they there? How can we make them go away?
The specification for URLs limits the use of allowed characters in URLs to only a subset of the US-ASCII character set. This subset of allowed characters does not include the space character. When you want to use a non-allowed character in a URL, you have to encode it using the "%" symbol followed by the two-digit hexadecimal representation of the ISO-Latin code for the character. (OK, I'm going to stop with the jargon now.)
Straight up, %20 is the URL encoding for a space, and when you create anything in SharePoint that doesn't specifically ask you for an URL, like a list or library, you will see that %20 show up every single time if you create one with a multi-word name. For URLs this is a little inconvenient, unsightly and sometimes problematic, but for column names, this can be a programming nightmare. If you would allow me to wander onto another related subject for a moment, I'll explain.
A site column (or a list column) has two types of ID's; the first is a unique name and the second is a unique ID. The unique ID is a GUID and you can always get to everything with that if you can figure out what it is. The unique name has two parts though, the internal name and the display name, both of which are stored in the SharePoint database as metadata about the column when you create it. The internal name is stored so that machine languages, such as XML, can read it, and since we're talking machine and not human language here...you guessed it...any special characters in the name are...escaped! Special characters are replaced with their hex value prefaced and followed by underscores, so space characters look like _x0020_. SharePoint uses the internal name to access the column in the browser, so the URL to access the column now contains %5Fx0020%5F because the underscore (a special character) has to be URL encoded.
This is a little easier to understand using examples, so follow me here:
A column name created with a display name as innocuous as, say, Nasty hex # - / % has an internal name of Nasty_x0020_hex_x0020__x0023__x0 which becomes Nasty%5Fx0020%5Fhex%5Fx0020%5F%5Fx0023%5F%5Fx0 in the URL.
If this were a list or library name instead of a column name, and used in the URL to your site, just imagine what that looks like emailed out to the group as a link. Yuk. Depending on what you might be doing in SharePoint Designer, like DVWPs, you may get lucky and get to program with the only slightly less cumbersome Nasty_x0020_hex_x0020__x0023__x0.
Hey,you say, I've noticed that the whole name is not represented here. Ah, I say, that's because it gets truncated to 32 characters when it's stored in the database. Special, right? So, be warned, don't do what I did when I first started out and create column names that all begin with the project name followed by the purpose of the column. For example, DistributedCodeReviewProjectManager and DistributedCodeReviewProjectManagerComments. If you do, SharePoint will truncate the name and add incremental characters to the end so that it can distinguish between the two, but in SharePoint Designer, YOU are going to have a hard time figuring out which column is which, trust me. Save those precious characters for something meaningful.
Hopefully, if you've borne with me through this long-winded post, I've convinced you of the evil of all special characters and not just spaces. Your reward is that I'm going to tell you how to get them out of your URLs and your column names. (Come in closer, this is a big secret.)
Once you create a column, the internal name can never be changed. It can't. So when you first create a list, library or column, heck even a view name, create the name without any spaces or special characters. For instance:
Manager Report # should be created as ManagerReportNumber
% Complete should be created as PercentComplete
Roles/Responsibilities should be created as RolesResponsibilities
(The capitalization is not important but only makes column names more readable when the letters are all scrunched together. Readable is better, because when an InfoPath browser-based form displays error messages, it uses the internal name and not the display name. Think of how many less support calls you could get if you didn't need to be the translator to those error messages!)
Now obviously, in your list or library, you don't want to have column names showing without any spaces and special characters do have their proper usages. So after you have created the column, list, library, site, etc. without spaces or special characters, you can then go back and rename it anything you want it to be by going to the settings for the list, library, site or column. Just don't make your display name too far off of your internal name; or you'll still be getting the calls to translate those browser-based InfoPath error messages!
Friday, January 20, 2012
Android and Microsoft Lync? You’re Pulling My Leg!
Nope – I’m not. My GUIO intranet BPOS site is being converted to Office 365 this weekend. I can finally get busy on an internet-facing GUIO site as part of my E1 Office 365 Site.
As part of this transition, Microsoft asks that some preparations be made in advance – one of these preparations is loading Microsoft Lync on the client desktops to replace Live Meeting and Office Communicator, while another is making domain DNS changes for your SIP services (Lync).
While I was getting all of this set up, my trusty Samsung Galaxy (First Generation) died. Specifically, it won’t Bluetooth anymore. So I bought a Samsung Galaxy Nexus to replace it -
Hold on there, wait a minute - before you toss those rotten tomatoes at me, you should know that I’m a dyed-in-the-wool Microsoft guy (I had Windows Mobile since it was Palm-sized PC), but Verizon only has one [not kidding here] Windows Mobile phone, the HTC Trophy.
- It won’t Tether or act as a Wi-Fi router, and
- It isn’t 3G – deal killer
And now, back to our regular story. So I was sitting here playing with the Android Market, and searched for “Microsoft”; I am a hopeless Microsoft Tag fiend, and have this on my business card (If you don’t, I highly recommend it – no one will ever lose your contact if they can scan it immediately).
I found Microsoft Tag, as expected, but was absolutely _floored_ by the fact that I can get Microsoft Lync on an Android. Wow, Awesome!
I load it up, using the same credentials that work on my laptop, and – nothing. Try keying in my password again – still nothing. The Android refuses to connect.
I spent a few moments searching for why I might be having a connectivity issue when I found an article on Microsoft Support, entitled “How to use and troubleshoot issues with Lync Mobile on Google Android mobile devices”.
Sweet. In the “Troubleshoot Auto-Detect” section is everything I need.
- Add a CNAME Alias, “lyncdiscover” and point it to “webdir.online.lync.com” – that’s it.
An Android device with a Microsoft program to extend Office 365 – here’s to getting the entire Office Mobile suite. I’d pay for Android-based Office Mobile, no doubt – but only if it has SharePoint Workspace…Pretty please, Microsoft?
An Easy Way to Locate SharePoint 2010 Patches
Updating SharePoint to the latest Service Pack or Cumulative Update (or both) can be challenging. Your organization may have something as simple as a SharePoint Foundation install, or something as complex as a SharePoint Server + Project Server install.
There are several guides out there for installing the patches, but I’ve always found it to be a (small) challenge to locate the latest Service Packs or Cumulative Updates in a single location. While I was browsing the Microsoft TechNet site today, I stumbled across a site under the SharePoint Product site that I thought was VERY useful:
Updates for SharePoint 2010 Products
This one link makes getting your SharePoint installation update a whole lot easier by providing:
- Tutorials on best practices for applying SharePoint software updates
- Links to Documentation for updating SharePoint installations
- And my personal favorite, the Latest Software Updates section
As I maintain several farms for different clients (each with its own patch level), I thought this last section was interesting simply because it provides links to all of the Service Packs and Cumulative Updates (CUs) since the product was released.
By the way, if you have a larger installation which includes other SharePoint-related gems, such as:
- Office 2010 (client)
- Office Web Apps
- Search Server 2010
- FAST Search Server 2010 for SharePoint
You might consider going to the main site for updates, the aptly named “Update Center for Microsoft Office, Office Servers, and Related Products” site. Don’t forget to get a good backup before you start patching, and read the docs thoroughly.
Wednesday, January 18, 2012
What if there were no internet…
I have been in the technology industry for more years than I care to count – I remember life before the internet…
I remember things like having to make long distance phone calls to Microsoft and describe the things that were occurring on my computer because there was no way for us to visually share information.
I remember having to send away (yes, send a letter) to Hewlett Packard or other vendors requesting drivers on floppy disks and waiting days for the driver to arrive.
I remember having to read software manuals that were poorly written and full of flaws because only a few authors and reviewers had laid eyes on them before they went to print.
I remember only being able to find solutions to technical problems via word of mouth or small user groups.
Now imagine that you are sitting at your breakfast table, reading your newspaper, when suddenly and without explanation, the article you were reading simply disappeared. Or worse yet, you find that you did not receive a paper that morning (and never would again), because they had printed something that someone had found offensive.
As an American, you would immediately begin calling people to find out where your constitutional freedoms went. We believe in things like freedom of speech and freedom of the press, but we have to be willing to protect those freedoms.
Piracy in all forms is bad, no doubt about it – I firmly believe people should get paid for the fruits of their labor, whether the labor involves rebuilding a car, building a house, manufacturing a bridge, flying a plane, or producing intellectual property (something I do and am passionate about).
We, as a nation, are facing a serious issue – large corporate interests are pressing Congress and the nation at large to accept legalized censorship in a couple of broad, sweeping laws known as SOPA (Stop Online Piracy Act) and PIPA (Protect Intellectual Property Act). Content and web sites could simply vanish from the internet just because large corporations say so – instantly, without recourse. Even the President of the United States has come out against this legislation.
Several web sites all over the internet are going dark today – in essence, their content is being removed, albeit temporarily. As a sign of solidarity with the internet community, the content of this BLOG will be replaced with this article – and the links shown below. If you like a free and open internet, now is your chance. Call or write your congressman and tell him or her what the internet means to you – heck, fill out the petition (in the link below) to stop this legislation and they’ll get it.
Read about SOPA and PIPA here.
Sign the petition to stop these initiatives here.
Monday, November 28, 2011
Cyber Monday Book Goodness!
Well, now that we've all had our turkey (and the required post-turkey nap), the Christmas sales are upon us. One of my favorites is the Cyber Monday goodies put out today only by O’Reilly books – they are listing 60 titles:
- 20 New Releases (Including Microsoft SharePoint Foundation 2010 Inside Out – no bias here
) - the current 20 Top Sellers, and
- 20 popular picks
What I think is cool is that there are several of the MCITP training kits in this group, meaning that it’s time to go get your cert on!
Here’s the link - http://shop.oreilly.com/category/deals/cyber-monday.do
No coal in your stocking this Christmas – now go pass a test or two!
Saturday, October 1, 2011
Why IT Conferences Matter
Here we go again! I am packing my bags to go to the 2011 Microsoft SharePoint Conference in Anaheim, California (#SPC11, if you want to follow along on Twitter). For the last week, there’s been a flurry of activity – phone calls, printing confirmations, and wrapping up items at my client site so that there will (hopefully) be no surprises that arise during my week away.
Last night, I was thinking about just how busy this last year has been, and how many different conferences Marlene and I have attended. Obviously, the Microsoft SharePoint Conference is a big one for us, as it does not happen that often. We have also attended or presented at SharePoint Saturdays in Virginia, San Antonio, Houston, and New Orleans.
I am an independent consultant, with my own little consulting firm (GUIO). At this point in GUIO’s existence, there are currently only two employees, myself and Marlene Lanphier. As “Indys”, every hour away from the office is non-billable – in other words, if we aren’t working, we aren’t getting paid. Additionally, going to these conferences has additional costs such as Hotel, Airfare, and other expenses. So, why go?
Training
Unlike a formalized training class, which focuses on a particular topic for the duration of the class, conferences present more of a “cafeteria” opportunity for training. I would challenge you to go to classes that are not only specific to your experience range, but also to go to classes that are outside your normal realm of expertise. I cannot tell you how many times I’ve met Infrastructure and Development experts that did not understand each other’s roles in a SharePoint deployment, much less what SharePoint is capable of from an End User/Information Worker standpoint.
Experience
A lot of times, the people presenting at these conferences have been in your shoes. Whether your focus is on Infrastructure, Development, Information Worker, or Executive skills, odds are that (a) there is someone who is presenting a topic specific to your skillset and (b) that they may be at your experience level, working through the same issues you are on a daily basis.
Networking
This is probably the most valuable part of a conference – getting to know others in your field can be extremely valuable in the long run. Without exception, every person I have ever worked with in SharePoint knows something I don’t. Meeting and interacting with these people results in new acquaintances and friendships – put this together with social media such as Twitter, Blogs, and Facebook and you've got a solid network of people who are experiencing the same trials and tribulations that you are.
So, are you convinced yet? If you have a tight travel budget, there’s likely a conference near you. Here are a list of SharePoint conference providers that you can check out (in no particular order):
- Microsoft SharePoint Conference 2011 (sold out) – http://www.mssharepointconference.com
- SharePoint Saturday (mostly free, regional and international) - http://www.sharepointsaturday.org
- SharePoint Best Practices Conference - http://bestpracticesconference.org
- SPTechCon: The SharePoint Technology Conference - http://www.sptechcon.com
Saturday, August 20, 2011
I Can See the Finish Line–We’re Almost There!
“Part of the issue of achievement is to be able to set realistic goals, but that's one of the hardest things to do because you don't always know exactly where you're going, and you shouldn't.” – George Lucas
This is a really good quote that has pretty much summed up the past few months. For the last year or so, I’ve been a technical editor for Microsoft Press / O’Reilly Media on a few projects (My personal favorite so far is “Microsoft SharePoint 2010 Plain & Simple”, written by Jonathan Lightfoot (@exnav29) and Chris Beckett (@sharepointbits).
Technical editing is fun work – but I have a strange idea of fun (ask anyone who knows me!). This type of editing, involves three distinct steps:
- Read a chapter
- While reading, look for omissions or errors
- Run through any instructions shown to check that they are correct, clear, and accurate
Like I said – FUN!
I mean, how else do you get to see a book that no one (outside of the authors and editors) has gotten to read?
After I had completed my last book edit, I was invited to write a few chapters in an upcoming Microsoft book, entitled: Microsoft SharePoint Foundation Inside Out. I was excited to hear that I would be a co-author with people whose work I had previously read:
- Penelope Coventry (@pjcov)
- Johnathan Lightfoot (@exnav29)
- Thomas Resing (@resing)
- Errin O’Connor (@errinoconnor)
- Michael Doyle (@SharePointNinja)
The last few months, I have had the privilege to be both a writer and a technical editor on this book, although a lot of chapters (including mine) were edited by Marlene Lanphier (@MarleneLanphier, and my better half).
I was excited to hear that portions of this book have now made it into Rough Cuts, which gives readers the opportunity to purchase the early version of the book (electronic, paper, or both) and then receive the completed book when it is published.
Microsoft SharePoint Foundation 2010 Inside Out
Go have a look, tell us what you think!
Where Were You This Last Weekend?
This last weekend, I got the opportunity to attend SharePoint Saturday: The Conference in Washington, D.C. This conference was a large gathering of both Technical and Information Workers who work with a myriad of technologies, including:
- Microsoft SharePoint Foundation 2010 / Windows SharePoint Services 3.0
- Microsoft SharePoint Server 2010 / Microsoft Office SharePoint Server 2007
- InfoPath Forms Designer
- SharePoint Designer
- and more…
This was a three day presentation track, with full-day workshops on the Thursday, and regular 1-hour long sessions on Friday and Saturday. I noticed early on how smoothly the overall conference went, considering the size of the event and the fact that it was largely staffed by local volunteers.
On Thursday, I attended the “SharePoint IA Design 101” session put on by Richard Harbridge (@rharbridge) and Virgil Carroll (@vcmonkey) – A completely awesome session, it addressed some of the traditional shortcomings of not planning your SharePoint IA and Navigational structure.
Friday and Saturday, I went to a myriad of sessions as I was able (nothing like last minute technical preparations for a Saturday session). Good stuff all around, and I really wish I could have attended more.
If you missed the event and want to catch up with a lot of the speakers (and free slide decks!), go to Twitter and look up the hash tag for the event, #SPSTCDC. Or, if you just want to see slides from my session on SharePoint and mobile devices, entitled “SharePoint To Go”, the link for the slides is here.
Monday, April 4, 2011
The login failed. – Wait. What?!?
There are at least two cool things you learn when doing upgrades to SharePoint 2010 from 2007 via database attach:
- You can test your SharePoint 2007 databases for upgradeability _before_ you actually run the upgrade
- You can designate one or more servers to run the actual database upgrades for quicker performance
Item #1 is a boon to any poor SharePoint administrator who has had a bad experience with an aborted upgrade. Simply put, SharePoint will not only notify you of missing Features, etc., but will also let you know in advance if you have an item that will cause the DB Attach upgrade to fail.
Item #2 is a true bonus. While your SharePoint box is humming along happily against its existing databases, you can harness the power of a secondary SQL server (or more servers) in order to upgrade content databases without affecting the performance of your original SQL server.
So, I took a DB backup and attached it to a secondary SQL box with the intention of running the Test-SPContentDatabase PowerShell command. The database restored faithfully with no errors – next, I made sure that the permissions were good to go on the restored database. So far, so good.
Next, I built a web application to be my “temporary” web application (I could always move the Content DB later to the web application of my choosing). As part of the web application creation process, SharePoint dutifully built a Content Database which I named “WSS_DeleteMe”, because I will eventually get rid of it and replace it with my upgraded database.
And away we go – I ran the command to test the database:
Test-SPContentDatabase –name DBtobeUpgraded -webapplication http://mydestinationwebapp
My PowerShell console replied:
Test-SPContentDatabase : Cannot open database “DBtobeUpgraded” requested by the login. The login failed…”
I ran through the troubleshooting steps:
- Did I open my SharePoint 2010 Management Shell as Administrator? Yep – the title bar reads “Administrator: SharePoint 2010 Management Shell".
- Did I set all of the permissions on the freshly moved Content DB? Yep – all good there
It took me a moment to realize what I had missed – PowerShell is not always the best at communicating what issues it is having with your commands, but it was trying to tell me something.
I went to Central Administration looking for answers:
Ah. there it is – I had neglected to tell SharePoint which server was hosting the DB to be upgraded. You see, I had forgotten to specify the –ServerInstance switch in PowerShell to let SharePoint know what database server actually would be doing the heavy lifting.
While I could have changed the default database server, this was only as a last resort – if someone decided to build a new web application while I was doing my test, the database would be created on the wrong DB server – not good.
I re-ran the Test-SPContentDatabase check again, and got the expected output, dutifully saved to a text file for future reference (add “ > TestDatabase.log” to the command). Time to run the Mount-SPContentDatabase PowerShell command (with the -DatabaseServer switch) and get this show on the road!
Wednesday, March 23, 2011
Where the Heck are my New Icons?
Well now, don’t I feel stupid – it’s always the easy things that sneak up and bite you where it hurts.
So yesterday, I was adding the PDF icon to a SharePoint 2010 farm; simple task, common as dirt, everyone does it.
How you say? Well, there are any number of posts about this (the process has been the same since at least Windows SharePoint Server 2.0/SharePoint Portal Server 2003), so I won’t dive in too deep – suffice it to say, there are two major tasks that need doing:
- Add the PDF icon to the templates/images folders under the 12 or 14 hive
- Add the correct syntax to the DOCICON.XML file in the templates/XML folder
So, this is fairly easy; so easy, in fact, that I got the icon from the Adobe site and then searched for the correct XML snippet using my handy-dandy search engine. Like most of you, dutifully made the modifications (read: copied and pasted the code directly from the browser) listed above to my SharePoint Server and ran IISRESET.
Here’s the fun part – Unlike the other 100-200 times I’ve done this, the icon would not show. Not only would it not show, other icons (like the one for Excel, for instance) was broken.
| Definitely not my favorite icon… |
Hm. So first, I went and checked permissions – nope, not it. Then I went and looked at the original file (yes, kids, it’s always a good idea to back up the original DOCICON.XML file – I had renamed mine DOCICON-Original.XML).
Everything looked ok, nothing out of the ordinary. All the closing brackets were there, etc. Next, I accidentally double-clicked the DOCICON.XML file instead of right-clicking it.
Some folks don’t know this, but for all the kidding Internet Explorer gets (and sometimes deservedly so), it can be a good troubleshooting tool. You can open an XML file in IE, and it will render.
And yes, it will give you the obligatory message that it’s restricted this page from running scripts or ActiveX scripts – to protect you.
But guess what happens when it hits a malformed XML file – it tells you all about it. I remembered this jewel and double-clicked the new DOCICON.XML file, to see if IE saw anything out of the ordinary. It did.
OK, what the heck is going on here. Well, what character comes next in the <Mapping Key= tag? A quote. But I have a quote in my XML file – look, there it is!
Uh, wait – anybody see anything strange? Yep – that’s the issue. When I copied the code off the website, the text was formatted with curly quotes instead of the standard quotes (“ instead of "). Apparently XML still does not have a sense of humor.
I put the standard quotes in place of the curly quotes, then ran an IISRESET to cure the problem.
| The moral of the story? Not all quotes are created equal – |
Thursday, March 3, 2011
Unknown SQL Exception 262 and Central Administration
So, I have been creating a new SharePoint 2010 Farm using guidance from three distinct sources (all of which I highly recommend):
- Todd Klindt’s Service Account Suggestions for SharePoint 2010 – Great guidance for what each account would be used for in a SharePoint 2010 configuration.
- Spence Harbar’s Rational Guide to implementing SharePoint Server 2010 User Profile Synchronization – My UPS worked correctly on the first try because of this document.
- Shane Young’s How to remove the GUIDs from the SharePoint search service application databases and Search Database GUID issue posts – A very good, step-by-step cheat sheet for removing GUIDs from the Search databases
When I built a non-GUID database for Central Administration, moved the Site Collection over to it, then removed the original “GUID” CA database, everything worked like a champ. Still does, by the way.
I recently did a DB attach to upgrade a Content DB which originally belonged to a 2007 farm. The upgrade also worked like a champ, and I thought it went without error. The ULS, however, disagreed with my assessment – from the ULS log:
Unknown SQL Exception 262 occurred. Additional error information from SQL Server is included below. CREATE TABLE permission denied in database (insert your CA DB name here)
I went online to search for a solution to my issue, and came across a post from Jeremy Jameson – “The workbook cannot be opened” Error with SharePoint Server 2010 (and TFS 2010). Although at first this did not seem to be a related post, I noticed that he had exactly the same SQL error message in the ULS, only he was working with TFS and Excel Services.
So I scanned down the article, and he said to verify that your service account had access to the Content Database. Checking the Central Administration DB, I realized that when I built the new Central Administration DB, I had not granted db_owner access to my application service account (sp_webapp in Todd’s post):
So, there you go. I corrected this by selecting db_owner for the account and am now back in business (my ULS log is much happier).
Friday, January 21, 2011
Scaling Out for Multiple Site Collections
Quick – What’s the maximum recommended size for a Content Database? (Hey, no cheating and looking it up online!)
If you’ve been reading about Microsoft’s SQL DB sizing best practices for SharePoint, you will notice a pretty stock set of recommendations:
| SharePoint Version | Content Database Size |
| WSS 3.0 or MOSS 2007 | No more than 100GB |
| MSF 2010 or MSS 2010 | No more than 200GB |
Table 1 – SharePoint Versions and Max Content DB Size Recommendations
These numbers are really intended as prescriptive guidance rather than mandatory limits. I have seen (but certainly don’t recommend) organizations have production SharePoint Content Databases in the several hundreds of Gigabytes (GB). In reality, your organization may need/want to consider a number smaller than 100/200GB.
Two important considerations for database size are Backup Time and Service Level Agreements (SLAs). If you have a SQL DB Admin, go ask him or her what is the maximum database size they would be comfortable restoring. Odds are, the DBA will either have a self-imposed limit based on experience or a SLA mandate from management.
What happens if YOU are the DBA/SharePoint Admin in a smaller shop – what then? Well, when you evaluate the maximum DB size you’d be interested in maintaining, the real questions that need to be asked are:
How much data are you comfortable restoring at one time?
- When was the last time you attempted a backup from your media (Disk/Tape/SAN)? Do you have an established metric of how many GB you can restore per hour?
- Having this number defined gives you a de facto guide as to how long a restore will take (#HRs/GB x #GB to be restored = Duration in Hours). So if you can comfortably restore, say, 20GB per hour, a 100GB content DB may take you 5 hours to restore – which leads us to the next question
How much time will your business allow for a restoration to take place?
- Time is Money. Don’t believe me? Go ask your manager about the last time there was a server outage. If your business can withstand a 5 hour restoration window, then you are probably OK, but that does not necessarily mean that the business will be happy about waiting.
- On the other hand, if you are in a business where your SharePoint farm directly affects the ability of your business to make money, odds are that the restoration window must be shorter.
So you start your installation with a Portal site and you put it into its own Site Collection (maybe even its own Content DB). Next, you perhaps build another series of Site Collections for each department in your organization, and you put these into their own Content Database(s).
But what about the collaborative/project sites? Do these get put under a particular department?When setting up a SharePoint installation, it is important to remember that there will be sites that are project-, task-, or document-based; this is true for Microsoft SharePoint Framework 2010, Microsoft SharePoint Server 2010, and Microsoft Project Server 2010 sites alike (this also is true for 2007 versions).
A Need For Site Collections
Collaborative/project sites are generally time boxed. A site such as this may only exist for a few days/weeks/months and then need to be archived. Each of these archives must be full-fidelity, meaning that they can be restored individually as a complete, stand-alone entity (happens all the time in lawsuits).
A fairly simple way to approach this is to ensure that these sites are created as Site Collections (referred to as a Site in the Object Model), not as Sites (a Web in the Object Model). The backup of a site simply will not do, because it cannot be backed up as a completely standalone unit. These Site Collections can be created manually, but are most often created automatically (this can be configured to happen in SharePoint and Project Server alike).
Site Collections are stored in Content Databases. In the SharePoint 2010 example shown below (Central Administration –> Manage Content Databases), we can see that there is currently one content database for the http://titan URL and one for collaborative sites (these appear under the http://titan/sites/ URL).
Illustration 1 – Original Content Databases, one for Collaborative and one for Portal Content
A closer examination of this image screen reveals that this administrator has limited the WSS_Content database to only having a maximum of two Site Collections in this database. The other database, Collaborative_WSS_Content_1, is intended for multiple Site Collections – the problem here is that this database (by default) can contain 15,000 Site Collections.
Doable? Most certainly. Best Practice? No, I think not. Remember our 100GB/200GB limits? Even if you could comfortably and quickly restore these databases, do the math:
100 GB / 15000 Site Collections = .0067GB per Site Collection (6.7MB per Site Collection)
That’s not gonna fly. Even at the 9,000 Site Collection “warning” number, the number works out to be a whole 11 Megabytes per Site Collection – I think my watch has more storage than that.
What’s a good admin to do? Scale Out!
You could take it upon yourself as the admin to make sure that you build up new Content Databases as you near a fixed limit of Site Collections – and there’s a PowerShell script for that. And you can move Site Collections that grow beyond what you had originally envisioned – that will happen anyway (there’s also a PowerShell script for that).
Let’s think about this a little more.
In our case, the admin chose instead to simply limit the portal database (the poorly named WSS_Content database) to maintaining two Site Collections. All collaborative sites will be created in the Collaborative_WSS_Content_1 Content Database. So far, so good, but this DB will eventually top out at whatever the chosen # of Site Collections/DB is.
SharePoint has a built-in (but often overlooked) process to fill out databases in a “round-robin” fashion. There’s no special configuration required to make this happen. This occurs on a per Web Application basis, so some companies actually put their collaborative/project sites under its own URL.
In our case, the intrepid SharePoint Admin simply creates a couple of new Content DBs, and choses the maximum number of sites (remember, this really means Site Collections) to be 100. This works out to about 200MB per site for a 20GB Content Database (Hey, maybe this should be the number set as a Site Collection Quota for this Web App!):
Illustration 2 – Content Databases added for Collaborative Site Collections
Looks like we might be onto something here. As new Site Collections are added to SharePoint/Project Server, they are evenly distributed among the databases (nope, a 9th collaborative site hasn’t been built yet):
Illustration 3 – Content Databases scaling out with new Site Collections
At some point, the admin may decide to add a new Content DB to the mix, perhaps worried about overall growth. If new Content DBs are added, SharePoint will fill in those DBs first before adding new Site Collections to the other Content DBs:
Illustration 4 – New Content DBs
Distributing the content over multiple Content DBs lessens the footprint of any database corruption that might occur and also will shorten the restore time required to put any one Content DB back in service.
Tuesday, June 22, 2010
Either My Scripts Don’t Run Or They All Do!
So, you’re all excited about this PowerShell thing – You went and bought a couple of books, started browsing the web, and were looking forward to having a tool kit chock full of scripting goodness.
The first thing you did was start PowerShell. I am assuming here that you were running PowerShell 2.0 (x64) because you were wanting to use it with SharePoint 2010. If you are not sure what version you have, take a look at my previous post about PowerShell versions – http://blog.sharepointcookbook.com/2010/06/what-version-of-powershell-am-i-using.html
So you went and downloaded a killer looking .PS1 script from Microsoft or some other place, and proceeded to run it on your system. You opened the PowerShell window, tried to run the script “./MyNewDownloadedScript.ps1”, and PowerShell refused to run your script saying “the execution of scripts is disabled on this system”.
Now what? Well, this restriction is a well-intentioned (and pretty effective) effort on Microsoft’s part to keep us SharePoint Admins from downloading PowerShell code that may be buggy or malicious in origin.
If you do a typical internet search on this error message, you’ll find that the default setting for the Execution Policy is set to “Restricted”. You can see this in the PowerShell environment by typing Get-ExecutionPolicy.
A little more searching, and Voila! You have one solution – simply shut off the ExecutionPolicy by typing Set-ExecutionPolicy Unrestricted. Now you can just run your scripts.
But wait a second, what did you just do? Is this really the right solution in the long term?
Looking at the screenshot above, did you notice the warning - “Changing the execution policy might expose you to security risks”? Setting the Execution Policy to Unrestricted simply bypassed all of the security measures meant to protect you from potentially damaging PowerShell scripts. What’s worse is that this setting will survive a reboot of the server. That’s right, the security stays off until you tell it to come back on!!!
It will even survive an uninstall and reinstall of PowerShell.
I’m just like you. I usually would not have a problem turning the Execution Policy off, running a known, trusted script I downloaded from the web, and then turning the Execution Policy back on. But someday I am going to get a phone call, lunch invite, or help desk ticket that is going to help me forget to turn the Execution Policy back on. When that happens, I will not have any security in place – Not good.
So, what’s a good SharePoint admin to do? As usual, we have to read the manual, or in this case, the help file. To see help about Execution Policies, type in help about_Execution_Policies in your PowerShell window.
Lots of reading in that one – pages and pages of information. In fact, you may be surprised how many different settings can be affected by one tiny PowerShell command. But what we care about (for now) is the Execution Policies – there are six total, but really only need to know about four. We already know about “Restricted” and “Unrestricted”, but there are two new ones:
- AllSigned – Will run all scripts that are signed by a trusted publisher (either home-grown or from the Internet)
- RemoteSigned – Will run all scripts that are signed by a trusted publisher AND will run any script that is written on the local computer
In my case, I did not want to set up the infrastructure necessary to sign my PowerShell script. So I chose to look at the Remote Signed option. And I wondered how could take a script that I had downloaded and use it as a “local” script?
Well, obviously, the first order of business is to look at the contents of the script to make sure that there is nothing malicious inside it. So far, so good.
Something in Windows itself knows that we downloaded this script; that something is the Alternate Data Stream (ADS). Alternate Data Stream (ADS) information is added by NTFS when a file is downloaded from the internet. To see the Zone.Identifier information for a downloaded script, open a Command Prompt, change to the directory where your script is stored and type in DIR/R.
Both the file itself and another version of the listing (with :Zone.Identifier:$DATA appended to the end of it) appear in the file system. The one with the zone.identifier suffix is the Alternate Data Stream. To review the contents of this file, we simply open it up in Notepad by typing
notepad MyNewDownloadedScript.ps1:zoneidentifier
All this file does is state the origin of the file by ZoneId, per this MSDN PowerShell article – http://blogs.msdn.com/b/powershell/archive/2007/03/07/how-does-the-remotesigned-execution-policy-work.aspx
This article states that items with a ZoneId greater than or equal to 3 are considered remote.
Decision Time – At this point, you can either:
- Remove the Zone.Identifier information from this file, or
- Change the ZoneId value to 2 to indicate that it is “Trusted”
Either of these choices would assume that you have actually reviewed the PowerShell script and deemed it to be safe.
Removing the Zone.Identifier
To remove the Zone.Identifier, you can download and use the streams utility by Mark Russinovich from http://technet.microsoft.com/en-us/sysinternals/bb897440.aspx, or you can simply remove the Zone.Identifier using the command line:
echo.>MyNewDownloadedScript.ps1:Zone.Identifier
Changing the Zone.Identifier
I much prefer this method because (1) the Zone.Identifier tells me that I most likely did download and review the file at some point, and (2) it’s fairly easy to change ZoneId value from a “3” to a “2”. To change the Zone.Identifier, type:
notepad MyNewDownloadedScript.ps1:ZoneIdentifier
Change the ZoneId value to 2, and save the file.
Don’t miss this part!
You really should not to run your file with the Execution Policy set to Unrestricted. Open up PowerShell (don’t forget to run as Administrator) and set your Execution Policy to RemoteSigned by typing:
Set-ExecutionPolicy RemoteSigned
and choosing [Y] Yes at the prompt
You now have a system that can accept either signed PowerShell scripts –or– locally generated/modified PowerShell scripts. If you ever do convert your entire environment to using fully signed scripts, all you need to do is revisit these servers and change the Execution Policy to “Signed”. In addition, all Execution Policy settings we have made are addressable by Group Policy in your environment.
What Version of PowerShell am I using?
OK, this seems like like a basic question, but even without SharePoint or the PowerShell IDE (Integrated Development Environment) loaded, there are two distinct versions of PowerShell on any given system. Both versions are listed under All Programs –> Accessories –> Windows PowerShell, and as you might imagine, there are 32-bit (x86) and 64-bit (x64) variants:
- Windows PowerShell (x86)
- Windows PowerShell
The reason I bolded that last one is because this is most likely the only one we will use when it comes to SharePoint administration.
But hey, hold on a moment before you start PowerShell. Most often, you will be interacting with the system (assuming you are on a server) in an administrative role. This role is necessary to execute some PowerShell scripts you will encounter.
From All Programs –> Accessories –> Windows PowerShell, Right-Click Windows PowerShell and select Run as administrator.
If you have UAC (User Account Control) enabled, you will receive a prompt, indicating that you are intending to start PowerShell as an Administrator. Select “Yes” to continue.
PowerShell should now start in the proper user context: Administrator; this is verified by the Title line of the PowerShell window:
Interestingly enough, the image above also indicates that the 64-bit (x64) version of PowerShell is currently running; it does so simply by not showing the (x86) by PowerShell in the title. Below is what the same screen would look like in (x86) mode.
So now, the only question is, what version of PowerShell am I running, 1.0 or 2.0? The way to tell this is simply ask PowerShell itself by typing $host and pressing <Enter>.
If you have PowerShell 1.0 installed (maybe you are running on Windows Server 2008 instead of Windows Server 2008 R2), uninstall it and go get PowerShell 2.0 (as part of the Windows Management Framework) from Microsoft at http://support.microsoft.com/kb/968929.
By the way, if you are installing the prerequisite files for SharePoint 2010, it will download PowerShell 2.0 as part of these files. But you will miss your chance to make changes before SharePoint is ever installed onto your system.
In for a Penny, In for a PowerShell Script
Lately I have seen several good blog posts about setting up SharePoint 2010 using PowerShell. I have to admit, coming from a DOS/Scripting background at some point in my past, the notion of scripting an installation thoroughly captivates me.
As I was working through my own virtual SharePoint farm installation, two thoughts occurred to me:
- Most installation instructions I have seen are particularly focused on a Single Server SharePoint installation.
- If I was going to configure SharePoint itself via scripts, why not configure as many other server settings as possible this way?
So, there will be several posts on this over the next few days addressing these details. I have spent quite a bit of time trying to configure all the server minutia via PowerShell to accompany my installation – and have the dents and scratches to prove it. I am sure that several of these PowerShell configuration tips exist scattered across the web, but I will try and gather as many as I can into one place, adding information I find along the way.
Stay Tuned!
P.S. Bring a bottle of headache medicine – you might need it, if you have had as many questions as I’ve had.
Friday, April 3, 2009
What I learned this week about Silverlight and Telerik’s RadEditor
Well, isn’t that special…
Just a quick note: If you are installing Telerik’s RadEditor and you get an error saying that Silverlight cannot be found, that is because you must download the 2.0 runtime on your server for the RadEditor to function correctly. Something to remember – I must write this down someplace…
Monday, February 16, 2009
SharePoint Development Training
Good SharePoint training can be hard to find – and it can be expensive. Harder yet is convincing your boss that you need time off and travel expenses to go away for a week.
If you live in (or can get to) Houston in March, however, I may have some good news for you. One of my favorite SharePoint bloggers, Rafael Perez (http://blog.rafelo.com) is putting together one of his famous weekend crash courses in SharePoint Development.
This course provides an in-depth look at everything from basic Content Deployment to full Feature and Solution generation for Windows SharePoint Server and Microsoft Office SharePoint Server. The class is strictly “BYOL” – Bring Your Own Laptop, and runs two full weekend days long (March 21-22, 2009).
Best part is – you don’t go home empty handed. You get to keep a hard disk with trial versions of software loaded and the work you built in class, all for $500.
Not a bad deal, overall… Check it out here.
Sunday, February 1, 2009
Changing the Scope of the Telerik RadEditor Features
Telerik provides the RadEditor for MOSS in a Solution package (*.wsp). This solution contains two Features, which are scoped to be installed at the Web level of a SharePoint farm.
While this type of installation is quite functional, it means that every time a Site (Web in the Object Model) or Site Collection (Site in the Object Model) is created, its administrator would need to remember to activate the solution.
The Telerik website specifies a workaround for this shows you how to modify the two Telerik Features (RadEditorFeatureRichHtml and RadEditorFeatureRichText) by doing the following:
- Turning off the Features
- Altering the Feature Scope for each in the Feature.xml file
- Turning the Features back on
While this works fine, these steps did not meet my requirements - if the Solution that created the Features is reinstalled or modified, the feature.xml for each would be overwritten from the contents of the Solution. This would revert the scope back to Web instead of Site, which is not acceptable.
I specifically wanted to make this change more permanent such that it could survive the reinstallation of the solution (by the way, this works with the trial version of RadEditor). The only alternative was to modify the solution. To do so:
a. Make an archival copy of the original solution from Telerik. This document assumes that the copy is NOT named RadEditorMOSS.wsp.
b. Rename the RadEditorMOSS.wsp file to RadEditorMOSS.cab.
c. Open the RadEditorMOSS.cab file using WinZip (Not the built-in Windows Unzip). If you choose to use the builtin Windows Unzip, this process will not work because (a) the file structure will be gone and (b) the feature.xml for one of the two features will overwrite the other.
d. Choose to extract all files to a location of your choosing. For illustration’s sake, we will choose the location as C:\Downloads\Telerik\RadEditorMOSS_5_3_2\RadEditorMOSS.
e. Open the RadEditorMOSS directory and then open the RadEditorFeatureRichHtml directory. In it, you will see one Feature.xml file.
f. Open it in an editor of your choosing (VS2005/2008, Notepad++, etc.) - Don't use NotePad, it may leave artifacts and hidden characters in the file.
g. Find the Line that reads 'Scope="Web"' and change it to read 'Scope="Site"'.
h. Repeat steps e-g for the RadEditorFeatureRichText directory.
i. IMPORTANT - These files need to be reassembled back into a CAB file, but you cannot use WinZip for this task. If you do so, all will be well until you try and install the solution, at which time you will get an error that reads "Failed to extract the cab file in the solution".
j. Download and install the cabdsk.exe utility (to c:\Program Files\Cabdsk) from the Microsoft Cabinet Software Development Kit (see http://support.microsoft.com/kb/310618 and http://kopperla.blogspot.com/2008/10/how-to-replace-files-in-sharepoint.html).
k. Open a command prompt and navigate to the c:\Program Files\Cabdsk directory.
l. Issue the following command: cabarc n RadEditorMOSS.cab C:\Downloads\Telerik\RadEditorMOSS_5_3_2\RadEditorMOSS\*.*.
m. Issue the following command: cabarc -r -p -P downloads\telerik\RadEditorMOSS_5_3_2\RadEditorMOSS n RadEditorMOSS.wsp c:\downloads\telerik\RadEditorMOSS_5_3_2\RadEditorMOSS\*.*.
n. Copy the finished RadEditorMOSS.wsp file from c:\Program Files\Cabdsk to c:\download\telerik\RadEditorMOSS_5_3_2\.
o. Delete the C:\Downloads\Telerik\RadEditorMOSS_5_3_2\RadEditorMOSS directory that was created by unzipping the original file.
At this point, you can simply follow the instructions for activating the Solution and Features (at the Site Collection) as shown on the Telerik web site.
Getting AJAX 1.0-dependent items to function in an AJAX 3.5 environment
This last week I was tasked with installing the RadControls for ASP.NET AJAX from Telerik into a SharePoint environment. In particular, the desire was to integrate the fully functional version of RadEditor for SharePoint with a publishing environment.
I spent quite a bit of time reviewing the documentation for this product, and what I figured out pretty quick was that while the majority of this product runs under AJAX 3.5 (part of ASP.NET 3.5 Service Pack 1), the RadEditor control uses the legacy AJAX 1.0 functionality.
So, what to do next? I looked at the instructions for each and found that I could install both AJAX 1.0 and 3.5 on the same machine (although that really did not seem reasonable). Then I realized that both would require modification to the web.config for my SharePoint web app; the modifications would overlap, however, and I was pretty sure that this would not work.
Not being that familiar with AJAX, I did a little checking. AJAX 3.5 provides backward compatibility with AJAX 1.0 - so far so good. Next, the question was how to cause this to work in the web.config for my web application.
I started by adding the web.config modifications for ASP.NET 3.5 found in the Telerik installation instructions.
Next, I found out how to offer AJAX backward compatibility in a web.config from a post on the Telerik forums here. Basically, what this addition does is build a dependency entry that redirects AJAX controls to use the 3.5 AJAX. To set this up:
In the <runtime>/<assemblyBinding> section of the web.config, add the following entries:
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="1.0.61025.0" newVersion="3.5.0.0" />
</dependentAssembly>
This last section should be all you need to allow the backward compatibility for any AJAX 1.0 functionality.
Pointers:
- Make backup copies of your web.config file before making any modifications.
- Make sure that if you are cutting and pasting this text in that no hidden characters are copied. Hidden characters will cause the web app not to function after the web application is reset.
- Don’t forget to reset the web application to allow these web.config modifications to take effect.
Monday, September 29, 2008
SQL Collation and SharePoint 2007
I will not forget to write this down... Latin1_General_CI_AS_KS_WS
I will not forget to write this down... Latin1_General_CI_AS_KS_WS
Now what was it I needed to write again?
Oh Yeah, I Remember...
Every time I build a SharePoint Farm, be it WSS 3.0- or MOSS 2007-based, I always forget the collation setting for SQL databases being used for SharePoint. There are several places on the web that this information is posted, yet I can never seem to find it in a hurry.
Here is the proper SQL collation for a WSS/MOSS installation:
- Latin1_General Character Set
- Case Insensitive - A and a are treated as the same character
- Accent Sensitive - a and á are NOT treated as the same character
- Kana Sensitive - Japanese Hirakana and Katakana characters which look the same are NOT treated as the same character
- Width Sensitive - Single-Byte and Double-Byte versions of the same character are NOT treated as the same character
What effect does this have in my SharePoint Farm?
Although I do not (yet) know all of the items an improperly selected collation can affect, here is what I do know:
- Search relies on collation when crawling information in a SharePoint site.
- There have been reports of improperly configured collation which result in inconsistent behavior such as services not starting correctly.
So what, I can always change it later, right?
Yes, but I can almost guarantee you won't like it - the main databases in a SQL instance reflect the chosen collation. So, in order to change the collation for an instance that will be used for SharePoint, you have to change it on those databases as well.
This involves:
- Backing up the databases
- Documenting all user accounts/permissions
- Dropping the content databases
- Rebuilding the MASTER database
- Restoring the content databases
- Recreating the logins
In short, set this up right before you build your SharePoint Farm. If you are installing SharePoint against an existing SQL backend, consider placing it in its own SQL instance.
Sources
There is a good Blog Entry about it by Areej Abukar on the Jordan SharePoint User Group Blog. Gotta love the Internet.
More detailed information about SQL collation can be found here.
Wednesday, August 20, 2008
Introduction
Hi!
My name is Troy Lanphier, and I am a SharePoint Architect working in Houston, Texas. I have been building SharePoint solutions for almost 5 years now (since the end of SPS2003 beta 2).
My prior experience includes a large amount of infrastructure work in:
- Storage Area Networks (HP/Compaq and Dell, primarily)
- Server Infrastructure and Integration
- Disaster Recovery
- End User and Systems Administration Training
Why a Cookbook?
Well, quite honestly, as much for me as for the folks reading this Blog. I write a lot of documentation about the SharePoint environments I implement, but this is very specific in nature, tailored for the particular customers I work for.
In a word, Recipes - I wanted a place that I can look up the items I find myself doing over and over for different customers; things like automatically registering iFilters for Search, configuring LDAP filters for User Profile Imports, and so on. In addition, from time to time, I may discuss overall architectural strategies for SharePoint installations which I have implemented (no clients named, however) and will document the pros and cons of how I built these environments.
Before You Run Off...
Note that the Recipes found in this site may have been originally crafted for specific clients. I will try and make sure that items such as scripts, etc. are cleaned up as much as possible to make them generic, but the responsibility ultimately falls to you, the reader, to ensure that you test all solutions thoroughly in a Development or Test environment before deploying to your Production environment.
I hope that you will find this useful, and I will try to update this site regularly. Thank you for your attention. - Troy Lanphier