Just another Microsoft MVPs site

Category: Uncategorized (page 1 of 4)

Where did it all go?

Ok – so I have a somewhat funny story to share . . .    About a week ago, I received a monitoring alert via Kaseya that free space on the C: drive on my SBS 2008 server was getting low.  I logged in to the server, opened My Computer and it showed that I was using 73 GB of my 80GB C: partition.  So I downloaded TreeSize Free to see what was taking up all of the space.  The problem I ran in to was that TreeSize was showing that I was only using 31.9 GB of space on my C: – no where near the 73 GB that Windows was reporting.  TreeSize did indicate that it couldn’t access the C:\PerfLogs or C:\System Volume Information.  I manually verified the PerfLogs folder was empty, and I did find that I had approx 8GB in ShadowCopies for the C: drive that I didn’t need since all of my critical shares had been moved to a different partition, so I disabled ShadowCopies on the C: drive, but that still left me with a 33GB discrepancy between Windows & TreeSize . . .

At this point, I am going to share two crucial bits of information:  1) This is the first time I’ve dealt with low-drive space on a Windows 2008 box.  2)  I’ve been using TreeSize for years, and by force of habit, I always open My Computer, right-click on the drive I want to scan and launch TreeSize from the context menu.   So can you see where I went wrong?

Yep – I was quietly bitten by UAC in SBS 2008.  By launching TreeSize in my normal fashion, TreeSize was not running with elevated permissions and was unable to access all of the directories on the drive, many of which were several layers deep.  Interestingly enough, TreeSize Free didn’t throw any errors when it encountered a directory it couldn’t access.  Once I launched TreeSize Free from the Start Menu with elevated permissions, it was able to scan the full drive and show me my smoking gun – 27GB of IIS logs for the WSUS Administration site collected over the last 12 months.  So after cleaning up my unnecessary Shadow Copies & purging old IIS logs, I’m back to 41.2 GB (51.5%) free space on my C: drive . . .

Migrating your SharePoint blog

As some of you may know, I assist Susan with administering & maintaining the blogs here at msmvps.com.  For various reasons, over the past few months I have become familiar with various approaches to blog migrations – most notably the BlogML project.  As a result, I’ve sort of become the neighborhood go-to guy for moving blogs, including assisting Steve Riley with his move from msinfluentials.com to wordpress.com

A couple weeks ago I was presented with an intriguing request / challenge.  My friend Wayne Small over at sbsfaq.com had been running his site and his blog on SharePoint for several years, but was now in the process of moving everything over to a single Word Press site, and wanted to migrate his content from his SharePoint blog.  The challenge wasn’t so much getting the content in to Word Press, since there are several importers available, including a BlogML importer.  The problem was getting the content out of SharePoint 3.0.  BlogML exporters for most platforms are web based, allowing you to initiate the export from within the blog platform, and download the resulting export file.  While I have coding experience, I don’t have any experience building add-ins for SharePoint and wasn’t about to open that can of worms, so I decided for a different approach.

For those of you who don’t know, there is rather impressive integration between SharePoint 3.0 & Access 2007, so I opted to use Access to extract the information out of Wayne’s old SharePoint blog.  This approach actually gave me more flexibility in meeting the various requirements:

  1. Where the SharePoint blog used Categories, Wayne wanted to use Tags in Word Press.
  2. We wanted to migrate all content – posts, comments, & embedded content (images in posts, etc.)

Moving categories to tags seemed simple enough, however I discovered that the the current 2.0 iteration of BlogML doesn’t support tags (which admittedly surprised me).  As a result, Aaron Lerch’s BlogML import class for Word Press did not support tags either.  Scoring the web, I found that Wayne John had updated Aaron’s BlogML import class to allow for importing tags from Blog Engine exports.  I did a quick & dirty install of Blog Engine on my sandbox server so I could examine its default BlogML export so I could match how it tagged its XML to identify post tags.

One of the major behind-the-scenes differences between SharePoint blogs & Word Press is how embedded content is stored.  When you are composing posts using an offline editor such as Windows Live Writer, inserted images are stored differently in each platform when the post is uploaded & published.  Word Press stores the images in the file system on the site, whereas SharePoint stores the images in the database as attachments to the post record.  Luckily for us, Access 2007 can handle attachments on SharePoint lists natively.  In early test runs, I found that there was some duplication in image names between various posts in Wayne’s blog (especially capture.png).  As a result, I decided to save the attachments for each SharePoint post to a different folder to avoid name collision issues.

