Migrating a vSphere Content Library

VMWare doesn’t have an option to migrate or copy a Content Library to a new one. I’ve seen other work arounds that involve subscribing and copying files, etc. But I wanted something a bit more straightforward.

I was surprised when I couldn’t find a script online that involved exporting the content from an existing library and then importing into a new one. There were some scripts that did the import, but not export.

Instead of spending a lot of manually downloading everything, I created a script that will export ISOs and OVFs from an existing Content Library. It puts them on a designated local directory and when complete, it uploads them to your new Content Library. Simple enough.

Anyways, I created a GitHub repo and put the script out there.

You can find it here: Migrate VMWare vSphere Content Library

Update: I found that you will want to specify the -ItemType in lowercase (‘ovf’ or ‘iso’). It will upload and show up in the main CL view if you use uppercase… but will not show up when attempting to use them browsing from a host or VM.

Change RemoteApp program location without republishing

This is useful when you upgrade an application and the path to the main application EXE has changed. The new path could just be a new EXE name or it could be in an entirely different folder. If you have it published via RemoteApp, you may have noticed the RemoteApp program location is greyed out.


You could just unpublish and republish the RemoteApp, but that could be a pain if you have a fair amount of options set for the app. Instead republishing, you can run the Set-RDRemoteApp PowerShell module to update the path.

In this example, I published the built-in Windows Calculator in my lab. Let’s say that Brenda in accounting found better a calculator and wants to run that instead. Once you have the path of the new EXE, run the Set-RDRemoteApp PoSH module. In my command below I specified the CollectionName, Alias, and FilePath (new) parameters. I did not need to specify any other parameters and it didn’t appear to override anything else. As always, be sure to test your command in a test environment or on a test application before applying to production.

Set-RDRemoteApp -CollectionName “Lab” -Alias “win32calc” -FilePath “C:\NewCalc\bestcalc.exe”

If everything updated properly, you should see the updated path in the properties of your RemoteApp.

Note: You may need to refresh the deployment in Server Manager, or just re-open it to see the updated path.

QuickBooks Online – Visual C++ has not been installed

Oh QuickBooks…. you will never stop driving me crazy will you?

I lose a few brain cells every time I have to deal with a QuickBooks issue. Maybe I’ve been lucky and haven’t had to deal with QuickBooks online before or maybe people don’t like it enough to use it very often… Who knows?

Anyways, I’ve seen some posts about this error online, but the majority them deal with the full desktop version of QuickBooks. If you aren’t familiar with QB Online… Intuit now has “Better”, “Smarter” business tools for YOU. Yes you. Don’t use their Worse, Dumberer desktop based software… Get their all cloud based software.

If you run a domain and lock down end-user access (like any sane Admin), then you probably know the pain points of running QuickBooks in your environment. At first glance it seems that QB online is not much different. They have a “webapp” you can install on your PC that appears to be built off Chromium. Run the installer and it conveniently dumps 550+ files (220+ MB) to the end-users local appdata… hooray for cloud software!. If you’re using roaming profiles, hopefully you use a third-party solution that allows you to include local appdata locations (sorry Microsoft people).

The good news is that you do not have the be a local administrator to run the installer, hooray!
The bad news is that it requires Visual C++… which requires administrator access (not a big deal I suppose…)

I kinda rambled on there about QBO. As I mentioned earlier, if you lock down your environment, you may be familiar with the following Group Policy option:

Locking users out of the registry is a good idea, but apparently Intuit doesn’t think so… Because if you have this enabled you may see the following error:

You may be saying, but I already installed VC++! Me too! I installed it four times and rebooted three times… it didn’t help… trust me.

If you disable ‘Prevent access to registry editing Tools, then QBO magically opens up. So unless Intuit decides to stop using their barbaric method to check if Visual C++ is installed, you may need to disable this GPO option for those users.

