iOS6: Configuring Do Not Disturb without a Mac computer

Of all the features that Apple has added to iOS (other than multiple email accounts), Do Not Disturb was the top of my most wanted list. I’ve hunted through every iOS update or rumor post since iOS3 looking for it. Finally with iOS6, there it was.

As soon as I got iOS6 installed, I started trying to figure out how to configure it, looking at the limitations. I am disappointed. I have two main complaints with DND as implemented in iOS6:

  1. Scheduling is weak. I want to be able to schedule it like I can schedule alarms; different times on different days. During the week 10pm – 7am is fine, but on the weekends I want 11pm – 10am.
  2. Contact groups.

Now I am well aware that contact groups is not really a part of DND specifically, but how they are implemented definitely affects its usefulness.

I guess part of my issue is that I don’t buy into the whole “Cult of Mac” thing, and do not own every Apple product ever made. I have an HP laptop, I will be buying a Microsoft Surface tablet (though I do own an original iPad), about the only thing I actually use that is made by Apple is my iPhone.

This makes managing contact groups kind of a pain.

I use Gmail to manage my contacts, which cannot create or edit contact groups on the iPhone.

By default the only options you have for groups that can bypass DND is Everyone, No One, or Favorites (and All Contacts if you have iCloud enabled for Contacts, but what is the point of that?).

I don’t want to add people who might need to bypass DND to my favorites.

I’ve found plenty of information on how to set up contact groups if you have a Mac computer, but as far as I can determine if you don’t have a Mac computer, you’re going to have to use iCloud if you want contact groups.

Now if you only want to set up a list of people who can bypass DND, not a huge issue.

When you have hundreds of contacts, stored in Gmail, in Exchange, and maybe Yahoo or Hotmail too (yes there are people who use Hotmail), managing your contacts gets tricky.

I don’t trust Apple with my data. Maybe that’s because I’ve yet to be able to successfully restore from an iTunes backup, no matter what I try. Every single time I have upgraded iOS (major versions anyway), I have had iTunes tell me that the backup was corrupt or unreadable.

After the first time way back on iOS3 I moved all of my contacts to Gmail, and washed my hands of letting Apple shepherd any of my data. Luckily since iOS5, I’ve been able to restore from iCloud backups (suck it iTunes). I have no complaints with iCloud as of yet, but I still don’t trust it.

In my specific instance, it looks like I have no choice and am going to have to use it for my contacts. I will be exporting my contacts to VCard file weekly.
I just want to point out that it is possible to only use iCloud for a single group of contacts if you want to create one for bypassing Do Not Disturb. Maybe Apple will fix this at some point, but I kinda doubt it.

To get Do Not Disturb working the way you want it to, you have three basic tasks:

  1. Configure iCloud Contact Groups.
  2. Enable iCloud to sync contact groups on your iPhone.
  3. Configure Do Not Disturb.

Configuring iCloud Contact Groups

First, you need to export whatever contacts you want to use for a group to bypass DND, we’ll call it ‘Bypass’. I had all of my contacts in Gmail, so I just selected the ones I wanted, and exported them all to a single VCard file.

Now you’ll need to sign into iCloud and create a contact group called ‘Bypass’ (or whatever you want to name yours), and then import the contacts you want in that group:

Click to enlarge

  1. Once you are signed into iCloud go to Contacts, and click this red bookmark looking thing to show groups (it’s on the other ‘page’ when you first get to contacts).
  2. Click this to add a new group.
  3. Rename the group, and then highlight it to ensure that you import into that group.
  4. Click the gear to expose options.
  5. Click here to import the contacts you want in this group.
  6. To enable iCloud to sync contacts go to Settings > iCloud > Contacts (swipe to ‘On’).

Configuring Do Not Disturb

In my opinion Apple kinda dropped the ball on this one. Usually Apple’s UI is well thought out to the point of being so intuitive that someone who has never used an iOS device can usually figure out what they need to do to get something working, but Do Not Disturb (like several other things) is not exactly intuitive to configure.

Go to Settings > Notifications > Do Not Disturb.

Click to enlarge

Click to enlarge

Now that we’ve got the contact group we want to use configured in iCloud, we can select that in the Notification settings.