So – how does the final solution look? 

  1. I created a new Access 2007 database, and used the External Data functionality to link to the Posts, Comments, & Categories lists on the SharePoint blog site.
  2. I created a simple form that allowed me to enter the path & filename I wanted for the resulting BlogML export file, as well as a path to where I wanted the embedded images from the SharePoint blog stored.  Obviously, the form contained a Start button as well . . .
  3. When the start button was clicked, the code behind the button did all the heavy lifting:
    1. It creates the BlogML export file using the path / filename listed on the form, and writes the various header information.
    2. We open a new recordset containing the Posts table.
      1. We call a helper function to format the post published date how the XML file wants it.
      2. We open a second recordset that contains the attachments for the current post we are processing
      3. If the current post has attachments, then:
        1. We save each attachment to the local file system, using the patch specified on the main form.  To prevent filename collision, we create a new subfolder for each post, using SharePoint’s numeric post ID as the folder name.  (So if we listed C:\export as the folder we wanted to save embedded images to on the main form, we would end up with something like C:\export\<post_id>\capture.png)
        2. For each attachment, we populate the <attachment /> node of the BlogML output.
        3. We parse the body of the current post and replace every path we find pointing to the old attachment path with the new attachment path.  E.g., links to embedded content in the SharePoint blog are referenced via “/Lists/Posts/Attachments/<post_ID>/<filename>” where once we import content in to Word Press, the path will be something like “/wp-content/uploads/<post_ID>/<filename>”  By updating the relative paths to our embedded content during the export, we can better insure that our embedded content will transfer seamlessly.  This isn’t the case with most BlogML exports, because they are simply exporting the content, not updating embedded links to match the target platform.
        4. We cycle through and repeat for each attachment for the current post.
      4. We write the post content to the Output file
      5. For each category listed in the Posts recordset, we write a <Tag /> to the output file (to match Wayne’s requirements). 
      6. We open a third recordset which contains all of the comments for the current post.  If the current post has comments, then:
        1. We call a helper function to format the comment date how the XML file wants it.
        2. We write the current comment to the output file
        3. We cycle through & repeat for each remaining comment for the current post.
      7. We cycle through and repeat for each post
    3. We write the closing tags to the output file and complete the process.

So in the end, we have one BlogML.xml file with all of the blog content (posts, comments, categories, tags, etc.), and a folder that contains all of the exported embedded images from the SharePoint blog posts (in separate sub-folders by post ID).

At this point, Wayne simply had to copy the embedded images subfolders to his /wp-content/uploads folder for his site, then run the BlogML import process to import the content generated.  Voila! 

For example:

Post on SharePoint blog:  SBS 2008 R2 I want it now!

Migrated post on WordPress blog:  SBS 2008 R2 I want it now!

Notice the embedded image is displayed as expected – and if you look at the image properties on the Word Press post, you’ll see it is referencing the relative path to the image on the Word Press site.  In addition, the original post date & author info has been maintained, as have all comments, with their original comment dates & author info.

One caveat that is important to share – when I was first starting to test the import process, the BlogML import in Word Press was failing with an error that invalid characters were encountered on line X at column Y.  However, opening the BlogML export file in notepad, wordpad, or IE – I couldn’t see anything that appeared to be an invalid character.  Finally, opening the BlogML output file in Visual Studio 2008 allowed me to see the invalid characters, and I was able to remove them with a simple find/replace in Visual Studio, after which the import process in Word Press completed successfully.  I’m not sure what caused these characters to be present in the first place – perhaps the authoring tool Wayne used, or perhaps something in the export process, pulling from SharePoint to Access to text. 

But anyway, that was one of my recent side-projects.  Let me know what you think – the Access database I used was rather rough around the edges and relied on a number of assumptions I was able to make which resulted in certain options being hard-coded.  If there is enough interest, I’ll polish it up a bit and post it for others to use to export their SharePoint blogs to BlogML.

Saving me from myself…

So I just had an e-mail come through from twitter telling me that I had a new follower – unfortunately, it appears to be a twitter bot (you know, the personal picture of a scantily-clad blonde, who is following 1300 people, but has zero tweets & zero followers?).  So I decided to log on to twitter’s website and clean up my followers since I was pretty sure there were one or two others that had started following me this week.  As I was waiting for the page to load, I received an interesting pop-up:


