PowerShellRunner - это библиотека для типизированной работы с PowerShell.
Пример типизированного описания командлета в коде:
public class ConvertToSecureStringCmdlet : IPowerShellCmdlet<SecureString> { public string CmdletName => "ConvertTo-SecureString"; public IPowerShellCmdletParameter<string> String { get; } public IPowerShellCmdletParameter<SwitchParameter> AsPlainText { get; } public IPowerShellCmdletParameter<SwitchParameter> Force { get; } }
Пример формирования комнады:
ConvertToSecureStringCmdlet cmdlet = new ConvertToSecureStringCmdlet() .Set(c => c.String, "Value") .Set(c => c.AsPlainText, true) .Set(c => c.Force, false); PowerShellQuery query = cmdlet.BuildFromCmdlet(); // query.Query: ConvertTo-SecureString -String "Value" -AsPlainText
Пример выполнения комнады с сохранением в переменную:
PowerShellVariable<SecureString> result = powerShellAccessor .SelectCmdlet(cmdlet) .ExecuteAndSetTo("$converted_string");
При выполнении командлета автоматически резолвится тип результата / тип переменной в которую будет записан результат. В дальнейшем переменную можно передавать в другие командлеты:
public class SomeOtherCmdlet : IPowerShellCmdlet<string> { public string CmdletName => "Some-Other"; public IPowerShellCmdletParameter<SecureString> String { get; } } PowerShellVariable<SecureString> convertedString = powerShellAccessor .SelectCmdlet(cmdlet) .ExecuteAndSetTo("$converted_string"); SomeOtherCmdlet otherCmdlet = new SomeOtherCmdlet() .Set(c => c.String, convertedString); IReadOnlyCollection<string> result = powerShellAccessor .SelectCmdlet(otherCmdlet) .Execute();