Today I created a new configuration data for a DSC configuration and got the following error: all elements of AllNodes need to be hashtable and has a property ‘NodeName’. The config looked good:
$ConfigurationData = @{ AllNodes = @( @{ DeploymentPath = "$(${env:ProgramFiles(x86)})\Company\MyProject" ServiceName = "NameOfService" DisplayName = "Display name of the service." } @{ NodeName = $env:Computername } ); }
AllNodes was a hashtable and it had the desired node name. So where was the error?
I forgot one little thing: the global configuration needs a property NodeName set to an asterisk. Adding this fixed the error.
$ConfigurationData = @{ AllNodes = @( @{ NodeName = "*" DeploymentPath = "$(${env:ProgramFiles(x86)})\Company\MyProject" ServiceName = "NameOfService" DisplayName = "Display name of the service." } @{ NodeName = $env:Computername } ); }
This is really easy – but a search for the error message did not return any useful results. Therefor I decided to share it anyway…
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.AggregateException: One or more errors occurred. ---> Microsoft.TeamFoundation.Release.Common.Helpers.OperationFailedException: Copying recursively from \\someserver\drop\... to C:\Windows\DtlDownloads\Component succeeded. System.AggregateException: Failed to execute the powershell script. Consult the logs below for details of the error. all elements of AllNodes need to be hashtable and has a property 'NodeName'. +At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration\PSDesiredStateConfiguration.psm1:1171 char:30 + $dataValidated = ValidateUpdate-ConfigurationData $ConfigurationData + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CategoryInfo :InvalidOperation: (:) [Write-Error], InvalidOperationException FullyQualifiedErrorId :ConfiguratonDataAllNodesNeedHashtable,ValidateUpdate-ConfigurationData ---> System.InvalidOperationException: all elements of AllNodes need to be hashtable and has a property 'NodeName'. --- End of inner exception stack trace --- at Microsoft.VisualStudio.Services.DevTestLabs.RemoteDeployer.Deployment.PowershellExecutor.Invoke(String errorContextMessage, Boolean writeResultToLog, Boolean isCancellable) at Microsoft.VisualStudio.Services.DevTestLabs.RemoteDeployer.Deployment.ScriptExecutor.ExecuteScript(IPowerShell powerShell, String script, Boolean useHttp) at Microsoft.VisualStudio.Services.DevTestLabs.RemoteDeployer.Deployment.DeploymentService.RunPowerShellScripts(DeploymentMachineSpecification deploymentMachine, ScriptSpecification scriptSpecification, ScriptSpecification initializationScriptSpecification, String applicationPath, IPowerShell powerShellSession) ---> (Inner Exception #0) System.InvalidOperationException: all elements of AllNodes need to be hashtable and has a property 'NodeName'.<--- at Microsoft.TeamFoundation.Release.EnvironmentProvider.OnPrem.Implementation.OnPremDeploymentProvider.ReadDeploymentResponse(DeploymentResponse response) at Microsoft.TeamFoundation.Release.EnvironmentProvider.OnPrem.Implementation.OnPremDeploymentProvider.<RunPowerShellScript>d__9.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.TeamFoundation.Release.EnvironmentProvider.OnPrem.Implementation.OnPremDeploymentProvider.<RunScript>d__0.MoveNext() --- End of inner exception stack trace --- at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification) at Microsoft.TeamFoundation.Release.MonitorServices.Dsc.OnPrem.OnPremDeploymentActions.InvokePlatform(String activityId, MachineSpecification machineSpecification, StorageSpecification storageSpecification, String scriptPath, String configurationPath, Dictionary`2 configurationVariables) at Microsoft.TeamFoundation.Release.MonitorServices.Dsc.OnPrem.OnPremDeploymentActions.RunScript(DscComponent dscComponentParameters, String serverName, String userName, String password, String componentName, String scriptPath, String configurationPath, String useCredSecuritySupportProvider, String useHttps, String skipCACheck) --- End of inner exception stack trace --- at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at Microsoft.TeamFoundation.Release.DeploymentAgent.Services.Deployer.Dsc.DscComponentInstaller.InvokeMethodByReflection(String methodArguments)