Virtual Engine are pleased to announce that we’re running official RES Workspace Manager 2012 training courses in July 2013, in London. The following courses are available:
- 3 day RES Workspace Manager 2012 Bronze RWMBC-510 course (details) between July 15 – 17 2013
- 4 day RES Workspace Manager 2012 Silver/Gold RWMBC-510, 520 and 530 courses (details) from 15 – 18 July 2013.
If you would like to attend either of these training courses or require pricing information then please get in contact. Places are allocated on a first-come, first-served basis!
This blog contains the ramblings of a man who has just installed System Center Configuration Manager 2012 SP1 in our RES Demo Showcase, to show how the integration works with RES Workspace Manager 2012.
The first thing I’d like to point out is why anyone would prefer to use Configuration Manager over RES Automation Manager is beyond me, but that’s probably left for another blog post. One thing I will say is that “simplicity” is not something I’d ever use to describe Configuration Manager! Enough of the drivel; lets get on with the real reason for this post.
Configuration Manager is used by many customers as a software delivery tool to deploy and install applications across their organisation. These applications can be targeted at devices or users and installed when required, i.e. when the user requests them or in a mandatory fashion; say when a new version of Microsoft Office is rolled out. Now this is all fine and dandy but there is no context awareness behind these deployment mechanisms. By context I mean Who they are, What type of device they are using, Where they are located and When they initiated the installation. Configuration Manager does now try and address this short coming by introducing the new “Applications” feature and “Rules”, but its limited in what it can do.
Those of you reading this blog post will hopefully already understand that RES Workspace Manager has been built around this ethos from before the dinosaurs (not quite, but you get my point). With that in mind you’d be correct in asking; wouldn’t it be a great idea if RES Workspace Manager could integrate with Configuration Manager? This would bring context awareness to application installs as well as delivering these applications “Just-In-Time,” i.e. when the user attempts to launch an application shortcut (if the application wasn’t already present). Well you might have guessed it by now, you can, and I’m going to show you how and what kind of things to look out for. I’m assuming you already know how to install and configure Configuration Manager (and its running ever so sweetly on your site servers consuming resources like there going out of fashion) so I’m not going to cover that bit!!
Configuration Manager “Applications”
One important point I’d like to mention here is that Workspace Manager does not yet support the new “Applications” feature in Configuration Manager 2012. When I say “support” I mean it will not work at all in Workspace Manager 2012 SR2. Whether that’s something RES will add at a later date I’m not entirely sure, but for the sake of this blog it doesn’t. That means you have to continue to create and use the old style “Packages” and “Programs” that everyone knew and loved in previous versions of Configuration Manager.
Configuration Manager “Advertisements”
Another important point that might be worth mentioning at this time, from my testing, it doesn’t seem you actually have to create the “Deployment” (aka “Advertisement” in older versions) for the Programs that will be integrated with RES Workspace Manager. From the testing I’ve been doing, what actually seems to happen is RES Workspace Manager creates a temporary collection and advertisement/deployment on the fly, and deletes these once the application has been deployed and installed. The collection is named after the device where you initiated the installation from and If you’re quick enough you can see these objects being created in Configuration Manager console.
Configuration Manager “Administrative User”
You need to supply RES Workspace Manager, with a user that’s been defined in Configuration Manage and has sufficient privileges to carry out certain tasks; namely manage collections and create deployments. Configuration Manager 2012 has various security roles predefined but from my testing the minimum role that can be used is the “Application Administrator”. So I’d create a new user in Active Directory, could be a service account, add them as an administrative user in Configuration Manager i.e. RESWM and assign them that role – if you not bothered about security, you can grant them the “Full Administrator” role .
The first thing we need to do is enable the integration in RES Workspace Manager; which is relatively straight forward and is split into two phases.
- Start the RES Workspace Manager console, under the Setup menu select Microsoft System Center…
- Select the check box Enable Microsoft System Center ConfigMgr Integration.
- You will need to enter the the Configuration Manager server that has the Management Point role installed, i.e. Primary Site server and check the Autodetect management server on client. This can be useful if you have a large Configuration Manager implementation and multiple Site Servers etc.
- The credentials you supply will need to have sufficient privileges to the Configuration Manager environment – as I’ve pointed out previously.
- When you click the Test Now… button for the first time, the version will automatically be enumerated for you and set accordingly.
- The next step in the process is to click the Test Now… button again. If successful you should be presented with a list of your defined Packages. As you can see from the screen shot below my list is not particularly exhaustive. This test also gives you the first indication that RES Workspace Management does not work with the new Applications feature as they aren’t listed.
- At this stage remember to click the Save Settings from the menu bar to commit your changes.
This concludes the first phase. We’re now in a position to use these Packages to install applications with the RES Workspace Manager integration; either at a global level or behind the configuration of an application – which is where I’d see it as most useful and what I’ve described below.
- Within the RES Workspace Manager console edit the managed application where you’re going to add the Configuration Manager integration; in my example I’m going to use WinRAR.
- From the Configuration tab add the Microsoft ConfigMgr action (shown below).
- You’ll see the Edit software distribution dialogue displayed.
- The first thing you probably want to do here is select the Program you’re going to deploy/install when this application is launched. You do this by clicking (…) in the Program field. What’s actually occurring here, is the Management Server that was defined in Phase 1 is being contacted to retrieve a list of Packages and Programs. The result should look something like this; hopefully your list contains more than my paltry set of programs.
- Simply select the program you want to deploy and click OK. In my example I’m using WinRAR Archiver.
- You’ll need to fill in the rest of the fields as shown below (obviously changing WinRAR to something that matches you application!).
- I probably need to explain some of my choices I’ve made here to avoid any confusion.
- The Package name is automatically completed upon selecting the program;
- I’ve checked the Skip if application executable not found ‘cos why would you want to try and deploy/install an application again if its already present? Makes sense I hope?!;
- Now I’ve left the The Run Once as No ; using this setting in conjunction with the previous setting means should anyone uninstall the application is will instruct Configuration Manager to redeploy and reinstall the application again (because the executable will be missing);
- For the Custom status message I’d certainly recommend mentioning its being installed by Configuration Manager. It’s not like we live in a “no blame culture” and someone would never, ever blame RES Workspace Manager if the installation was taking a long time, is it!? Anyway, there’s nothing more a user likes than a bit of feedback as to what’s happening.
- Wait for task to finish before continuing is pretty obvious along with Run before other actions; you can’t launch the application if its not installed right?
Now that you have finished with the RES Workspace Manager setup give yourself a good pat on the back and keep your fingers crossed that Configuration Manager continues to play ball! In theory we’re now in a good position to login and launch our application from the shortcut, RES Workspace Manager will determine if the application executable is present and if not it will instruct the Configuration Manager client (CcmExec.exe) to contact the Management Point too deploy and install the application from the Distribution Point. When this magic occurs (as you can see from the screen shot) you’re presented with a very informative message box from RES Workspace Manager, just above the system tray, letting you know that something is happening.
At this point you’re at the mercy of Configuration Manager which can potentially take a while to deploy and install the application. It goes without saying that should the this part be successful, the application will launch. You might have noticed from the screen shot above that there weren’t any Configuration Manager notifications and that’s simply because I supressed the notifications. Within the program definition in Configuration Manager (as you can see below) simply check the Suppress program notifications checkbox. In your environment you might want these turned on, I just don’t like too many system tray notifications popping out at the users.
There are a couple of places in RES Workspace Manager that you can look to see when a Configuration Manager task was invoked and the outcome for troubleshooting purposes or just because your nosey! The first place too take a look at is the Log tab under the Setup menu select Microsoft System Center…
This gives an good overview of each task invoked. You can also use the Diagnostics > Event Logs to view the outcome per user session as seen here:
Now if for any reason the installation fails you’ll probably need to go and have a chat with the Configuration Manager “guru” (maybe that lucky person is you?) and look at the myriad of Configuration Manager logs to see why it failed.
Some Takeaways (Indian Please )
- Using RES Workspace Manager with Configuration Manager allows you to bring Context Awareness to your application deployments and install them Just-in-Time;
- Have a friendly word with your Configuration Manager “guru” before you begin, so he understands why you’re doing this and how it can benefit them too;
- You’ll need the Configuration Manager server details that have the Management Point role installed;
- Make sure you have the details or created an account that has correct Security Role defined in Configuration Manager;
- RES Workspace Manager 2012 SR2 can’t presently integrate with the new Applications feature in Configuration Manager 2012;
- You don’t need to create Deployments/Advertisements or Collections beforehand in Configuration Manager for the integration to work with RES Workspace Manager;
I’ve tried to be as factually correct as possible but I confess that I’m no Configuration Manager “guru.” Please do leave a comment if I’ve got something horribly wrong and I hope you’ve found this blog post useful.
Virtual Engine are pleased to announce the BETA release of the App-V 5 Configuration Editor (ACE). This (free) utility provides a simple user interface for editing App-V 5 the machine or user dynamic configuration files without manually hacking the underlying XML files.
Virtual Engine are pleased to announce the BETA release of the App-V 5 Configuration Editor (ACE). This (free) utility provides a simple user interface for editing App-V 5 machine or user dynamic configuration files without manually hacking the underlying XML files.
We’ve been working hard getting the App-V 5 Configuration Editor (ACE) ready for a BETA release; take a look at the ACE page for a bit more information about why it was developed.
With any new application it’s great to have some user guides, right (RTFM)?!? Rest assured that will come when it’s officially released, in the mean time we wanted to create this short blog to guide you through the ACE interface. There is also an assumption here you have an understanding of the App-V 5 Dynamic Configuration files and how they are used, if not you might want to take a look at this technet article.
You will notice there are three main buttons in the tool bar as shown below:
Previews the changes that will be made to the App-V XML file before saving. This gives you the ability to check out the structure of the generated XML. It’s probably a good idea to point out here that you don’t need to preview the changes prior to performing a save.
This sections displays the Package Display Name, Package ID and Type of XML file opened, i.e. DeploymentConfig or UserConfig. Here is an example DeploymentConfig.xml opened below:
MAIN CONFIGURATION TABS
Once an App-V 5 configuration XML file has been opened you can then begin to make changes as required using the tabs set out below.
Under the User Configuration tab you can change and view various options and configurations:
Various global options change be changed here if you so desire, e.g. altering the COM integration mode.
This tab allows you to view all the defined Shortcuts within the package.
NOTE: at this time its Read Only but is great for getting an overview of all the Shortcuts available.
Scripts (User Context)
This is really where ACE starts to make life simple . You can easily define which scripts you’d like to add and to which actions, e.g. PublishPackage, UnpublishPackage, StartVirtualEnvironment, TerminateVirtualEnvironment, StartProcess and ExitProcess. There is no need to worry about getting the syntax in the XML file right. There are are some excellent blogs out there talking about using scripts in App-V 5.0, so I suggest you take a look here at one from Tim Murgent and Microsoft’s own Steve Thompson if you need some further background information.
NOTE: You might have noticed that not all the script actions are available under this tab, that’s simply because those excluded aren’t permitted to run under the User Configuration section of the XML file.
I think most of the options are self explanatory but, it’s good to point out that leaving the Timeout value at 0 means no timeout period will be set, i.e. it will wait indefinitely for it to finish so use with caution.
Under the Machine Configuration tab you can alter global options, configure scripts and control the termination of processes.
NOTE: this tab will only be available when you open a DeploymentConfig.xml file. This is because machine configuration items cannot be set in the UserConfig.xml file.
Here you’ll find any options that can be changed if you so desire.
Terminate Child Processes
You can define the path to an executable, that when closed, will terminate any child process running within the virtual environment.
Scripts (System Context)
Very much like the Scripts tab under User Configuration you can define which scripts you’d like to add to which actions, e.g. AddPackage, RemovePackage, PublishPackage and UnpublishPackage.
NOTE: You might have noticed that not all the script actions are available under this tab, that’s simply because those excluded aren’t permitted to run under the Machine Configuration section of the XML file.
You can view both the source (original) XML and/or preview the generated XML under this tab.
This is simply where you can view your source App-V XML file as it was when you opened it.
NOTE: You don’t have to preview the changes prior to performing a save.
The example below (highlighted in yellow) shows the changes made by ACE in the generated XML format.
Hopefully this brief guide has given you a good overview of how to use ACE. Hopefully you’ll agree its pretty intuitive to use and should make editing the App-V 5 Dynamic Configuration files a lot, lot easier (well we think so anyway!)
DISCLAIMER: THE APP-V CONFIGURATION EDITOR IS FREE TO USE AT YOUR OWN RISK, WE CANNOT BE HELD RESPONSIBLE FOR ANY DAMAGE IT MIGHT CAUSE.
Virtual Engine are pleased to announce the release of the App-V 5.0 .APPV Package PowerShell CmdLets. These (free) PowerShell CmdLets enable you to query, extract files and report on the contents of .APPV files generated by the App-V 5 sequencer, without renaming them and manually opening them. Happy PowerShelling!
Manipulating XML files with PowerShell is something that we’re having to accomplish more and more internally. Microsoft App-V 5.0 and RES Workspace Manager utilise XML files extensively. Whilst we can manually tweak them, there’s nothing like automating things for consistency and speed!
I have seen a lot of “rip and replace” and “find and replace” script examples, but ensuring that the correct elements/nodes are added in the correct place can be troublesome. The only real option is to utilise the built-in .Net Framework XML objects. Hopefully this post will lay the basis for some more App-V 5.0 focused blogs in the future .
There are lots of forum posts out there that detail snippets of information, but a lot of it is trial and error. As a starting point you might want to read up here first. Reading XML files is one thing, but as the previous article mentions, inserting (multiple) elements can be quite convoluted. Note: I’m using the XmlDocument .Net object here but it is possible to utilise other .Net classes, e.g. XPath and/or XDocument.
Here is the example we’ll use in this post. Apologies; the XML formatting is stripped by the plugin:
<!-- employees.xml --> <employees> <employee id="101"> <name>Frankie Johnny</name> <age>36</age> </employee> <employee id="102"> <name>Elvis Presley</name> <age>79</age> </employee> <employee id="301"> <name>Ella Fitzgerald</name> <age>102</age> </employee> </employees>
Creating XML Elements
If we wish to add a new employee record to the above document, we need to create a new XML element (or node). Firstly we need to load the XML document:
$fileName = “employees.xml”; $xmlDoc = [System.Xml.XmlDocument](Get-Content $fileName);
Now we can create our new element/node, append it to the parent reference and save it:
$newXmlEmployeeElement = $xmlDoc.CreateElement("employee"); $newXmlEmployee = $xmlDoc.employees.AppendChild($newXmlEmployeeElement); $xmlDoc.Save($fileName);
To shorten this we can just use this (see here for more information on the CreateElement method):
$newXmlEmployee = $xmlDoc.employees.AppendChild($xmlDoc.CreateElement("employee")); $xmlDoc.Save($fileName);
If we examine the resulting XML file we’ll find the following (note the new empty element):
<!-- employees.xml --> <employees> <employee id="101"> <name>Frankie Johnny</name> <age>36</age> </employee> <employee id="102"> <name>Elvis Presley</name> <age>79</age> </employee> <employee id="301"> <name>Ella Fitzgerald</name> <age>102</age> </employee> <employee /> </employees>
Adding XML Attributes
To add the ID attribute tag in the XML document, we need to create a new XmlDocument Attribute and then attach it to our newly created element. We can create an XmlDocument attribute on our element with the following code:
$newXmlEmployee = $xmlDoc.employees.AppendChild($xmlDoc.CreateElement("employee")); $newXmlEmployee.SetAttribute(“id”,”111”); $xmlDoc.Save($fileName);
Now our resulting XML file looks like this:
<!-- employees.xml --> <employees> <employee id="101"> <name>Frankie Johnny</name> <age>36</age> </employee> <employee id="102"> <name>Elvis Presley</name> <age>79</age> </employee> <employee id="301"> <name>Ella Fitzgerald</name> <age>102</age> </employee> <employee id="111"> </employees>
Adding Nested XML Elements
Knowing how to add elements we can simply create our sub elements and attach them to our newly created parent reference:
$newXmlNameElement = $newXmlEmployee.AppendChild($xmlDoc.CreateElement("name")); $newXmlAgeElement = $newXmlEmployee.AppendChild($xmlDoc.CreateElement("age"));
The resulting XML file now looks like:
<!-- employees.xml --> <employees> <employee id="101"> <name>Frankie Johnny</name> <age>36</age> </employee> <employee id="102"> <name>Elvis Presley</name> <age>79</age> </employee> <employee id="301"> <name>Ella Fitzgerald</name> <age>102</age> </employee> <employee id="111"> <name /> <age /> </employee> </employees>
Adding XML Text Nodes
Unbeknownst to me, when you have text within an element tag, i.e. <name>Iain Brighton</name>, this is known as a text node (at least in XDocument speak). This is probably the bit that took longest to work out.
To add the text node we can use the following code:
$newXmlNameElement = $newXmlEmployee.AppendChild($xmlDoc.CreateElement("name")); $newXmlNameTextNode = $newXmlNameElement.AppendChild($xmlDoc.CreateTextNode("Iain Brighton")); $newXmlAgeElement = $newXmlEmployee.AppendChild($xmlDoc.CreateElement("age")); $newXmlAgeTextNode = $newXmlAgeElement.AppendChild($xmlDoc.CreateTextNode("37"));
<!-- employees.xml --> <employees> <employee id="101"> <name>Frankie Johnny</name> <age>36</age> </employee> <employee id="102"> <name>Elvis Presley</name> <age>79</age> </employee> <employee id="301"> <name>Ella Fitzgerald</name> <age>102</age> </employee> <employee id="111"> <name>Iain Brighton</name> <age>37</age> </employee> </employees>
Full PowerShell Code Snippet
Here is the full code listing:
$fileName = “employees.xml”; $xmlDoc = [System.Xml.XmlDocument](Get-Content $fileName); $newXmlEmployee = $xmlDoc.employees.AppendChild($xmlDoc.CreateElement("employee")); $newXmlEmployee.SetAttribute("id","111"); $newXmlNameElement = $newXmlEmployee.AppendChild($xmlDoc.CreateElement("name")); $newXmlNameTextNode = $newXmlNameElement.AppendChild($xmlDoc.CreateTextNode("Iain Brighton")); $newXmlAgeElement = $newXmlEmployee.AppendChild($xmlDoc.CreateElement("age")); $newXmlAgeTextNode = $newXmlAgeElement.AppendChild($xmlDoc.CreateTextNode("37")); $xmlDoc.Save($fileName);
Following on from the release of the Virtual Engine App-V 5.0 PowerShell CmdLets, I thought I best give you a quick run through on setting them up! Installing the PowerShell modules is easy, regardless of whether you’re installing them just for your user account or on a per machine basis. Note: we will package these up into a .MSI once we’ve had some initial feedback and fixed any “features!”
Per User Installation
To install the new modules on a per-user basis, extract the files into your ‘Documents\WindowsPowerShell\Modules\’ directory:
Per Computer Installation
To install the new modules on a per-computer basis, extract the files into the ‘C:\Windows\System32\WindowsPowerShell\v1.0\Modules\’ (or %PSModulePath% for short!) directory:
To import and use the modules, simply run the following PowerShell command (they are digitally signed):
You may be prompted to confirm that you trust the publisher (!?). The modules are digitally signed. If you want to use them, then you better ensure that you select the ‘Always Run’ (or at lease ‘Run Once’) option!
Once they’re loaded you can check by running the following PowerShell command. If you see something similar to this then you should be all set:
PS C:\Windows\system32> Get-Command -Module VirtualEngine* CommandType Name ModuleName ----------- ---- ---------- Function Get-AppV5File VirtualEngine-AppV5 Function Get-AppV5FilePackage VirtualEngine-AppV5 Function Get-AppV5FileReport VirtualEngine-AppV5 Function Get-AppV5FileXml VirtualEngine-AppV5 Function Get-AppV5FileXmlPackage VirtualEngine-AppV5 Function Get-VEAppV5Version VirtualEngine-AppV5 Function Save-AppV5File VirtualEngine-AppV5 Function Save-AppV5FileReport VirtualEngine-AppV5 Function Save-AppV5FileXml VirtualEngine-AppV5 Function Save-AppV5FileXmlPackage VirtualEngine-AppV5 PS C:\Windows\system32>
Note: The modules require PowerShell 3.0 and the Microsoft .Net Framework 4.5. These are installed by default on Windows 8 and Windows Server 2012. If you’re running Windows 7 without these requirements, then you’ll receive errors. Make sure you meet these requirements.
Whilst doing a lot of work with App-V 5.0 we have come across the requirement to look inside the .appv file with PowerShell. In our particular instance we’re after the package VersionId which is contained in the AppxManifest.xml file. As previously championed, we love automating and this should be easy!
The .appv file extension is a compressed archive and therefore, should be simple to crack open. After scouring the interweb, there is very little information on how to achieve this in code. We could use the built-in Shell32.dll functionality but this requires us to rename the file to .zip first. Ideally we want to avoid copying or renaming the source files. I did find one reference over on the Login Consultants forum which pointed me in the right direction.
Disclaimer: the following code requires the .Net Framework 4.5. The System.IO.Compression.FileSystem object is not available in previous releases. You can check in the C:\Windows\Microsoft.NET\assembly\GAC_MSIL\ folder and if you have the System.IO.Compression.FileSystem folder you should be good to go .
To get this new .Net functionality to work within PowerShell we will be calling the .Net assemblies directly and therefore need to create a couple of references. In our example we’ll be using both the System.IO.Compression and System.IO.Compression.FileSystem assemblies (two different DLLs hence the two references):
### The System.IO.Compression.FileSystem requires at least .Net Framework 4.5 [System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression") | Out-Null; [System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | Out-Null;
Next we can create our FileStream object (with read only access) required by the ZipArchive object class.
### Open the ZipArchive with read access $FileStream = New-Object System.IO.FileStream($SourceAppV5Archive, [System.IO.FileMode]::Open); $AppV5Archive = New-Object System.IO.Compression.ZipArchive($FileStream);
In fact we can shorten this down to a single line:
### Open the ZipArchive with read access $AppV5Archive = New-Object System.IO.Compression.ZipArchive(New-Object System.IO.FileStream($SourceAppV, [System.IO.FileMode]::Open));
Once we have opened our .ZIP (.appv) file we can retrieve the AppXManifest.xml file entry:
### Locate the AppxManifest.xml file $AppxManifestEntry = $AppV5Archive.GetEntry("AppxManifest.xml");
Having the ZipArchiveEntry object we can extract it with the ExtractToFile method:
### Extract the $ZipArchiveEntry $ZipArchiveEntry.ExtractToFile($SaveAs);
Unfortunately this does work and reports the following error:
Method invocation failed because [System.IO.Compression.ZipArchiveEntry] doesn't contain a method named 'ExtractToFile'.
Eh!? WT… Looking on the ZipArchiveEntry reference page on MSDN, the ExtractToFile is an Extension Method. Therefore, we need to utilise the underlying object method, the ZipFileExtensions.ExtractToFile method. For more information on Extension Methods in PowerShell see here and here. Now our code should look like this:
### Extract the ZipArchiveEntry (ZipArchiveEntry.ExtractToFile is an extension method) [System.IO.Compression.ZipFileExtensions]::ExtractToFile($AppxManifestEntry, $SaveAs, $Overwrite);
Finally we need to ensure that we correctly dispose of the ZipArchive object otherwise we’ll leave it open:
### Ensure we close the file handle otherwise the file will be left open $AppV5Archive.Dispose();
That’s it! It you want a simpler way of doing this, just download the Virtual Engine App-V 5.0 Package PowerShell CmdLets. You can achieve all this in just a single command:
Save-AppV5FileXml -AppV c:\package.appv -XML AppxManifest
Full PowerShell Code Snippet
Here is the full code listing:
### The System.IO.Compression.FileSystem requires at least .Net Framework 4.5 [System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression") | Out-Null; [System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | Out-Null; ### Open the ZipArchive with read access $AppV5Archive = New-Object System.IO.Compression.ZipArchive(New-Object System.IO.FileStream($SourceAppV5Archive, [System.IO.FileMode]::Open)); ### Locate the AppxManifest.xml file $AppxManifestEntry = $AppV5Archive.GetEntry("AppxManifest.xml"); ### ZipArchiveEntry.ExtractToFile is an extension method [System.IO.Compression.ZipFileExtensions]::ExtractToFile($AppxManifestEntry, $SaveAs, $true); ### Ensure we close the file handle otherwise the file will be left open $AppV5Archive.Dispose();
This post is just a heads-up on some errors we’ve seen importing Group Policy Objects into RES Workspace Manager with the latest Virtual Engine Toolkit v1.2 release. In version v1.2 we introduced the ability to convert GPO permissions and OU links. To achieve this we needed to alter the way in which we enumerated the Group Policy Objects present within the source Active Directory domain.
VET v1.2 directly scans the SYSVOL volume (this approach has changed in VET v2.0). Unfortunately, if there is an errant folder that persists in the SYSVOL (but is no longer present in Active Directory) this error is not correctly trapped. The net result is a spectacular .NET exception error!
Internally we have code that fixes this issue, but it’ll be a few days before @nathan_sperry has digitally signed the new executable and built a new MSI installer. When this update is available, you will receive an update notification informing you that there’s an update available.
In the meantime, if you receive a crash when importing GPOs, you’ll need to track down the errant policy folder and either delete the redundant GPO folder or remove the \USER\registry.pol or \MACHINE\registry.pol file.
Whilst the VET v1.3 is primarily a bug fix we are introducing something completely new, e.g. it’s nothing to do with VET, PuU, JET or JETCMD. It’s something we have been using internally and at customers for a long time. Stay tuned for more information…