I’m running Trend Micro’s Worry-Free Business Security 6.0 on my SBS 2008 network, and it blocked my access.  I found this rather interesting, because I know that I only have Trend doing basic web-filtering (e.g. only blocking known malicious sites).  I moved the pop-up window out of the way so I could see the page in the browser – which also showed the content was blocked:


However, the Page Blocked message in the browser helped me realize what happened – what I didn’t pick up from the pop-up window.  I had completely fat-fingered the URL and misspelled the domain name, only including 1 “t” in twitter instead of 2.  And obviously, this site must have some malicious content.  So a big kudos to Trend’s WFBS for protecting yet another user from themselves  smile_regular

Drive Mapping via Group Policy Preferences not working for Vista clients

Ok – so this has been bugging me for a while.  One Vista machine on my SBS 2008 was not having mapped drives created via the Group Policy Preferences I had established.  I could log in with the same user account on another Vista machine as well as two XP machines, and the drives were mapped as expected.  I did some troubleshooting a while back, but didn’t spend a lot of time on it since it was an annoyance for me at best.

Well the condition has been fixed – thanks to a stellar find by Cliff Galiher in microsoft.public.windows.server.sbs:

After you turn on User Account Control in Windows Vista, programs may be unable to access some network locations


I made the registry change indicated in that KB article, rebooted and voila! – my GPP drive mappings are working.  smile_regular

Windows SharePoint Services 3.0 and the IIS default web site

So I was visiting with a friend last night, and he indicated that he was having a bit of a problem with his WSS 3.0 installation.  Short story is that he has a dedicated Win2k8 box acting as a web server on his domain for internal sites.  They have several web-based LOB apps that run on that box, all as virtual directories under the default web site.  Even though they are running SBS 2003 with its WSS 2.0 companyweb, they wanted to install WSS 3 to take advantage of the new wiki site template.  So, they installed WSS 3 on the web server, which immediately broke their LOB apps.

So what happened?

When you first install WSS 3.0 and run the SharePoint Configuration Wizard, SharePoint creates a new web application (SharePoint – 80) and creates a new web site in IIS that takes over the default site.  Dana recognized this, so within IIS he edited the bindings for the SharePoint site to use port 81, allowing him to re-enable the original default website in IIS and get his LOB apps back.  The problem?  Not only was it a pain having to enter :81 after the servername to access the site, but clicking links on the SharePoint site continued to want to use port 80, resulting in constant 404 errors.

So how did we fix it?

If you’re new to SharePoint, it is worth taking a little time to explain some of the architecture and terminology around SharePoint 3.0 to help put the answer in to context.  First, it is important to understand the distinction between a SharePoint web application, and an IIS web site.  SharePoint (whether WSS or MOSS) can have multiple web applications.  These are created via SharePoint Central Administration.  You can think of a SharePoint Web Application as your top-level SharePoint site – but it is distinctly different from a website in IIS.  An IIS site that is mapped to a SharePoint web application can be thought of as a gateway to access the SharePoint web application.  You can delete the site from IIS without affecting any of the content in the SharePoint application.  (Obviously you won’t be able to access the SharePoint web application without an IIS site, but none of the SharePoint web application content or configuration is stored in the IIS site). 

There are several benefits to this approach – including the ability to have multiple IIS sites mapped to a single web application, with each site being bound by a different SharePoint security zone.  The distinction between the web application and the IIS site in Dana’s situation is that the original IIS site that was bound to port 80 with no host header was separate from the actual SharePoint web application, and even though that was the initial IIS site created to access the SharePoint web application, it isn’t necessary to use that IIS site.

The simplest solution for Dana was to create a new IIS site that used a host header to access his SharePoint web application.  This is actually very simple and straight-forward to do from within SharePoint Central Administration:

  1. Open SharePoint Central Administration  (Start | Administrative Tools | SharePoint 3.0 Central Administration) on your SharePoint server.
  2. Click on the Application Management tab
  3. Click on the link to Create or Extend an Existing Web Application
  4. Click the link to Extend an Existing Web Application  (we are extending an existing web application to another IIS site)
  5. Select the web application you want to extend.  (The default SharePoint web application on a stand-alone WSS installation is SharePoint – 80.  On SBS 2008, the companyweb application is  remote.yourdomain.com:987  )
  6. Select the option to create a new website and enter a description that is meaningful to you  (this will display in IIS)
  7. Change the port to 80
  8. Enter a value for the host header  (in Dana’s case, we used   wiki  – obviously, you will need to create the necessary DNS records so your host header name can be resolved via your internal DNS.  I personally prefer to create a CNAME (alias) that resolves to the host (server) that is running SharePoint.  Alternately, you could also create a new A record).
  9. In a typical small business deployment, you will accept the default security configuration options
  10. Select the appropriate zone and click OK.