I’ve heard that Intuit has an all browser based QuickBooks Online website, but I have to assume they released this webapp to provide additional functionality. Otherwise why would you have two ways to access the software?

W32TM commands

I ran into a recurring issue in one of the data centers I help administer.

For some reason the hypervisor was overriding the Windows Time domain hierarchy by setting it to sync with the local CMOS instead of the Primary Domain Controller… Every reboot resulted in it being reset to UTC time. The VM option to sync with the host wasn’t enabled (or not easily changeable with this particular hypervisor).

Anyways, I hope this is finally put to bed.

These are the commands I used the most for troubleshooting:

w32tm /query /peers
w32tm /query /status
w32tm /query /configuration
w32tm /query /source

I configured the PDC to sync to external sources and made sure it was set to be a reliable source.
Example NTP peer list for a PDC:

w32tm /config /manualpeerlist:”0.us.pool.ntp.org 1.us.pool.ntp.org 2.us.pool.ntp.org 3.us.pool.ntp.org” /syncfromflags:manual /reliable:YES /update
w32tm /config /update
Restart the Windows Time service
Verify it is syncing using the commands above

Set the other domain controllers to use the domain hierarchy:

w32tm /config /syncfromflags:domhier /update
restart the Windows Time service

If you have the above properly configure and they still are not syncing via NT5DS domain hierarchy (like in my situation), you can wave the red flag and force it via GPO:

Computer Configuration \ Policies \ Admin Templates \ System \ Windows Time Service \ Time Providers \ Configure Windows NTP Client

NtpServer: enter your domain controllers  (DC1,0x9 DC2,0x9) separating each one with a space
Type: NT5DS

Link this GPO to the OUs containing your Workstations, Servers, etc. Just don’t link it to your Domain Controllers OU so they use the the configurations we used above. You can even create a GPO for the Domain Controllers if you so desire, but I won’t get into that here.

After performing the above, the Time on the servers started behaving they way you would expect on a Windows domain. Hopefully this helps someone else.

An honorable mention that I found along the way:

Reg key: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation
DWORD: RealTimeIsUniversal
Value: 0x1

This allowed the time and timezone to persist between reboots, but we were still syncing time with the CMOS. We wanted to sync with our domain controllers. If your goal is to sync with the BIOS of the physical host and have your time changes persist between power cycling, this is for you.

Blue Screen of Death Registry Corruption 0x00000051

Haven’t posted in a while… This issue really bothered me. Such a simple fix that took so long to find.

I found this solution on Alex’s IT Blog here.

We had a Windows Server 2008 R2 Terminal Server recently have an issue where it had a BSOD everytime a user logged in. No one had recently installed any applications, updates, or made any major changes to the OS. We had plenty of backups that we restored that exhibited the same issue. The server booted properly and you could even manage it remotely without issue. Booting into Safe Mode and logging in worked fine as well. A memory dump said services.exe was to blame and something in the registry was corrupt.

Manually set Windows to use LastKnownGood Configuration in the registry (since the startup options do not present this any longer).
Steps to do this: 
Boot your failed server into Safe Mode
Launch regedit
Change LastKnownGood to 3
Change Failed to 2
Log in and see if your server is functional again

Update to Sequence Like a Boss – BriForum 2015 Denver

An update to my Sequence Like a Boss presentation from BriForum 2015 Denver.

I attended Tim & Patrick’s session titled “5,4, 3, 2, 1, LIFTOFF! How Processes Become Virtualized” and learned that Acrobat DC is officially supported with App-V! In my session I mentioned that Adobe did not support Acrobat being sequenced in App-V. While that was true when I made my slides, it turns out they started supporting App-V 5 SP3 around a week ago. I do not believe they officially support older versions of Acrobat, but starting with DC is a big step.

Admin Guide/Recipe and more here: App-V Deployment: Acrobat DC

The Admin guide also mentions they have a separate MSI to enable “all” features of Acrobat.

