/// <summary> /// Initialize moduleSpecification from hashtable. Return exception object, if hashtable cannot be converted. /// Return null, in the success case. /// </summary> /// <param name="moduleSpecification">Object to initialize.</param> /// <param name="hashtable">Contains info about object to initialize.</param> /// <returns></returns> internal static Exception ModuleSpecificationInitHelper(ModuleSpecification moduleSpecification, Hashtable hashtable) { StringBuilder badKeys = new StringBuilder(); try { foreach (DictionaryEntry entry in hashtable) { string field = entry.Key.ToString(); if (field.Equals("ModuleName", StringComparison.OrdinalIgnoreCase)) { moduleSpecification.Name = LanguagePrimitives.ConvertTo <string>(entry.Value); } else if (field.Equals("ModuleVersion", StringComparison.OrdinalIgnoreCase)) { moduleSpecification.Version = LanguagePrimitives.ConvertTo <Version>(entry.Value); } else if (field.Equals("RequiredVersion", StringComparison.OrdinalIgnoreCase)) { moduleSpecification.RequiredVersion = LanguagePrimitives.ConvertTo <Version>(entry.Value); } else if (field.Equals("MaximumVersion", StringComparison.OrdinalIgnoreCase)) { moduleSpecification.MaximumVersion = LanguagePrimitives.ConvertTo <string>(entry.Value); ModuleCmdletBase.GetMaximumVersion(moduleSpecification.MaximumVersion); } else if (field.Equals("GUID", StringComparison.OrdinalIgnoreCase)) { moduleSpecification.Guid = LanguagePrimitives.ConvertTo <Guid?>(entry.Value); } else { if (badKeys.Length > 0) { badKeys.Append(", "); } badKeys.Append("'"); badKeys.Append(entry.Key.ToString()); badKeys.Append("'"); } } } // catch all exceptions here, we are going to report them via return value. // Example of catched exception: one of conversions to Version failed. catch (Exception e) { return(e); } string message; if (badKeys.Length != 0) { message = StringUtil.Format(Modules.InvalidModuleSpecificationMember, "ModuleName, ModuleVersion, RequiredVersion, GUID", badKeys); return(new ArgumentException(message)); } if (string.IsNullOrEmpty(moduleSpecification.Name)) { message = StringUtil.Format(Modules.RequiredModuleMissingModuleName); return(new MissingMemberException(message)); } if (moduleSpecification.RequiredVersion == null && moduleSpecification.Version == null && moduleSpecification.MaximumVersion == null) { message = StringUtil.Format(Modules.RequiredModuleMissingModuleVersion); return(new MissingMemberException(message)); } if (moduleSpecification.RequiredVersion != null && moduleSpecification.Version != null) { message = StringUtil.Format(SessionStateStrings.GetContent_TailAndHeadCannotCoexist, "ModuleVersion", "RequiredVersion"); return(new ArgumentException(message)); } if (moduleSpecification.RequiredVersion != null && moduleSpecification.MaximumVersion != null) { message = StringUtil.Format(SessionStateStrings.GetContent_TailAndHeadCannotCoexist, "MaximumVersion", "RequiredVersion"); return(new ArgumentException(message)); } return(null); }