Once a TFS build agent is configured on a build server it should scan the server for all capabilities and add them to a list. These capabilities can then be linked to demands to select an appropriate agent for your specific build script.
However at one client we noticed that the list of capabilities for all agents turned out rather empty whereas a lot of components were in fact installed on the server.
Inside the agent logs we found the following error message:
[2017-05-03 09:06:01Z INFO ProcessInvoker] Process started with process id 2828, waiting for process exit.
[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR: . : File D:\Builds\dev-agent-3\bin\powershell\Add-Capabilities.ps1 cannot be loaded. The file D:\Builds\dev-agent-3\bin
[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR: \powershell\Add-Capabilities.ps1 is not digitally signed. You cannot run this script on the current system. For more in
[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR: formation about running scripts and setting execution policy, see about_Execution_Policies at http://go.microsoft.com/f
[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR: wlink/?LinkID=135170.
[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR: At line:1 char:3
[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR: + . 'D:\Builds\dev-agent-3\bin\powershell\Add-Capabilities.ps1'
[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR: + CategoryInfo : SecurityError: (:) [], PSSecurityException
[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR: + FullyQualifiedErrorId : UnauthorizedAccess
[2017-05-03 09:06:03Z INFO ProcessInvoker] Finished process with exit code 1, and elapsed time 00:00:01.2248303.
On this server a group policy is applied that prevents the execution of unsiged Powershell scripts. As the agent is using Powershell to scan a system for capabilities it failed silenty behind the scenes.
The solution was to ask the server team to sign all scripts for us.