LANCommander/LANCommander/Components/RegToPowerShell.razor
2023-10-18 18:11:42 -05:00

86 lines
2.7 KiB
Text

@inject IMessageService MessageService
<Modal Visible="Visible" OkText="@("Insert")" OnOk="Parse" OnCancel="Close" Width="800" Title="Paste Export File Contents">
<StandaloneCodeEditor @ref="Editor" ConstructionOptions="EditorConstructionOptions" />
</Modal>
@code {
[Parameter] public EventCallback<string> 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<string>();
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:
lines.Add($"New-ItemProperty -Path \"registry::\\{key.Path}\" -Name \"{key.Property}\" -Value \"{(string)key.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", 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[]]({convertedBytes}) -Force");
break;
}
}
if (OnParsed.HasDelegate)
await OnParsed.InvokeAsync(String.Join('\n', lines));
Close();
StateHasChanged();
}
catch (Exception ex)
{
MessageService.Error(ex.Message);
}
}
public void Open()
{
Visible = true;
}
public void Close()
{
Visible = false;
}
}