This is one of those issues that makes me question a lot of step-by-step blog posts on Windows Server Containers that are out there – plenty of people were quick to publish guides on containers and didn’t mention encountering this issue which I always encounter; I suspect that there’s a lot of copy/pasting from Microsoft sites with little actual testing in a rush to be first to publish. It’s clear that many bloggers didn’t try to install things in a container that required administrator rights, because UAC was blocking those actions. In my case, it was installing IIS in a Windows Server 2016 (WS2016) Technical Preview 3 (TPv3) container.
In my lab, I created a new container and then logged in using the following (I had already populated $Container by returning the container object into the variable):
Enter-PSSession -ContainerId $Container.ContainerId -RunAsAdministrator
And then I tried to install some role/feature, such as IIS using Install-WindowsFeature:
Install-WindowsFeature -Name Web-Server
I logged in using -RunAsAdministrator so I should have no issues with UAC, right? Wrong! Because the installation fails as follows:
Install-WindowsFeature : An unexpected error has occurred. The system cannot find the file specified. Error: 0x80070002
+ CategoryInfo : InvalidResult: (@{Vhd=; Credent…Name=localhost}:PSObject) [Install-WindowsFeature], Exception
+ FullyQualifiedErrorId : RegistryKey_OpenSubKey_Failed,Microsoft.Windows.ServerManager.Commands.AddWindowsFeatureCommand
What’s the solution? When you are remoted into the container you need to raise your administrator privileges to counter UAC. You can do this as follows, after you log into the container:
Start-Process Powershell.exe -Verb runAs
Run Install-WindowsFeature now and it will complete.
Sorted!
Note: I have found in my testing that IIS behaves poorly in TPv3. This might be why Microsoft’s getting started guides on MSDN use nginx web server instead of IIS! I’ve confirmed that nginx works perfectly well.
Thanks, helped me out 🙂