Click to enlarge

You can see here how I’ve configured my Do Not Disturb notifications:

Click to enlarge

One thing I would point out is that if you schedule DND you can still turn it on manually as shown in this screen shot. Also notice that there is a crescent moon icon that appears in the notification bar when DND is active:

Click to enlarge

It works pretty well, but I’d still like to see come changes to this in the next iOS update. Especially the ability to schedule DND a bit more granularly.


How do I Change the product key in Windows 8?

Official mascot of Windows 8

I’ll just get it out of the way right up front: I hate the Windows 8 UI.

It might make sense on a consumer device, but not for an enterprise. There is no way I’m deploying this to my users. It’ll be two months of help desk tickets that look like this: I can’t find my email. I can find the internet. What’s a Metro?

Not happening. Why Microsoft thought it would be a good idea to throw away 20 years of training their users how to use their flagship product, I’ll never know. I just hope whoever is responsible is dealt with appropriately. By ‘appropriately’ I mean taken out back and shot.

When someone who has been administering Windows machines since Windows 98 is sitting there asking how to actually install Windows Updates, your UI has gone terribly awry.

In order to actually install updates, you have to activate the OS. Apparently to really do anything you have to activate the OS. Ok, I can see that. We use Windows 7 Enterprise here, and I was kinda hoping that Microsoft had realized by now that it is a terrible idea to force the Windows 8 UI on enterprise customers, and had disabled it in Windows 8 Enterprise. No such luck.

Also, they expect enterprise customers will be using KMS servers to activate. We do not. Why? Well I can’t get it working correctly. Microsoft says that it is working. It says that it is working. Clients cannot activate using it. I have a ticket open with Microsoft.

In the meantime, I will just use MAK keys. Except I can’t find a way to get the damn MAK key into Windows 8 Enterprise. Just because I’m not forcing it on giving it to users doesn’t mean I’m not evaluating it.

Apparently they expect you to use KMS to activate MAK keys by opening an elevated command prompt, and typing this command:

slmgr.vbs -ipk “Enter Key Here”

Well that’s all well and good, but I don’t need more KMS “servers” that don’t serve keys.

The easy way is to use a Run Command:

slui 3

That was added to Windows 7 at some point, and works as well there as it does on Windows 8.

I hope that saves someone the time it took me to figure it out.

Assigning an IP Address to an APC Network Management Card without having the APC software.

I work for a company that does Electrical construction and design. When I took this job I though that would translate into having little things like plenty of power in the server room, well documented wiring, and maybe having everything in the building(s) on UPS units. I should have known better.

Much like most IT Professionals home networks are kinda messy, working for a company full of electricians translates to wiring… issues.

We do have a generator, and we do have a building UPS in the main building. That UPS is 15 years old. The UPS battery had never been replaced when I got here (it basically had a runtime measured in microseconds). Only some outlets are on the UPS circuits. The server room is in another building. That building is on the generator, but there is only one circuit that is on the UPS. That circuit was for the 17 year old Toshiba PBX that was mounted (I kid you not) in a cupboard in the bathroom in that building.

The servers were on UPS units. APC SmartUPS 1500 units. Four of them. That were 6 years old. With batteries that had never been replaced. Desk units that were housed on shelves in the rack. That were at approximately 150% of draw capacity (when all servers were at peak draw). Unconnected in any way to any of the servers.

This meant that if the power failed (which is does, because this is an older part of town), most of the workstations would go down, and the generator would kick on. Approximately 1/1000000000 of a second before the UPS batteries on the servers and the few workstations on building UPS circuits ran out. Most of the time.

So clearly my first priority was to get the servers on a UPS that was correctly sized for the draw, with fresh batteries. Enter the APC SmartUPS RT 5000 with two battery arrays. This unit will handle all of our current servers, with about 30% extra capacity for expansion. I bought this unit with a Network Management Card so that I could remotely monitor the unit. And then never configured it. I’m not going to make excuses, it was just one of those things where I got busy and forgot.

Until I needed to get access to a UPS in the other building. This got me thinking about the UPS on the servers. So I plugged the NMC into one of the switches, and… nothing.

As it turns out, the NMC in this particular unit will not pull a DHCP lease without intervention through some APC software that ships with the unit. Which I cannot find. Not an insurmountable issue.