To leverage all of Acrobat’s features, a supplementary App-V MSI must be installed on the user’s machine. The MSI should be available as a part of the downloaded .zip file. It contains Adobe Acrobat’s integration points for various applications such as:

  • MS Office Integration – Context Menu and In-App Acrobat Ribbons.

  • Mails Integration – MS Outlook and Lotus Notes will start showing Acrobat Features.

  • Adobe PDF Printer – Allows the user to print any file to Adobe PDF.

  • Web Capture – Allows the user to be able to convert a webpage to Adobe PDF inside the Browser.

  • Registers necessary fonts on the client which will be used by the virtual application.

I haven’t had time to go through the guide, but this is great news in the App-V community. Big thanks to Tim for mentioning that in his presentation.

Catch me at BriForum 2015 in Denver

I have the honor to be presenting at BriForum again this year! On top of that I will be presenting in two sessions:

Sequence Like a Boss – Presented by myself and co-presentor Drew Walz

In a continuation of the popular Sequencing for Success series, learn how to Sequence like a Boss. Just because an application doesn’t work at first pass doesn’t mean it can’t be virtualized. In this session, you will discover how shims and symbolic links can improve application compatibility. Learn how to identify the files and folders that need them. Find out how to use the same tools to troubleshoot application errors once an application has been virtualized.

Can’t Fix Your Application Issue? Try to Break it Instead!  – Presented by Drew Walz and me as the co-presentor.

Sometimes knowing how to break a Windows application can be the best way to determine how to fix it. “Break-it” triage can help you quickly identify the general category of what’s causing the problem with an app, and suggest acceptable short term workarounds. Deep-dive application troubleshooting tools and practices are great, but they require time, effort, and focus to use. In a customer outage situation, you’ll typically need to find a fix more rapidly. We’ll cover quick application troubleshooting triage tactics and workflows that will help you zero in on the source of the problem.

Register for BriForum Denver and find other great sessions at http://briforum.com/US/

BriForum 2014 video – Sequencing for Success

The BriForum 2014 videos are now publicly available! Catch the presentation that Rory and I did here: http://www.brianmadden.com/blogs/videos/archive/2014/08/05/briforum-2014-boston-rory-monaghan-amp-ryan-will-sequencing-for-success.aspx

Also, I will be presenting at Briforum 2015 twice this year! Be sure to catch my session ‘Sequence like a boss’ and I’ll be co-presenting with Drew Walz in ‘Can’t fix your application issue?  Try to break it instead!’

Creating shims with the Microsoft Application Compatibility Toolkit

I promised a while back to post some examples of creating and using shims. These are a little later than I wanted them to be, but here we are (finally). Since it took so long I added a bonus that I wasn’t able to include in my BriForum 2014 presentation, a video demonstration of the VIrtualRegistry shim.

My top 2 used shims:

  • CorrectFilePaths – These are similar to symbolic links, but are defined per .EXE instead of system wide
  • VirtualRegistry – Redirect registry calls. Can redirect HKLM to HKCU.

For a more detailed explanation on these, visit my previous post on shims.

Formatting your parameters:

CorrectFilePaths –

“original path”;”newpath”

Example:”C:\Programdata\Application X”;”Z:\ApplicationStore\Application X”

This will redirect the application call from the Programdata location to the Z drive. The Z could be a user mapped drive or any location you would prefer it go to. Keeping in mind that only the EXE(s) that you specify will only be redirected.

If you want to use environment variables such as %appdata%, I found that putting them at the begging of the parameter did not work. So I had to use “c:\users\%username%\appdata\roaming”.

Video Example:

VirtualRegisty –


Example: ADDREDIRECT(HKLM\Software\Application\Database^HKCU\Software\Application\Database)

This will redirect the application whenever it calls the above HKLM key to the HKCU specified in the example.

Video example:

Download the Microsoft Application Compatibility Toolkit (ACT) here