This will create a new site in IIS that is mapped to the web application you selected.  After we had created the new site for Dana and created the necessary CNAME record for  wiki  in his DNS, we were able to browse to http://wiki on his internal systems and access the SharePoint application successfully, and navigate without 404 errors.

Additionally, we were able to delete the original IIS site that Dana had changed the bindings to port 81.  Since Dana & co were now accessing the web application via the new site (http://wiki) we didn’t need the original site on port 81 any more.  We also did this within SharePoint central administration:

  1. Go to the Application Management tab
  2. Click the link to Remove SharePoint from IIS Web Site
  3. Select the web application
  4. Select the site
  5. Optionally select to delete the site from IIS  (which we did select in Dana’s case)

So why was Dana getting the 404 errors after he changed the bindings to a new port number in IIS?  If you go back to the page where we extended the web application, take note of the description under the Load Balanced URL section:


The description reads:  “The load balanced URL is the domain name for all sites users will access in this SharePoint Web application.  This URL domain will be used in all links shown on pages within the web application.  By default, it is set to the current servername and port.”

When the SharePoint Configuration Wizard created the initial web site in IIS, the SharePoint load balanced URL for that site was http://servername:80  –  which will resolve to the default website on that server.  When Dana changed the port to 81 and re-enabled the original default website, links in the SharePoint web application (when accessed from the original IIS site) all used the Load Balanced URL, which resolved to the re-enabled default website on port 80 – thus resulting in the 404 errors.

The moral of the story here?  Well there are a couple:

  • You can have as many IIS sites linked to a single SharePoint web application as you want.
  • When administering SharePoint, do as much as you can in SharePoint Central Administration.  Chances are you won’t get the results you want if you try to make changes (such as site bindings) via IIS.

One of my personal rules when it comes to IIS is to leave the default website alone.  Personally, I always create new websites in IIS and use host headers to access those sites – so everything is accessible on port 80 (assuming http) and users don’t have to remember weird port numbers, etc.  Additionally, using host headers gives you the freedom to move websites to different web servers without affecting the end-user experience.  Just update your DNS record for the host header value to point to the new server and voila! – users are accessing the same site via the same URL and have no idea it has been moved to a different physical box.  And this is true of all web applications I use – DotNetNuke, Community Server, etc. 

The only exception to my rule of putting each web application in their own IIS web site is when we need multiple apps all on the same server accessible via SSL.  Since SSL traffic is encrypted, IIS is unable to inspect the host headers, meaning it can only direct SSL requests to the correct site based on the IP / port combination.  So, to have multiple web apps on a single box accessible via SSL, we either need to have multiple sites all on one IP listening on different ports (443, 444, etc.), or multiple IPs on the box so each site can listen on 443 on a separate IP, OR configure the different web applications as virtual directories under one IIS site that is listening on 443 for the one / all IP addresses.  Depending on the number of applications you need accessible via SSL, it can makes more sense to configure those apps as virtual directories under a single site, so you reduce your administrative overhead by not having to administer multiple IP addresses / ports / SSL certificates.   But even then, I create a new site in IIS to put everything under instead of using the default site.  Yeah, I know – I’m weird like that  smile_regular

Of course – there is always more than one way to skin a cat, so there is a completely different method we could have taken to fix Dana’s issue as well.

Let’s say there was a business need for Dana’s web applications (that were all virtual directories under the default site) to be accessible as virtual directories under his SharePoint site.   This approach was actually recommended to Dana by other individuals telling him to add an Application Exclusion to the SharePoint site.  Dana couldn’t find out how to do this – but there is good reason why:  Application Exclusions don’t exist in SharePoint 3.0.

Here’s the deal:  SharePoint 2.0 and 3.0 have considerable distinctions in their architecture.  For example, when you extended SharePoint 2.0 to a website in IIS, SharePoint assumed that the entire IIS site would be devoted to the SharePoint application.  As a result, if you wanted to have non-SharePoint virtual directories under the IIS site, you had to tell SharePoint 2.0 to exclude those virtual directories from its management, allowing the web applications in those virtual directories to work as intended. 

SharePoint 3.0 uses a different approach.  Instead of assuming the entire IIS site is devoted to the SharePoint web application, you have to explicitly tell SharePoint what paths in the IIS site are managed by SharePoint.  When we create a new SharePoint Web Application, SharePoint assumes that it will manage the root path as well as everything below the /sites/ path.  (Hint: when you create a new web application and are on the Create Site Collection page, this is why you have the to options for the URL:  http://hostheader/  or http://hostheader/sites/ )

What this means is that SharePoint 3.0 plays very nicely with other web applications in the same IIS site.  So in Dana’s case, when he first installed SharePoint 3.0 and it created a new IIS site that replaced his original default website, he could have simply recreated the virtual directories for each of his web based LOB apps under the IIS site SharePoint created as long as none of them used the sites name, since that was defined as a Managed Path for the SharePoint web application.  And even then, if he wanted to use the sites path for a non-SharePoint application instead, he could have removed the sites path from SharePoint management.

You can administer SharePoint’s managed paths from SharePoint Central Administration.  Simply navigate to the Application Management tab and click the link for Define Managed Paths.  When you add a managed path, you specify what type of inclusion it will be.  There are two types of inclusions – an explicit inclusion and a wildcard inclusion.  An explicit inclusion means that SharePoint will manage just that path, where as a wildcard inclusion tells SharePoint that every path under the wildcard inclusion path should be managed.  This is particularly useful if you are enabling self-site creation for users, so they could effectively create their own site collections (top-level SharePoint site) under a common directory (e.g /sites/). 

The Death of IFMEMBER

Anyone who has heard me talk about service delivery standards knows that I’m a big advocate for standardizing everything you can.  One of my big pet peeves are SMB networks that are not using standard drive mappings – where each user has a different drive letter pointing to the same share on the server . . .    I’ve been surprised by the number of administrators & consultants who don’t know about the IFMEMBER utility from the Windows Resource Kit.  IFMEMBER has been a core building block of my login scripts for the past 10 years, allowing me to dynamically map network drives based on a user’s security group membership at login. 

Well, with the dawn of Windows 2008 – IFMEMBER is effectively dead.  I’ll admit that I’m probably a bit behind the curve here, but quite frankly – login scripts themselves are effectively dead in Windows / SBS 2008 and are replaced with Group Policy Preferences.  I finally got a chance to play with Group Policy Preferences, and I have to say they work pretty slick.

Let’s take a fairly typical example:  We have a site running SBS 2008, and each user has their own folder under the usershares share on the server, we also have a public share for common files, and we have an accounting share for our QuickBooks data and accounting specific spreadsheets & reports, etc.  We want each user to have H: mapped to their user shared folder, P: mapped to the public share, and Q: mapped to the accounting share.  We only want Q mapped for members of the Accounting Users security group we’ve created, and we want to force these mappings (so they replace any different drives users may have created using the same letters).  

Previously, our login script to accomplish this would have looked like:

net use h: /delete
net use h: \\server\usershares\%username%

net use p: /delete
net use p: \\server\public

IFMEMBER “Accounting Users”
if not errorlevel 1 then goto quit_acct
net use q: /delete
net use q: \\server\accounting

With Group Policy Preferences, we start by opening the Group Policy Management Console on our SBS 2008.  I decided to create a new GPO in the DOMAIN \ My Business \ Users \ SBS Users OU.  When the GPO is opened in the editor, you can see a clear delineation between Group Policies and Group Preferences:


There is still a separation between Computer configuration and User configuration.  Obviously, drive mappings will be a user configuration.  Expand User Configuration | Preferences | Windows Settings and select Drive Maps.  You can add a new drive mapping by either clicking the plus sign “+” icon in the toolbar, or right-click in the content pane and select New | Mapped Drive.


You will notice there are four different actions that the drive mapping group preference can take:  Create, Delete, Replace or Update.  Create and Delete are self-explanatory.  In the example in the screenshot, I’m mapping H: to the user’s shared folder on the server.  If the user was already using H: for a different drive, the Replace option will effectively remove the existing H: drive then create a new mapping based on the settings defined in this preference.  If we used the Update action, the preference would only change the attributes of the existing H: drive to match the settings specified, thus retaining any locally applied settings for the drive mapping that are not defined in the preference.  Both the Replace and Update actions will create a new mapped drive if it doesn’t exist when the preference is applied.

Most of the fields on this page are self-explanatory.  Note that we can specify a given account to use to connect to the share, and we can specify a custom label for the mapped drive as well, and take advantage of variables such as %username% in the path & label.

If we take a look at the common tab, we have a few more options, including the ability to enable item-level targeting which unleashes the true power and flexibility of Group Preferences.  Let’s take our basic example of wanting to map the Q: drive to the accounting share, but only for members of the Accounting Users security group.  On the Common tab, we would check to enable the options to run the preference in the logged-on user’s security context, and to enable Item-level targeting.  Then we click the Targeting button to specify the target:

In this case, we would click “New Item” and select the Security Group option.  From here, we can browse to select our Accounting Users security group.  Note that we can specify whether we are checking the user or computer’s membership, and using the Item Options, we can specify whether we want to check if the user/computer IS a member or IS NOT a member of the group.   In our example, this is all we would need to do to have our Q: drive mapped for members of the Accounting Users security group.

But while you’re in the targeting editor, take a look at all of the items we can check for.  Also note that we can add collections (groups of items) for nested targeting, and we can use AND or OR operators within our collections to specifically target exactly who or what we want to get this preference applied. 

Another preference that will get a lot of use in the SMB space is the ability to add mapped printers (and set default printers) via the preferences as well.  As an example of targeting, if we have a customer with multiple locations all on the same domain & linked via router-based VPNs, we can target based on the client PC’s IP address, so it only gets printers at its location installed.   

Regardless – I encourage everyone to really play with the new Group Policy Preferences – they’re going to make it much easier to standardize our client environments  smile_regular

Accessing the Windows Internal Database in SBS 2008

OK, so I’m a little behind schedule – but I’m finally getting a chance to really dive in to SBS 2008, and I should hopefully have some decent posts moving forward . . .    yeah, yeah I hear you – *any* post decent or not would be an improvement over the last year . . .    I’m workin’ on it, k?  smile_regular

So most of us running WSUS 3.0 or WSS 3.0 are familiar working with the Windows Internal Database, and know that we can connect to that instance via Named Pipes so we can actually use the nice GUI interface provided by SQL Management Studio (Express).   Well, if you’ve tried using the Named Pipes method to connect to your Windows Internal Database on your SBS 2008, you’ve probably noticed that it doesn’t work . . .

Here’s the deal:  When the Windows Internal Database is installed, the built-in administrator account is granted system administrator privileges to the SSEE instance.  As you’re aware – with SBS 2008 the built-in administrator account is disabled by default and we use a custom administrator account created during setup to administer the box.  The problem is that this custom administrator account is not granted SQL system administrator privileges to the SSEE instance by default.

The work around to get this to work was simple enough – all i did was enable the built-in administrator account on my SBS 2008, then log in using that account.  Once I was logged in, I was able to successfully connect to the Windows Internal Database via named pipes.  At that point, I was able to add my custom administrator account as a SQL system administrator for the SSEE instance;

Expand Security | Logins.  Right-click on Logins and select “New Login”

Click the Search button to find your custom administrator account in the directory

Accept the defaults on the General page

On the Server Roles page, check the  sysadm  role

Click OK to add the user

Now you can log back in to your SBS using your custom administrator account and access the Windows Internal Database instance via named pipes.  Just don’t forget to disable the built-in administrator account when you’re done! 

The Changing of the Guard

It’s official: as of October 1st, I am now a Small Business Server MVP Alumnus.  I have to admit that it comes as no surprise that I was not re-awarded as an MVP this year – the past 18 months I have been buried with MSPSN and building our NOC operations.  As a result, I have been noticeably absent from the community.  As my professional life continues to evolve, I am hoping to reach a point where I have the available time to contribute to the SBS community at large and continue to promote the product and empower the partners and DIYers that believe so passionately in SBS.  This community rocks, and I have been honored to be associated with the MVP program for the past 5 years.

But don’t worry – I’m not completely going away.  You can’t get rid of me that easily [:)] 

MSP Revolution 2008 Last Call!

OK, so I’ll admit it’s blatant self-promotion – but we have a few slots left until we fill up  smile_regular



MSP Revolution Sponsors


Level Platforms

















Labtech Software



PRE Day Conference Events

Designing, Implementing, and Making Money with Virtual Environments
by Dave Sobel and Karl W. Palachuk
How to add $100K (or more) in revenue in the next 6 months!
by Matt Makowicz and Stuart Selbst from Secure My Company
For more information:


Our Website


More About Us



Dear Chad,

Last Call for MSP Revolution!
Seats are filling quickly and MSP Revolution 2008 is the only event this year where we’ll take you deep into the Managed Services Business Model and deliver a proven Road Map to profitability in Managed Services.
September 4-7 in Chicago


Thursday September 4, 6p-9p
Cocktail Party with MSP Mentor.  MSP Mentor’s Joe Panettieri will lead us in an interactive discussion on the “State of the MSP Channel.”
Friday September 5
Kick the morning off with a keynote by Len DiCostanzo of Autotask where you’ll learn how to “Organize, Integrate, and Automate your IT Services Business.”
Next, dive right into the MSP Revolution Excellence in Business Acumen business simulation experience delivered by Andromeda Training.

Discover how to strengthen all aspects of running and managing your business through this focused and intensive management education that allows you to work through and resolve major business decisions in a fun, fast paced environment.
Working in teams, participants gain an experience of what it is like to operate a business in a competitive market. They make all the decisions – production, marketing, sales, finance, and own all the results. Teams and long-term professional friendships are built in a challenging game environment.  The secret benefit is that some very thorough business finance learning occurs.
End the day with cocktails and dinner with MSP University’s Erick Simpson who will share his professional insight in “Growing Your Practice During an Economic Downturn.”

Saturday September 6th & Sunday the 7th
Spend a day and a half with the greatest minds in the Managed Services Channel today.  Our speakers are the BEST minds in the Channel and you won’t want to miss this opportunity to learn from them.
Each speaker has built multimillion dollar Managed Services companies and they are going to share their knowledge & experience with you!

Defining Your Managed Services Offerings
Learn how to design and deliver profitable Managed Offerings.
Ron Cook, Xilocore

Pricing Your Managed Services Offerings
Discover How to Price Your Managed Offerings Profitably
Ramsey Dellinger, MSP On Demand
Developing Your Contracts & Service Level Agreements
Service Level Agreements, Why You Need them & How to Create Them
Karl Palachuk, KP Enterprises
Marketing Your Managed Services
Learn how to fill your pipeline with proven effective marketing techniques.
Erick Simpson, MSP University
Building a Profitable Service & Help Desk
Learn how to inject efficiency into your Service Desk and realize the profitability you’ve been seeking.
Amy Luby & Chad Gross, MSPSN
Selling Value in the Managed Services Model
Proven Techniques in transitioning from selling features to selling Value.
Matt Makowicz, Ambition Consulting

Partnering for Success
Industry, vendor and peer partnering can transform your business.  Learn how.
Stuart Selbst, SecureMyCompany
To learn more about each speaker, go to www.msprevolution.com.


We are bringing some of the greatest minds on Managed Services together for a premium event like no other.  We can’t wait, and we hope to see you there.  Don’t miss out on this opportunity to learn from the best!


The Straw the Almost Broke the Camel’s Back

Ok, I admit it.  I’m a creature of habit, and I don’t always adjust nicely to change.  I’m getting ready to do my first of the month recurring invoicing, and reviewing an Excel spreadsheet one of my vendors sent me.  As I try to navigate the spreadsheet in Excel with my arrow keys, I find that my arrow keys are scrolling the worksheet instead of moving cells. 

So a quick google came up with a simple solution: disable scroll lock.  The problem was this was the first thing I tried, and it didn’t work.  After the scroll lock suggestion, I found a few workarounds, including a post from my old friend Kevin

The problem is that I’ve never been a big fan of workarounds – I want to know the answer and solution to the problem.  As I was checking out a few of the hits where the scroll lock option wasn’t working for the original poster (including Kevin’s post), I quickly identified a common thread:  Logitech keyboards.  And I’m using a Logitech MX3200 cordless desktop on this machine.

Within a few minutes I had the solution to the problem.  In order for the Scroll Lock key combination (FN + Pause/Break) on the Logitech keyboard to work, the Logitech SetPoint software must be running.  Once I fired up the application, it worked like a charm.  Close the app, and they key combination doesn’t work at all.

Here’s hoping this saves a little bit of someone else’s sanity . . .

Older posts