Enter the ARP command.

Address resolution protocol (ARP) can be used to configure the NMC. All we need is the MAC address of the NMC.  The MAC address is located on the quality assurance slip that shipped with the NMC, and is also located on a white sticker on the NMC itself.Unfortunately the QA slip is long gone, and the sticker on the NMC with the MAC printed on it is on once of the actual circuit boards of the NMC, now safely concealed inside the UPS.

Now I DO NOT recommend that you do this, but it is possible to remove the NMC with the UP running. If you feel like taking your life in your own hands, you could just unscrew the NMC and pull it out of the UPS without taking the UPS offline. Which is what I did.

Now we just need a computer on the same subnet.

Open up a command prompt and type the following (MAC Address format: xx-xx-xx-xx-xx-xx):


Hit Enter.

Next, use Ping with a size of 113 bytes to assign the IP address defined by the ARP command.

Use one of the following Ping commands (To clarify, the -l option is the letter L but must be lowercase when executing the command):

Windows command format: ping [IP_ADDRESS_ASSIGNED_ABOVE] -l 113

*NIX command format: ping [IP_ADDRESS_ASSIGNED_ABOVE] -s 113

Now, you can Telnet to the card by typing: telnet [IP_ADDRESS_OF_THE_NMC]

Use “apc” for username and password.

Configure/apply any additional changes.

Log out to save changes.

That’s it, now you can use the web interface of the NMC to make configuration changes or retrieve information from the UPS unit.

All of this could have been avoided had I simply taken 30 minutes to configure the UPS when I installed it, or even taken 5 minutes to document the MAC and put all of the paperwork that came with the UPS in a folder in my file cabinet. Learn from my mistakes, DOCUMENT EVERYTHING.


Setting up DFS on Windows Server 2008 R2 in a domain with Windows 2003 Server DC’s: Fixing a very particular DFS Replication error

So I’m in the process of a complete migration to Server 2008 R2, and it comes time to migrate DFS. No problem. I have it working on the 2003 machines, I’ll just leave those up to service the users while I set up a new Namespace on the 2008 R2 DC’s, and then I’ll remap the user drives.

Well that was the plan anyway. As it turns out, it’s not quite that easy.

Before I get started on the particular issue I encountered I’ll note that if your DC’s are all 2003 (Schema v30), and you have not updated the AD Schema in preparation for 2008 R2 DC’s (Schema v47), you will want to do that now. The DFS-R service requires that the AD Schema be updated to at least 2003 R2 (Schema v37), and you’re going to have to update it to 2008 R2 before you can add a 2008 R2 Domain Controller anyway so might as well do it now (see this for more information).

The problem: Replication

I set up the Namespace Folders in the DFS Management Console first, and then proceeded to add the Folder Targets. Once you add a second Target to a Namespace Folder, the DFS Management console prompts you to set up replication, which I did. I ran through the Replication Wizard, accepting all the defaults, and it promptly failed out at the “Update folder security” step, as shown in Figure 1:

Figure 1

Ok, well there is a tab for the error, let’s click that and see what’s in there as shown in Figure 2 (the blacked out areas are the Server names):

Figure 2

Well, that’s not very helpful. Maybe there is something in the event logs? Hmm not really, the closest thing was an Error 6804 from DFSR as shown in Figure 3:

Figure 3

Which is not exactly helpful. So what is the problem? Well it turns out that Microsoft doesn’t document very well. They document in exact steps using an example (like this one on how to set up DFS on Server 2008). The problems arise when you deviate from that example in an attempt to do things in a logical manner. I inadvertently caused this issue, in the underlying file structure on the Servers.

I have two identical (hardware wise) servers that I am configuring this on. They each have a single RAID10 volume totaling approximately 680GB of storage per machine. This is in two partitions; the SYSTEM partition (C:\) at ~50GB, and the DATA partition (D:\) at ~630GB, give or take a couple of GB’s.

