After installing Server 2012 Standard on ESX 5.1 I completed all available Windows Updates and proceeded to add the WSUS role. I chose the default WID database and the role addition was seemingly successful. Unfortunately, the Post-deployment
Configuration failed. A log file had been created in the AppData\Local\Temp folder but at initial glance it seemed to imply that my error was likely due to skipping a step during installation via PowerShell. However, I didn't install using PowerShell
and I set off to surf the Internets for clues on resolving this issue. I searched about a dozen forums that with similar, but different issues until a comment by Lawrence Garvin (http://social.technet.microsoft.com/profile/lawrence%20garvin/?ws=usercard-inline)
convinced me to go back and look at my log.
2013-07-23 11:03:18 Postinstall started
2013-07-23 11:03:18 Detected role services: Api, UI, WidDatabase, Services
2013-07-23 11:03:18 Start: LoadSettingsFromXml
2013-07-23 11:03:18 Start: GetConfigValue with filename=UpdateServices-Services.xml item=ContentLocal
2013-07-23 11:03:18 Value is true
2013-07-23 11:03:18 End: GetConfigValue
2013-07-23 11:03:18 Start: GetConfigValue with filename=UpdateServices-Services.xml item=ContentDirectory
2013-07-23 11:03:18 Config file did not contain a value "ContentDirectory"
2013-07-23 11:03:18 Microsoft.UpdateServices.Administration.CommandException: A required configuration value was not found in the system. This is usually caused by installing WSUS through PowerShell and not specifying a configuration file. Review the
article Managing WSUS Using PowerShell at TechNet Library (http://go.microsoft.com/fwlink/?LinkId=235499) for more information on the recommended steps to perform WSUS installation using PowerShell.
at Microsoft.UpdateServices.Administration.PostInstall.GetConfigValue(String filename, String item)
at Microsoft.UpdateServices.Administration.PostInstall.LoadSettingsFromXml()
at Microsoft.UpdateServices.Administration.PostInstall.Initalize(Parameters parameters)
at Microsoft.UpdateServices.Administration.PostInstall.Execute(String[] arguments)
Fatal Error: A required configuration value was not found in the system. This is usually caused by installing WSUS through PowerShell and not specifying a configuration file. Review the article Managing WSUS Using PowerShell at TechNet Library (http://go.microsoft.com/fwlink/?LinkId=235499)
for more information on the recommended steps to perform WSUS installation using PowerShell.
Upon closer inspection the specifics of my error were right there for me, I just had to look at it long enough to decipher the details. What I now read is that Post-deployment configuration finds a file called UpdateServices-Services.xml (I found it in
Windows\System32\ServerManager\ComponentConfiguration\). It determines that ContentLocal=True which correctly indicates that my updates are to be stored locally. It proceeds to inquire about the ContentDirectory, but comes back without a value.
Here are my UpdateServices-Services.xml file contents
<?xml version="1.0" encoding="utf-16"?><INSTANCE CLASSNAME="ServerComponent_UpdateServices_Services"><PROPERTY NAME="ContentDirectory" TYPE="string"></PROPERTY><PROPERTY NAME="ContentLocal" TYPE="boolean"><VALUE>true</VALUE></PROPERTY></INSTANCE>
I can see that the ContentLocal property did indeed have the value true, but the ContentDirectory property did not have a value. I now needed to figure out if a String value could be specified in the same way a Boolean value was, or if it needed quotes
around it, or was supposed to be specified more like an attribute (learned about that somewhere along the way). I couldn't find any conclusive websites, and I didn't want to just try it for fear of the Post-deployment configuration running with an invalid
ContentDirectory. Once again I returned to my log file and searched for answers at the http://go.microsoft.com/fwlink/?LinkId=235499 that was indicated. I didn't find any exact matches, but eventually I found a sample .xml file that specified a
string value. It specified it as <VALUE>string</VALUE> with no brackets, so I knew to specify mine as <VALUE>C:\LocalMSUpdateCache</VALUE> and saved it. My UpdateServices-Services.xml now looks like this:
<?xml version="1.0" encoding="utf-16"?><INSTANCE CLASSNAME="ServerComponent_UpdateServices_Services"><PROPERTY NAME="ContentDirectory" TYPE="string"><VALUE>C:\LocalMSUpdateCache</VALUE></PROPERTY><PROPERTY NAME="ContentLocal" TYPE="boolean"><VALUE>true</VALUE></PROPERTY></INSTANCE>
I returned to Server Manager -> WSUS and re-attempted the Postdeployment configuration. It completed successfully!
I'm glad that my fix was relatively simple and that Lawrence was particular about the details of the log file.
1. My exact error isn't always going to be documented
2. Just because the log file looks unintelligible (I have thus far avoided both powershell and xml), doesn't mean it's useless.
Good luck to anyone with a similar issue. You too may be able to figure it out yourself.