Код: Выделить всё
public class MyRequest
{
public string Script { get; set; } // PowerShell script content
public string Policy { get; set; } // e.g. "Bypass", "RemoteSigned"
public string Scope { get; set; } // e.g. "Process", "CurrentUser"
public bool RunAsAdmin { get; set; } // true = elevated
public int TimeoutInSeconds { get; set; } // timeout duration
}
public class PowerShellResult
{
public int ExitCode { get; set; }
public string Output { get; set; }
public string Error { get; set; }
}
Теперь моя проблема в том, что мне нужно запустить скрипт от имени администратора, если он установлен в запросе.
Я пробовал все, даже ChatGPT в конце.
Когда я устанавливаю запуск без прав администратора, он запускается, но когда я настроен как администратор, консоль пуста.
Это мой пример кода.
Код: Выделить всё
using CliWrap;
using CliWrap.Buffered;
using System.Text;
var runner = new PowerShellRunner();
var result = await runner.RunAsync(new MyRequest
{
Script = "Write-Output 'Hello from PowerShell'",
Policy = "Restricted",
Scope = "Process",
RunAsAdmin = true,
TimeoutInSeconds = 30
});
Console.WriteLine($"PowerShell script execution completed with code: {result.ExitCode}.");
Console.WriteLine($"Errors: {result.Error}.");
Console.WriteLine($"Output: {result.Output}.");
Console.ReadKey();
public class MyRequest
{
public string Script { get; set; } // PowerShell script content
public string Policy { get; set; } // e.g. "Bypass", "RemoteSigned"
public string Scope { get; set; } // e.g. "Process", "CurrentUser"
public bool RunAsAdmin { get; set; } // true = elevated
public int TimeoutInSeconds { get; set; } // timeout duration
}
public class PowerShellResult
{
public int ExitCode { get; set; }
public string Output { get; set; }
public string Error { get; set; }
}
public class PowerShellRunner
{
public async Task
RunAsync(MyRequest request)
{
var errors = new StringBuilder();
var output = new StringBuilder();
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(request.TimeoutInSeconds));
try
{
if (request.RunAsAdmin)
{
// Launch elevated PowerShell
string elevateArgs =
$"-NoProfile -ExecutionPolicy {request.Policy} '{request.Script}'";
string elevateCommand =
$"Start-Process powershell -Verb RunAs -ArgumentList \"{elevateArgs}\"";
Console.WriteLine($"Command: {elevateCommand}");
var result = await Cli.Wrap("powershell")
.WithArguments(a => a.Add("-NoProfile").Add("-Command").Add(elevateCommand))
.WithValidation(CommandResultValidation.None)
.WithStandardOutputPipe(PipeTarget.ToStringBuilder(output))
.WithStandardErrorPipe(PipeTarget.ToStringBuilder(errors))
.ExecuteBufferedAsync(cts.Token);
return new PowerShellResult
{
ExitCode = result.ExitCode,
Output = output.ToString(),
Error = errors.ToString()
};
}
else
{
// Normal PowerShell run
var result = await Cli.Wrap("powershell")
.WithArguments(a => a
.Add("-NoProfile")
.Add("-ExecutionPolicy").Add(request.Policy)
.Add(request.Script))
.WithValidation(CommandResultValidation.None)
.WithStandardOutputPipe(PipeTarget.ToStringBuilder(output))
.WithStandardErrorPipe(PipeTarget.ToStringBuilder(errors))
.ExecuteBufferedAsync(cts.Token);
return new PowerShellResult
{
ExitCode = result.ExitCode,
Output = output.ToString(),
Error = errors.ToString()
};
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... -and-scope
Мобильная версия