When I set up the DFS Namespace, I decided to keep everything simple: since the SYSTEM partition is rather limited, I’ll set the DFSRoot in D:\public, which also happens to be where I created the Folder Targets. This is a no no. When you create a Folder in DFS, Microsoft creates a reparse point in the DFSRoot with the same name. Well, it turns out that there is absolutely nothing that will prevent you from selecting and sharing this reparse point as a Folder Target in DFS. Well nothing except trying to get the Folder Targets to replicate. There is also nothing in any of Microsoft’s technical documentation that says that this is a no no.

At this point, I deleted the entire DFS Namespace, and started over (keeping this in mind). It works fine when you separate the DFSRoot and the Target Folders.

I guess all I can say is; I… I didn’t know I couldn’t do that.

How do I?: Share a printer from WS2008 R2 to x86 clients (or, All printers should die in a fire.)

Of all the scenes in Office Space, this is probably the most iconic for IT professionals. We have all dealt with printers, and we all hate them. We’ve all wanted to do this at some point, and it seems that no matter how far technology advances, printers never fail to provide an IT professional the opportunity to hate them anew.

At my day job we recently replaced two aging plotters (a plotter is just a really big printer), with the “new hotness” plotter: the Xerox 6279. It looks nice, it’s got lots of features, but underneath it all, it’s still just an overgrown printer.

The CAD group made the decision on which plotter to buy, I only had two requirements:

  • It must support Windows Server 2008 R2.
  • It must be a new model (no “discontinued model” specials).

I really only care about the first requirement, but I don’t want to have the thing be obsolete (read ludicrously expensive to repair) in six months. So the Xerox rep assures our CAD group that the plotter is WS2008R2 compatible, and they buy it.

What he meant to say is that it is engineered for WS2008, but will work on WS2008R2. Since the CAD group are all on Windows 7 x64 machines, no problem getting them up and working with the new plotter. Unfortunately a couple of our Project Managers need access to the new plotter as well, and this is where things start to go awry. See our Project Managers are on Windows 7 x86 machines. And since Xerox did not write drivers for WS2008R2 (they were written for WS2008, and they even have an x64 driver), the driver does not support this correctly.

But I don’t blame Xerox for this (well not totally), I also blame Microsoft. See this should be a fairly simple operation, which goes something like this:

  • On the Print Server, open Start > Administrative Tools > Print Management
  • Right click the Shared printer
  • Select the Sharing Tab
  • Click the Additional Drivers… button
  • Check the x86 checkbox
  • Click the OK button

Windows will prompt you for the location of the driver, you select it, and you’re off to the races.

Not so much if you are doing this on Server 2008R2, using a driver that was not written specifically for Server 2008R2. After you point the wizard at the correct driver it asks you for ntprint.inf, but you won’t find it on WS2008R2.

Why? Because Windows needs the x86 version of the ntprint.inf file. And it doesn’t exist on Server 2008R2 (this is where I blame Microsoft).

Really Microsoft? Is it so hard to include a tiny (10KB) INF file somewhere in the OS?

So what’s the solution? Well Microsoft’s official solution is to do one of two things:

  • Install the printer driver locally on one client (which should allow the print server to upload the correct driver automatically)
  • Copy the ntprint.inf file from a 32 bit version of WS2008 (because everyone has one on their network amiright?) to the WS2008R2 print server.

The first option will work, but it’s not as straight forward as Microsoft would have you believe. Most of the time it doesn’t work automatically, and you have to export the driver, and then import it on the print server (which works approximately 50% of the time). Most frequently, you end up having to install the printer driver on each x86 client, because it just seems faster (if you only have one or two x86 clients, it may be initially faster to do it this way, but otherwise, or over time it’s not).

The second option is the Least Amount Of Administrative Effort, but what if you don’t have a 32 bit WS2008 install? You can also use  WS2003 (if you have one of those in 32 bit).

If you don’t have either, you can use method one, or you can install the WS2008 32 bit version trial in a VM. Seriously, this is the easiest way. I know this seems like it will take longer than installing the printer driver on the client machines, but remember you only have to do this once (as long as you keep the files we’re going to copy out of the OS) and then you use these files for any printer you’ll share from WS2008R2 with x86 clients.

Once you have a WS2008 x86 instance, navigate to C:\Windows\System32\DriverStore\FileRepository, and find a folder labeled “ntprint.inf_x86_neutral_xxxxxxxx” (the last string will be a random hex string). There may be more than one. Copy them all to a network share, or somewhere on the WS2008R2 machine.

