| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- using System.Diagnostics;
- using System.Text;
- using NetworkTool.Client.Models;
- namespace NetworkTool.Client.Services;
- public sealed class NetworkConfigurationService
- {
- public async Task ConfigureMaintenanceNetworkAsync(AdapterInfo adapter, CancellationToken cancellationToken = default)
- {
- var escapedName = adapter.Name.Replace("'", "''");
- var command = "$adapter = Get-NetAdapter -Name '{0}' -ErrorAction Stop; " +
- "Remove-NetIPAddress -InterfaceIndex $adapter.IfIndex -AddressFamily IPv4 -Confirm:$false -ErrorAction SilentlyContinue; " +
- "Remove-NetRoute -InterfaceIndex $adapter.IfIndex -AddressFamily IPv4 -Confirm:$false -ErrorAction SilentlyContinue; " +
- "New-NetIPAddress -InterfaceIndex $adapter.IfIndex -IPAddress 169.254.100.1 -PrefixLength 16 -AddressFamily IPv4 -ErrorAction Stop";
- await RunPowerShellAsync(string.Format(command, escapedName), cancellationToken);
- }
- private static async Task RunPowerShellAsync(string command, CancellationToken cancellationToken)
- {
- var startInfo = new ProcessStartInfo
- {
- FileName = "powershell.exe",
- Arguments = $"-NoProfile -NonInteractive -ExecutionPolicy Bypass -Command \"{command}\"",
- RedirectStandardError = true,
- RedirectStandardOutput = true,
- UseShellExecute = false,
- CreateNoWindow = true,
- };
- using var process = new Process { StartInfo = startInfo };
- process.Start();
- var stdOutTask = process.StandardOutput.ReadToEndAsync(cancellationToken);
- var stdErrTask = process.StandardError.ReadToEndAsync(cancellationToken);
- await process.WaitForExitAsync(cancellationToken);
- var stdOut = await stdOutTask;
- var stdErr = await stdErrTask;
- if (process.ExitCode != 0)
- {
- var message = new StringBuilder();
- if (!string.IsNullOrWhiteSpace(stdOut))
- {
- message.AppendLine(stdOut.Trim());
- }
- if (!string.IsNullOrWhiteSpace(stdErr))
- {
- message.AppendLine(stdErr.Trim());
- }
- throw new InvalidOperationException(message.ToString().Trim());
- }
- }
- }
|