Add support for script parameters

This commit is contained in:
Stone_Red
2023-03-18 23:50:02 +01:00
parent e23ae0a47a
commit cee54c9364
+36 -12
View File
@@ -1,4 +1,6 @@
using System; using Microsoft.VisualBasic.FileIO;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Diagnostics; using System.Diagnostics;
@@ -125,23 +127,45 @@ public partial class MainWindow : Window
return; return;
} }
clipboardText = clipboardText[prefixTextBox.Text.Length..^suffixTextBox.Text.Length].Trim(); clipboardText = clipboardText[prefixTextBox.Text.Length..^suffixTextBox.Text.Length].Trim().Replace("\"\"", "\0");
if (!commands.TryGetValue(clipboardText, out string? script)) TextFieldParser parser = new TextFieldParser(new StringReader(clipboardText))
{
HasFieldsEnclosedInQuotes = true
};
parser.SetDelimiters(" ");
string[] sections = parser.ReadFields() ?? Array.Empty<string>();
sections = sections.Select(s => s.Replace('\0', '\"')).ToArray();
if (sections.Length == 0)
{
return;
}
string command = sections[0].Trim();
if (!commands.TryGetValue(command, out string? script))
{ {
oldData = Clipboard.GetDataObject(); oldData = Clipboard.GetDataObject();
return; return;
} }
PowerShell ps = PowerShell.Create().AddScript(script); PowerShell ps = PowerShell
.Create()
.AddScript(script)
.AddParameters(sections.Skip(1).ToList());
StringBuilder outText = new StringBuilder(); StringBuilder outText = new StringBuilder();
foreach (PSObject commandResult in ps.Invoke()) foreach (PSObject commandResult in ps.Invoke())
{ {
_ = outText.AppendLine(commandResult.ToString()); _ = outText.AppendLine(commandResult?.ToString() ?? string.Empty);
} }
logListBox.Items.Insert(0, $"{clipboardText} > {outText.ToString().TrimEnd()}"); logListBox.Items.Insert(0, $"{command} > {outText.ToString().TrimEnd()}");
Clipboard.SetText(outText.ToString().TrimEnd()); Clipboard.SetText(outText.ToString().TrimEnd());
@@ -183,7 +207,7 @@ public partial class MainWindow : Window
{ {
foreach (ParseError error in errors) foreach (ParseError error in errors)
{ {
AddError($"[{commandNames}]\n{error}"); AddError(commandNames, error.ToString());
} }
} }
@@ -191,11 +215,11 @@ public partial class MainWindow : Window
{ {
if (string.IsNullOrWhiteSpace(commandName)) if (string.IsNullOrWhiteSpace(commandName))
{ {
AddError($"[{commandNames}]\nCommand \"{commandName}\" is empty!"); AddError(commandNames, "Command \"{commandName}\" is empty!");
} }
else if (!commands.TryAdd(commandName.Trim(), script.ToString())) else if (!commands.TryAdd(commandName.Trim(), script.ToString()))
{ {
AddError($"[{commandNames}]\nCommand \"{commandName}\" already exists!"); AddError(commandNames, "Command \"{commandName}\" already exists!");
} }
} }
} }
@@ -212,7 +236,7 @@ public partial class MainWindow : Window
} }
else else
{ {
AddError($"[{commandNames}]\nInput has to start with [<Command Name>]!"); AddError(commandNames, "Input has to start with [<Command Name>]!");
return; return;
} }
} }
@@ -222,12 +246,12 @@ public partial class MainWindow : Window
File.WriteAllText(cmdPath, commandsTextBox.Text); File.WriteAllText(cmdPath, commandsTextBox.Text);
} }
private void AddError(string error) private void AddError(string commandNames, string error)
{ {
errorPanel.Visibility = Visibility.Visible; errorPanel.Visibility = Visibility.Visible;
logPanel.Visibility = Visibility.Collapsed; logPanel.Visibility = Visibility.Collapsed;
commandsTextBox.Foreground = System.Windows.Media.Brushes.Red; commandsTextBox.Foreground = System.Windows.Media.Brushes.Red;
_ = errorListBox.Items.Add(error); _ = errorListBox.Items.Add($"[{commandNames}]\n{error}");
} }
private void FixTextBox_TextChanged(object sender, System.Windows.Input.KeyEventArgs e) private void FixTextBox_TextChanged(object sender, System.Windows.Input.KeyEventArgs e)