When the WS2008R2 Print Management Additional Driver wizard asks you for the ntprint.inf file, point it to one of these folders, and it should find it in one of them.

You can now successfully install the network printer on x86 clients.

Or you could just get a bat and some friends to help you fix all your printer problems. Permanently.

Kung Fu for SysAdmins: Using Version Control Systems for scripts

Like nearly every administrator I know, I have a few scripts that I use to help me do my job easier and faster. Well ok, more than a few. Alright, alright, I have more scripts than most people have hair.

I have scripts that were written for an NT4 Alpha Cluster. I never get rid of them. I’ve lost more scripts than most people will ever have. I’ve forgotten more about most scripting languages than most people will ever know.

I find that the challenge is keeping track of them. If I could turn my computers, network storage, USB drives, and email upside down and shake them, enough scripts would fall out to fill the library of congress. Damned if I know where they’re all stored, but I know I have them.

Unfortunately, most of them are variants on the same script, or actually are the same script. Many times if I can’t find the exact script I am looking for, I’ll slap one together, do some quick testing, give it a unique name (you know something that makes it easy to know what it does, like “test74.vbs”), use it once or twice, and then forget what it was for.

Yes I’ll admit it, I have a problem. If there were an AA for scripters, I’d probably be the president of the local chapter.

Or at least I would have been before I started using Version Control software. About a month ago I was editing a script that I was having troubles with, accidentally overwrote something that broke it, and closed the editor. Not a big deal on small scripts, but this one was at about 1500 lines. It took me HOURS to figure out exactly where the code was that I’d overwritten, but I never did figure out exactly what I did that broke it (though I did get it working well enough to do what I needed it to do).

I’ve known about Version Control software for years (I worked at a software company once upon a time), I’ve even used Subversion before. I’d been meaning to set it up for myself for years, and this incident was the catalyst I needed to actually do it.

Keeping the LAOAE principle in mind, I wanted my repository to be available to me in all the places that I’d be likely to be working on a script, mostly at work and at home.

But I already have enough servers to admin, and I don’t really want to have to care for and update yet another thing on my work network, so I started looking for hosted subversion offerings. I’m not a software company, so I had to weed out the ones that wanted absurd monthly fees (and offered absurd feature sets). I just wanted hosted Subversion, I didn’t need team collaboration, or project management features. I thought about going Open Source with it (like github, or Google code) but decided that since I would be using it to also host code that belongs to my employer, it would probably be better to go with a commercial solution.

Did I mention that I didn’t really want to spend any money on this? Yeah, free is king in the land of the Sysadmin. There were several services that fit the bill, in the end I decided to use ProjectLocker. Their free offering gives you three users and 300MB of storage (even for my bloated script collection this is plenty) three Repositories, and three Projects (each project can have an unlimited number of files and folders), though for only $19/month you can move up to 15 users and 10GB of storage (full details of their offerings can be found here).

Oh and all of their plans offer both Git and Subversion, so whichever you are more comfortable with is available. I have used subversion in the past, so that’s what I chose to go with.

Now before I get any further in this post, I am going to write this with the assumption that you have at least a conceptual knowledge of how Version Control Systems (VCS) work. If you don’t and would like to, this free ebook is a great place to start (and really relevant, as it’s also the official documentation for Subversion).

Setting up a VCS for use with scripts

ProjectLocker (Subversion)

Initial setup of a ProjectLocker account is quick and easy:

  1. Select your Service Level (Free is fine for me).
  2. Select you term (Free is Always Free).
  3. Enter a promotional code (optional).
  4. Enter a Referral Source email address (if you have one, the referrer gets free storage space in small increments).
  5. Click “Next Step”.
  6. Agree to the Terms of Service (if you do), and select the “I am ready to setup my account” button.
  7. The information on this page is pretty self explanatory, click the “Place My Order” button at the bottom when done

