MOSS MVP

I've moved my blog to http://blog.falchionconsulting.com!. Please update your links. This blog is no longer in use--you can find all posts and comments at my new blog; I will no longer be posting to this site and comments have been disabled.

Tuesday, August 24, 2010

Announcing Aptillon

Today I finally get to spill the beans on a secret I’ve been wanting to share for a while: today myself and six of my good SharePoint friends are announcing that we have formed a new consulting company! You can read the full announcement on the News page of our new site http://www.aptillon.com/ but I’ve also quoted it here:

Today we are happy to publicly announce a project that we’ve been working on for several months – Aptillon – a new SharePoint consulting company created to fill the need for a dedicated, talented, and respected SharePoint consulting firm with the track record for successful delivery. While the name Aptillon is new, we think you’ll recognize the names of our principals: Todd Baginski, Darrin Bishop, Dan Holme, Gary Lapointe, David Mann, Matthew McDermott, and Maurice Prather.

Each of our principals has depth in many areas of SharePoint. Together our team has depth and breadth across the entire product as well as the supporting technologies like Office, Silverlight, Windows Server, Exchange, SQL Server and more. Between us, we have over 50 years of experience with SharePoint. We are Microsoft Certified Masters, Most Valuable Professionals and Microsoft Certified Professionals aligned to deliver SharePoint solutions for projects of any size. We are passionate about “technology done right”, applying technology smarts to business solutions and having fun while we do it.

We are open for business and already delivering solutions for clients. Please let us know if we can help you.

To help celebrate the launch of Aptillon, we are giving away a “SharePoint 2010 Bookshelf” – 5 books on SharePoint 2010 that the Aptillon founders had a hand in producing. If you’re attending the Best Practices Conference in Washington DC this week, track down Darrin, David or Maurice (they’re all delivering sessions) and exchange business cards with them. After the conference, we’ll draw one lucky winner and ship them the books. It’s just one little way that Aptillon is helping the SharePoint community.

Look for more information in the next few weeks.

- Aptillon founders: Dan, Darrin, David, Gary, Matthew, Maurice, Todd

So I know what your thinking, “but Gary, you just went independent! What about Falchion? I could never pronounce it but you’ve got that sword and those cool business cards, what’s going on?” Have no fear – Falchion isn’t going away – I, like the others, are still independent consultants and still own our own companies. Aptillon is just sliding in on top – it is a way for us to work as a team when it makes sense to do so – we can go after projects together that we couldn’t as individuals and we can do so as one company making it significantly easier on our collective clients.

For me the relationship is a perfect one – I still determine what projects I work on but now I have an extraordinary team that I can leverage and call upon to help me with projects or to feed me projects. We all have a vested interest in seeing each other succeed as our success is Aptillon’s success and Aptillon’s success is our success. To date we’ve already had several projects that we’ve jointly worked on in various capacities and they’ve all gone incredibly well. With this team of individuals I have full confidence that there will be many more to come…

Thursday, August 12, 2010

Getting an Inventory of All SharePoint Documents Using Windows PowerShell

I got an email today asking if I had anything that would generate a report detailing all the documents throughout an entire SharePoint Farm. As this wasn’t the first time I’ve been asked this same question I decided that I’d just go ahead and post the script for generating such a report.

The script is really quite straightforward – it simply iterates through all Web Applications, Site Collections, Webs, Lists, and finally, List Items. I skip any List that is not a Document Library (as well as the Central Admin site) and then build a hash table containing all the data I want to capture. I then convert that hash table to an object which is written to the pipeline.

All of this is placed in a function which I can call and then pipe the output to something like the Out-GridView cmdlet or the Export-Csv cmdlet. I also wrote the script so that it works with either SharePoint 2007 or SharePoint 2010 so that I don’t have to maintain two versions (I could have used cmdlets such as Get-SPWebApplication, Get-SPSite, and Get-SPWeb but there was little benefit to doing so and the script would be limited to SharePoint 2010).

One word of caution – in a large Farm this script should be run off hours or at least on a back facing server (not your WFE) – it’s going to generate a lot of traffic to your database.

function Get-DocInventory() {
    [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
    $farm = [Microsoft.SharePoint.Administration.SPFarm]::Local
    foreach ($spService in $farm.Services) {
        if (!($spService -is [Microsoft.SharePoint.Administration.SPWebService])) {
            continue;
        }
        
        foreach ($webApp in $spService.WebApplications) {
            if ($webApp -is [Microsoft.SharePoint.Administration.SPAdministrationWebApplication]) { continue }
            
            foreach ($site in $webApp.Sites) {
                foreach ($web in $site.AllWebs) {
                    foreach ($list in $web.Lists) {
                        if ($list.BaseType -ne "DocumentLibrary") {
                            continue
                        }
                        foreach ($item in $list.Items) {
                            $data = @{
                                "Web Application" = $webApp.ToString()
                                "Site" = $site.Url
                                "Web" = $web.Url
                                "list" = $list.Title
                                "Item ID" = $item.ID
                                "Item URL" = $item.Url
                                "Item Title" = $item.Title
                                "Item Created" = $item["Created"]
                                "Item Modified" = $item["Modified"]
                                "File Size" = $item.File.Length/1KB
                            }
                            New-Object PSObject -Property $data
                        }
                    }
                    $web.Dispose();
                }
                $site.Dispose()
            }
        }
    }
}
Get-DocInventory | Out-GridView
#Get-DocInventory | Export-Csv -NoTypeInformation -Path c:\inventory.csv

Monday, August 9, 2010

MSDN Visual Studio Ultimate Contest Winners

I’m a little late in getting this post out due to getting a bit slammed last week with work, book writing, and last minute preparations for SharePoint Saturday Denver (which was a fantastic event – thank you everyone who attended, sponsored, spoke or volunteered!).

Recently I blogged about a contest I wanted to run to celebrate my new adventures as an independent consultant. There were some great comments submitted and many of them, besides being enjoyable to read and quite flattering, also proved very useful in providing Microsoft some real-world feedback for SharePoint 15 planning (who knows, maybe we’ll even see some of my extensions built into the next version of the product – that would be really cool!).

It was certainly difficult to pick the winners so I had my daughter help me out – and the winners are Frode A and Station! (if you guys could send me an email I’ll get you the activation key you’ll need).

Congratulations to the winners and thank you everyone who submitted a comment!