diff --git a/internal/pkg/commands/devices.go b/internal/pkg/commands/devices.go
index 3068902..85cba8b 100644
--- a/internal/pkg/commands/devices.go
+++ b/internal/pkg/commands/devices.go
@@ -851,31 +851,30 @@
 				metric.SampleFreq = pmConfigs.DefaultFreq
 			}
 		}
+		outputFormat := CharReplacer.Replace(options.Format)
+		if outputFormat == "" {
+			outputFormat = GetCommandOptionWithDefault("device-pm-configs", "format", DEFAULT_DEVICE_PM_CONFIG_METRIC_LIST_FORMAT)
+		}
 
+		orderBy := options.OrderBy
+		if orderBy == "" {
+			orderBy = GetCommandOptionWithDefault("device-pm-configs", "order", "")
+		}
+
+		result := CommandResult{
+			Format:    format.Format(outputFormat),
+			Filter:    options.Filter,
+			OrderBy:   orderBy,
+			OutputAs:  toOutputType(options.OutputAs),
+			NameLimit: options.NameLimit,
+			Data:      pmConfigs.Metrics,
+		}
+
+		GenerateOutput(&result)
+		return nil
+	} else {
+		return fmt.Errorf("Device '%s' does not have Non Grouped Metrics", options.Args.Id)
 	}
-
-	outputFormat := CharReplacer.Replace(options.Format)
-	if outputFormat == "" {
-		outputFormat = GetCommandOptionWithDefault("device-pm-configs", "format", DEFAULT_DEVICE_PM_CONFIG_METRIC_LIST_FORMAT)
-	}
-
-	orderBy := options.OrderBy
-	if orderBy == "" {
-		orderBy = GetCommandOptionWithDefault("device-pm-configs", "order", "")
-	}
-
-	result := CommandResult{
-		Format:    format.Format(outputFormat),
-		Filter:    options.Filter,
-		OrderBy:   orderBy,
-		OutputAs:  toOutputType(options.OutputAs),
-		NameLimit: options.NameLimit,
-		Data:      pmConfigs.Metrics,
-	}
-
-	GenerateOutput(&result)
-	return nil
-
 }
 
 func (options *DevicePmConfigMetricEnable) Execute(args []string) error {
@@ -899,8 +898,17 @@
 	}
 
 	if !pmConfigs.Grouped {
+		metrics := make(map[string]struct{})
+		for _, metric := range pmConfigs.Metrics {
+			metrics[metric.Name] = struct{}{}
+		}
+
 		for _, metric := range pmConfigs.Metrics {
 			for _, mName := range options.Args.Metrics {
+				if _, exist := metrics[string(mName)]; !exist {
+					return fmt.Errorf("Metric Name '%s' does not exist", mName)
+				}
+
 				if string(mName) == metric.Name && !metric.Enabled {
 					metric.Enabled = true
 					_, err := client.UpdateDevicePmConfigs(ctx, pmConfigs)
@@ -910,6 +918,8 @@
 				}
 			}
 		}
+	} else {
+		return fmt.Errorf("Device '%s' does not have Non Grouped Metrics", options.Args.Id)
 	}
 	return nil
 }
@@ -935,17 +945,29 @@
 	}
 
 	if !pmConfigs.Grouped {
+		metrics := make(map[string]struct{})
+		for _, metric := range pmConfigs.Metrics {
+			metrics[metric.Name] = struct{}{}
+		}
+
 		for _, metric := range pmConfigs.Metrics {
 			for _, mName := range options.Args.Metrics {
+				if _, have := metrics[string(mName)]; !have {
+					return fmt.Errorf("Metric Name '%s' does not exist", mName)
+				}
 				if string(mName) == metric.Name && metric.Enabled {
 					metric.Enabled = false
 					_, err := client.UpdateDevicePmConfigs(ctx, pmConfigs)
 					if err != nil {
 						return err
 					}
+				} else {
+					return fmt.Errorf("Metric '%s' cannot be disabled", string(mName))
 				}
 			}
 		}
+	} else {
+		return fmt.Errorf("Device '%s' does not have Non Grouped Metrics", options.Args.Id)
 	}
 	return nil
 }
@@ -971,8 +993,15 @@
 	}
 
 	if pmConfigs.Grouped {
+		groups := make(map[string]struct{})
+		for _, group := range pmConfigs.Groups {
+			groups[group.GroupName] = struct{}{}
+		}
 		for _, group := range pmConfigs.Groups {
 			for _, gName := range options.Args.Groups {
+				if _, have := groups[string(gName)]; !have {
+					return fmt.Errorf("Group Name '%s' does not exist", gName)
+				}
 				if string(gName) == group.GroupName && !group.Enabled {
 					group.Enabled = true
 					_, err := client.UpdateDevicePmConfigs(ctx, pmConfigs)
@@ -982,6 +1011,8 @@
 				}
 			}
 		}
+	} else {
+		return fmt.Errorf("Device '%s' does not have Group Metrics", options.Args.Id)
 	}
 	return nil
 }
@@ -1007,8 +1038,17 @@
 	}
 
 	if pmConfigs.Grouped {
+		groups := make(map[string]struct{})
+		for _, group := range pmConfigs.Groups {
+			groups[group.GroupName] = struct{}{}
+		}
+
 		for _, group := range pmConfigs.Groups {
 			for _, gName := range options.Args.Groups {
+				if _, have := groups[string(gName)]; !have {
+					return fmt.Errorf("Group Name '%s' does not exist", gName)
+				}
+
 				if string(gName) == group.GroupName && group.Enabled {
 					group.Enabled = false
 					_, err := client.UpdateDevicePmConfigs(ctx, pmConfigs)
@@ -1018,6 +1058,8 @@
 				}
 			}
 		}
+	} else {
+		return fmt.Errorf("Device '%s' does not have Group Metrics", options.Args.Id)
 	}
 	return nil
 }
@@ -1048,31 +1090,30 @@
 				group.GroupFreq = pmConfigs.DefaultFreq
 			}
 		}
+		outputFormat := CharReplacer.Replace(options.Format)
+		if outputFormat == "" {
+			outputFormat = GetCommandOptionWithDefault("device-pm-configs", "format", DEFAULT_DEVICE_PM_CONFIG_GROUP_LIST_FORMAT)
+		}
 
+		orderBy := options.OrderBy
+		if orderBy == "" {
+			orderBy = GetCommandOptionWithDefault("device-pm-configs", "order", "")
+		}
+
+		result := CommandResult{
+			Format:    format.Format(outputFormat),
+			Filter:    options.Filter,
+			OrderBy:   orderBy,
+			OutputAs:  toOutputType(options.OutputAs),
+			NameLimit: options.NameLimit,
+			Data:      pmConfigs.Groups,
+		}
+
+		GenerateOutput(&result)
+	} else {
+		return fmt.Errorf("Device '%s' does not have Group Metrics", string(options.Args.Id))
 	}
-
-	outputFormat := CharReplacer.Replace(options.Format)
-	if outputFormat == "" {
-		outputFormat = GetCommandOptionWithDefault("device-pm-configs", "format", DEFAULT_DEVICE_PM_CONFIG_GROUP_LIST_FORMAT)
-	}
-
-	orderBy := options.OrderBy
-	if orderBy == "" {
-		orderBy = GetCommandOptionWithDefault("device-pm-configs", "order", "")
-	}
-
-	result := CommandResult{
-		Format:    format.Format(outputFormat),
-		Filter:    options.Filter,
-		OrderBy:   orderBy,
-		OutputAs:  toOutputType(options.OutputAs),
-		NameLimit: options.NameLimit,
-		Data:      pmConfigs.Groups,
-	}
-
-	GenerateOutput(&result)
 	return nil
-
 }
 
 func (options *DevicePmConfigGroupMetricList) Execute(args []string) error {