Save the Login URL on the resulting page! This is the URL you will use to access your repository (

Log in to your repository and fill out the requested information (it helps keep the free offering available).

That’s pretty much it on the Subversion side, though you can set up users and additional projects if you like. Since I am using this to host my personal code, as well as code that belongs to my employer, I set up two projects: Personal_code and Work_code (I know, original right?).

Once you have a repository running, ProjectLocker will give you a URL to the repository, it’ll look something like this:

This is what you’ll need to access the repository from a client, so write this down (bookmark it, whatever you have to do, you will need this)! (obviously use the one in your account, the one listed above won’t work for you)

I also set up a user account for the main IT email account at the office so that it has access to the Work project only. This way when or if I leave my current job, I can just hand off the login to the next person (or leave it with someone here) and they will be able to log in and access all of the scripts that are owned by the company, including being able to see all the changes I’ve made, and any comments I’ve made during the commit process.

TortiseSVN (subversion client)

So now that we have a repository, we need a subversion client. On Windows that leads us to TortiseSVN. There are others, and you are certainly welcome to use a different subversion client,  but TortiseSVN is the hands down leader of the pack for features and maturity. It’s also really easy to install and configure.

TortiseSVN is a command line interface to subversion, but it integrates with the Windows Shell. This means that there is no “program” window to access for settings and such, you access everything via context menus (right click).

Once you have it installed on a Windows computer, you’ll need to link it to your Repository. The easiest way I’ve found to do this is to use the TortiseSVN Repo-browser (you’ll want to get familiar with this tool anyway, as it is installed with TortiseSVN by default and you can use it to… well browse your repository).

Just right click on any file or folder, highlight the TortiseSVN entry, and select Repo-browser from the resulting menu:

TortiseSVN context menu

In the Repo-browser window enter the URL for your subversion repository and click the OK button:

When the Repo-browser attempts to connect to your repository, it will ask you for a username and password, and if you want to store that credential in a file on your computer (that’s up to you):

Once you have entered the credentials, it will show you the contents of your repository:

Now TortiseSVN is ready to use! The Repo-browser interface is fully drag and drop, so you can just drop your script files and folders on the right pane, and it will upload them to subversion. You’ll need to enter a commit message, and once the upload completes, you have your first version of your files in subversion.

NotePad++ (text editor)

Now all we need is an editor that can make use of this, and we’re in luck. Perennial favorite NotePad++ has an extension for TortiseSVN. First, you’ll need to install NotePad++ (or open up the portable version on your USB drive). Once you have NotePad++ open, Select the Plugin Manager from the Plugins menu as shown here:

One of the reasons that I’ve been such a big fan of NotePad++ is it’s extensive selection of available plugins. In the Plugin Manager, just select the Tortise SVN plugin and click Install as shown in the image below.

This plugin requires two supporting plugins, which will automatically be selected for install, as shown here:

Once the installation is complete, NotePad++ will need to be restarted (it will tell you this and prompt you for the restart of the program). After NotePad++ is restarted, we are ready to start actually using our version control system!

If you’ve never used a VCS before, you’ll need to understand the concept of Working Sets and the Checkin/Checkout relationship. These topics are far outside the scope of this post, but if you are new to this, I’d really suggest reading the official Subversion documentation (or at least skimming it). You can find the official Subversion book here.

In order to work on any files stored in the repository, we first need to create a local copy of the repository, or a “Working Set”:

  1. Create a folder where you want to store your Working Set. You can name it anything but “svn”, as this name is reserved for use by TortiseSVN. I usually choose something like C:\SOURCE, so it’s easy to remember.
  2. Right click on the folder you just created and choose SVN Checkout from the context menu.

At this point, TortiseSVN is going to prompt you for some information about how you want the Working Set created, in the form of this window:

The only thing you really need to be concerned with here is the Revision section. You only want to change this if you don’t want the latest revision of the files in your repository (which is what HEAD revision means). If you need an earlier revision, select the Revision radio button, and then use the Show Log button at the right to search for the desired revision. If this is the first time you’ve set this up, or you want the latest revision, just click the OK button. After all the files from your repository are copied, you’re ready to start editing!

Up to this point, everything we’ve discussed has been pure configuration, something that you’ll do one time per computer, and that’s it.

Using the Version Control System

Here is an example of the typical workflow of editing a script without using a VCS:

  1. Find the script (this is usually the hardest part).
  2. Edit the script.
  3. Save the file.
  4. Pull your hair out because the 2500+ line script you just changed isn’t working right (hopefully you’ve never experienced this step).

Now here is an example of the typical workflow of editing a script using the VCS we just set up:

  1. Open the file you want to edit from the Working Set in NotePad++. For this example I’ll use the file C:\Admin\Scripts\SOURCE\Shell\reboot.cmd from my local Working Set.
  2. Make your changes in NotePad++, and save the file. If you do not save the file, there is nothing to commit to the repository.
  3. From the NotePad++ Plugins menu, select Tortise SVN > TSVN – File commit, as shown in this image:

This tells TortiseSVN that you want to write the changes you’ve made to your repository, and it will prompt you to do so using the Commit window:

As you can see there are several options before you actually commit the file. In practice you’ll usually only need the Message area and the OK button. The Message area is basically a comment area for what these changes represent. The more verbose you are here, the easier it will be to understand the changes that were made in the revision, and it will also make it much easier to find a revision where a particular change was made. Once you click the OK button, TortiseSVN will commit your changes to the repository, as shown in this window:

Clearly you can see this is a slightly more complicated process, but the pay off totally worth it if something goes wrong.

How to figure out where you broke something after you’ve been using this for a while

The exact workflow that any given person uses will probably be slightly different than that used by any other person, so this is going to be a description of my particular workflow, and how I track things.

I’m writing a PowerShell Module (sshhh), and I have a function in it called Get-Sysinternals. When I first wrote this function, it would default to downloading all of the Sysinternals utilities. I’ve edited it and altered it several times since then, and I wanted the default behavior to be that it would only download updates to the tools if they were already installed on the local computer in a specific folder. I then later added some switches to change the default behavior, and somewhere along the line, I broke the default behavior.

To figure out what changed, I needed to see what the code looked like when the default behavior was changed. To do this I opened the file (AdminsArsenal.psm1) in NotePad++, and from the NotePad++ Plugins menu, I selected Tortise SVN > TSVN – File log.

This brings up a viewer for all of the Commit activity for the file, which looks something like this:

Scrolling through the commit messages, I find that at revision 76 I changed the default behavior.

What you’ll do at this point depends on how you want to handle this. You could right click the file in explorer, and select TortiseSVN > Update to revision…, if you just wanted to revert the file to a point where you know it worked. Personally I just wanted to see the code in revision 76, so I right clicked the revision I had highlighted, and selected Compare with working copy from the resulting context menu:

Now this particular example was not a great one to use, as I completely rearranged the functions in that module in a later revision so the compare is pretty sloppy, but you get the point.

You’ll also notice that in the Log Messages window, it shows the Author which makes it really easy to determine who made what changes to a given file if you have more than one person working on your scripts.

How to: Single space envelope addresses in Word 2010?

Ok, file this one under WTF?

So one of my users is printing an envelope (I didn’t even know that people still did this for single envelopes), and she tells me that her addresses are double spaced, and can’t get them to be single spaced. She also just had her Office version upgraded from 2003 to 2010 two days ago, so my natural inclination was that this was just a case of “stupid Office Ribbon!”

When I walked into her office, this is what I found:


Ok then. Well this should be easy enough to fix I think. Yeah, no. So some quick Google Fu, and I can now define why this is happening, but am having no luck figuring out how to fix it. This happens because when you hit the ENTER key, Word creates a new paragraph, not just a new line. So it should just be a simple matter of fixing the paragraph spacing right? Except the paragraph spacing is already set to 0px, and the line spacing is already set to single spaced.

Then I find a user with the same problem (you mean there’s more than one of you???). So I’m reading 10 pages of comments with troubleshooting advice like I would give, and all to no avail. Then this gem from a Microsoft MVP for Word: Try SHIFT+ENTER to create a new line rather than a new paragraph.


I discovered later that if you want to fix this permanently, you need to set the paragraph spacing to “auto”, which then allows paragraph spacing to function correctly.

Somewhere at Microsoft there is a Product Manager that approved this jackassery. I’d like to meet that guy face to face so I can kick his junk up into his throat.

I seem to be working my way through the Office 2010 design team, as I have a similar gripe about Outlook 2010 and mail headers.

What next, et tu Excel?

%d bloggers like this: