|
19 | 19 | using System.IO;
|
20 | 20 | using System.Linq;
|
21 | 21 | using System.Management.Automation;
|
| 22 | +using System.Reflection; |
22 | 23 | using NetCorePsd1Sync.Model;
|
23 | 24 | using NetCorePsd1Sync.Utility;
|
24 | 25 | using static NetCorePsd1Sync.Model.PsDefinitionConstants;
|
@@ -87,18 +88,18 @@ public static Hashtable GetHashtable(PowerShell powershell, string path)
|
87 | 88 | return hashtable;
|
88 | 89 | }
|
89 | 90 |
|
90 |
| - public static IEnumerable<Hashtable> GetDesktopHashtables(IEnumerable<string> desktopFilePaths) |
| 91 | + public static IEnumerable<Hashtable> GetHashtables(IEnumerable<string> filePaths) |
91 | 92 | {
|
92 | 93 | using (var powershell = PowerShell.Create())
|
93 | 94 | {
|
94 |
| - foreach (var path in desktopFilePaths) |
| 95 | + foreach (var path in filePaths) |
95 | 96 | {
|
96 | 97 | yield return GetHashtable(powershell, path);
|
97 | 98 | }
|
98 | 99 | }
|
99 | 100 | }
|
100 | 101 |
|
101 |
| - public static PsDefinition CreateNetCoreDefinition(Hashtable desktopData) |
| 102 | + public static PsDefinition CreateNewNetCoreDefinition(Hashtable desktopData) |
102 | 103 | {
|
103 | 104 | var psData = new PsData();
|
104 | 105 | var desktopPsData = desktopData.GetValueAsHashtable("PrivateData").GetValueAsHashtable("PSData");
|
@@ -138,5 +139,79 @@ public static PsDefinition CreateNetCoreDefinition(Hashtable desktopData)
|
138 | 139 | PrivateData = new PrivateData { PsData = psData }
|
139 | 140 | };
|
140 | 141 | }
|
| 142 | + |
| 143 | + private static ModuleReference CreateModuleReferenceFromHashtable(Hashtable data) |
| 144 | + { |
| 145 | + var guid = data.GetValueAsStringOrDefault("GUID"); |
| 146 | + return new ModuleReference |
| 147 | + { |
| 148 | + ModuleName = data.GetValueAsStringOrDefault("ModuleName"), |
| 149 | + ModuleVersion = data.GetValueAsVersionOrDefault("ModuleVersion"), |
| 150 | + Guid = String.IsNullOrEmpty(guid) ? (Guid?)null : Guid.Parse(guid) |
| 151 | + }; |
| 152 | + } |
| 153 | + |
| 154 | + private static List<ModuleReference> CreateModuleReferenceList(Hashtable data, string key) => |
| 155 | + data.GetValueAsArrayOrDefault(key)?.OfType<Hashtable>().Select(CreateModuleReferenceFromHashtable).ToList(); |
| 156 | + |
| 157 | + public static PsDefinition CreateDefinitionFromExisting(Hashtable existingDefinition, PsDefinitionHeader existingHeader) |
| 158 | + { |
| 159 | + var psData = new PsData(); |
| 160 | + var existingPsData = existingDefinition.GetValueAsHashtable("PrivateData").GetValueAsHashtable("PSData"); |
| 161 | + if (existingPsData.Any()) |
| 162 | + { |
| 163 | + var licenseUri = existingPsData.GetValueAsStringOrDefault("LicenseUri"); |
| 164 | + var projectUri = existingPsData.GetValueAsStringOrDefault("ProjectUri"); |
| 165 | + var iconUri = existingPsData.GetValueAsStringOrDefault("IconUri"); |
| 166 | + var requireLicenseAcceptance = existingPsData.GetValueAsStringOrDefault("RequireLicenseAcceptance"); |
| 167 | + psData = new PsData |
| 168 | + { |
| 169 | + Tags = existingPsData.GetValueAsStringListOrDefault("Tags"), |
| 170 | + LicenseUri = String.IsNullOrEmpty(licenseUri) ? null : new Uri(licenseUri), |
| 171 | + ProjectUri = String.IsNullOrEmpty(projectUri) ? null : new Uri(projectUri), |
| 172 | + IconUri = String.IsNullOrEmpty(iconUri) ? null : new Uri(iconUri), |
| 173 | + ReleaseNotes = existingPsData.GetValueAsStringOrDefault("ReleaseNotes"), |
| 174 | + Prerelease = existingPsData.GetValueAsStringOrDefault("Prerelease"), |
| 175 | + RequireLicenseAcceptance = String.IsNullOrEmpty(requireLicenseAcceptance) ? (bool?)null : Boolean.Parse(requireLicenseAcceptance), |
| 176 | + ExternalModuleDependencies = CreateModuleReferenceList(existingPsData, "ExternalModuleDependencies") |
| 177 | + }; |
| 178 | + } |
| 179 | + |
| 180 | + var processorArchitecture = existingDefinition.GetValueAsStringOrDefault("ProcessorArchitecture"); |
| 181 | + return new PsDefinition |
| 182 | + { |
| 183 | + ManifestHeader = existingHeader, |
| 184 | + RootModule = existingDefinition.GetValueAsStringOrDefault("RootModule"), |
| 185 | + ModuleVersion = existingDefinition.GetValueAsVersionOrDefault("ModuleVersion"), |
| 186 | + CompatiblePsEditions = existingDefinition.GetValueAsStringListOrDefault("CompatiblePSEditions"), |
| 187 | + Guid = Guid.Parse(existingDefinition.GetValueAsStringOrDefault("GUID")), |
| 188 | + Author = existingDefinition.GetValueAsStringOrDefault("Author"), |
| 189 | + CompanyName = existingDefinition.GetValueAsStringOrDefault("CompanyName"), |
| 190 | + Copyright = existingDefinition.GetValueAsStringOrDefault("Copyright"), |
| 191 | + Description = existingDefinition.GetValueAsStringOrDefault("Description"), |
| 192 | + PowerShellVersion = existingDefinition.GetValueAsVersionOrDefault("PowerShellVersion"), |
| 193 | + PowerShellHostName = existingDefinition.GetValueAsStringOrDefault("PowerShellHostName"), |
| 194 | + PowerShellHostVersion = existingDefinition.GetValueAsVersionOrDefault("PowerShellHostVersion"), |
| 195 | + DotNetFrameworkVersion = existingDefinition.GetValueAsVersionOrDefault("DotNetFrameworkVersion"), |
| 196 | + ClrVersion = existingDefinition.GetValueAsVersionOrDefault("CLRVersion"), |
| 197 | + ProcessorArchitecture = processorArchitecture != null ? Enum.Parse<ProcessorArchitecture>(processorArchitecture) : (ProcessorArchitecture?)null, |
| 198 | + RequiredModules = CreateModuleReferenceList(existingDefinition, "RequiredModules"), |
| 199 | + RequiredAssemblies = existingDefinition.GetValueAsStringListOrDefault("RequiredAssemblies"), |
| 200 | + ScriptsToProcess = existingDefinition.GetValueAsStringListOrDefault("ScriptsToProcess"), |
| 201 | + TypesToProcess = existingDefinition.GetValueAsStringListOrDefault("TypesToProcess"), |
| 202 | + FormatsToProcess = existingDefinition.GetValueAsStringListOrDefault("FormatsToProcess"), |
| 203 | + NestedModules = existingDefinition.GetValueAsStringListOrDefault("NestedModules")?.Select(m => new ModuleReference { ModuleName = m }).ToList(), |
| 204 | + FunctionsToExport = existingDefinition.GetValueAsStringListOrDefault("FunctionsToExport"), |
| 205 | + CmdletsToExport = existingDefinition.GetValueAsStringListOrDefault("CmdletsToExport"), |
| 206 | + VariablesToExport = existingDefinition.GetValueAsStringListOrDefault("VariablesToExport"), |
| 207 | + AliasesToExport = existingDefinition.GetValueAsStringListOrDefault("AliasesToExport"), |
| 208 | + DscResourcesToExport = existingDefinition.GetValueAsStringListOrDefault("DscResourcesToExport"), |
| 209 | + ModuleList = CreateModuleReferenceList(existingDefinition, "ModuleList"), |
| 210 | + FileList = existingDefinition.GetValueAsStringListOrDefault("FileList"), |
| 211 | + PrivateData = new PrivateData { PsData = psData }, |
| 212 | + HelpInfoUri = existingDefinition.GetValueAsStringOrDefault("HelpInfoURI"), |
| 213 | + DefaultCommandPrefix = existingDefinition.GetValueAsStringOrDefault("DefaultCommandPrefix") |
| 214 | + }; |
| 215 | + } |
141 | 216 | }
|
142 | 217 | }
|
0 commit comments