@inject IMessageService MessageService @inject ILogger Logger @code { [Parameter] public EventCallback OnParsed { get; set; } bool Visible = false; string Contents = ""; StandaloneCodeEditor? Editor; private StandaloneEditorConstructionOptions EditorConstructionOptions(StandaloneCodeEditor editor) { return new StandaloneEditorConstructionOptions { AutomaticLayout = true, Language = "ini", Value = Contents, Theme = "vs-dark", }; } private async Task Parse() { Contents = await Editor.GetValue(); var parser = new RegParserDotNet.RegParser(); var lines = new List(); try { var keys = parser.Parse(Contents); foreach (var key in keys) { switch (key.Type) { case RegParserDotNet.RegistryValueType.REG_KEY: if (lines.Count > 0) lines.Add(""); lines.Add($"New-Item -Path \"registry::\\{key.Path}\""); break; case RegParserDotNet.RegistryValueType.REG_SZ: var value = (string)key.Value; value = value.Replace("\"", @""""""); lines.Add($"New-ItemProperty -Path \"registry::\\{key.Path}\" -Name \"{key.Property}\" -Value \"{value}\" -Force"); break; case RegParserDotNet.RegistryValueType.REG_DWORD: lines.Add($"New-ItemProperty -Path \"registry::\\{key.Path}\" -Name \"{key.Property}\" -Value {(int)key.Value} -Force"); break; case RegParserDotNet.RegistryValueType.REG_BINARY: var bytes = key.Value as byte[]; var convertedBytes = String.Join("\n\t", bytes.Chunk(32).Select(c => String.Join(", ", c.Select(b => "0x" + b.ToString("X2"))))); lines.Add($"New-ItemProperty -Path \"registry::\\{key.Path}\" -Name \"{key.Property}\" -PropertyType Binary -Value ([byte[]]@(\n\t{convertedBytes}\n)) -Force"); break; } } if (OnParsed.HasDelegate) await OnParsed.InvokeAsync(String.Join('\n', lines)); Close(); StateHasChanged(); } catch (Exception ex) { MessageService.Error(ex.Message); Logger.LogError(ex, ex.Message); } } public void Open() { Visible = true; } public void Close() { Visible = false; } }