Как выполнить IISReset на нескольких удаленных серверах, используя. NET Core? - PullRequest
0 голосов
/ 06 февраля 2020

Я создаю веб-сайт, и в нем я даю ссылку, где пользователь вводит свое / ее Azure имя пользователя и пароль виртуальной машины, а затем я собираюсь go вперед и перезагружаю IIS-сервер компьютера.

Итак, я пишу. NET код для реализации того же, но пока не повезло. Я не могу перезапустить сервер IIS для удаленных машин, я даже искал альтернативный подход для достижения того же с помощью Powershell, но не смог этого сделать.

Я попытался удаленно перезапустить сервер IIS с помощью WMI а также создал код для вызова Powershell в. Net Core, но я не могу добиться того же.

Может кто-нибудь помочь мне с тем, как перезапустить сервер IIS, используя код C# или. NET Код ядра?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020
  1. Я попробовал приведенные ниже коды для удаленного перезапуска IIS, но он не работал.

Метод 1:

using System.Diagnostics;
using System.Management;
using System.IO;
using System.Security;


Process myProcess = new Process();

ProcessStartInfo remoteAdmin =
            new ProcessStartInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "iisreset.exe"));
            remoteAdmin.Arguments = "/restart";

myProcess.StartInfo.Verb = "runas";

var s = new SecureString();
//s.AppendChar('g');

 Console.WriteLine("Enter username:");          
 string userName = Console.ReadLine();

 Console.WriteLine(Environment.NewLine);

 Console.WriteLine("Enter password:");
 string password = Console.ReadLine();

Console.WriteLine(Environment.NewLine);

var securePasswordString = new SecureString();
// Use ToCharArray to convert string to array.
char[] array = password.ToCharArray();

// Loop through array.
for (int i = 0; i < array.Length; i++)
{
    // Get character from the array.
    securePasswordString.AppendChar(array[i]);            
}

remoteAdmin.UserName = userName;
remoteAdmin.Password = securePasswordString;
remoteAdmin.Domain = "localhost";
myProcess.StartInfo = remoteAdmin;
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.RedirectStandardOutput = true;

myProcess.Start(); //---ERROR HERE

if (!myProcess.Start())
{
    // That didn't work
    Console.WriteLine(Environment.NewLine);
    Console.WriteLine("Process did not start!!!");
}

myProcess.WaitForExit();

var processExitCode = myProcess.ExitCode;

if (processExitCode == 0)
{
   Console.WriteLine("The operation completed successfully.");
}

if (processExitCode != 0)
{
   // That didn't work
   if (processExitCode == 5)
      {
         Console.WriteLine(Environment.NewLine);
         Console.WriteLine("Access Denied");
      }

}

Console.ReadKey();

Метод 2:

ConnectionOptions conn = new ConnectionOptions();
conn.Impersonation = ImpersonationLevel.Impersonate;         
conn.Username = @"Username";
conn.Password = "";

//ManagementScope theScope = new ManagementScope("\\\\" + txtServerName.Text + "\\root\\cimv2", conn);

theScope.Connect();  //---ERROR HERE
Я попробовал приведенный ниже код для запуска сценария powershell из кода C#, но мне нужен сценарий, который принимает учетные данные администратора удаленного сервера и перезапускает IIS.
using System.Collections.ObjectModel;
using System.Management.Automation;
using System.Management.Automation.Runspaces;

static void RunPsScriptMethod2()
{
    StringBuilder sb = new StringBuilder();

    PowerShell psExec = PowerShell.Create();
    psExec.AddCommand(@"C:\Users\d92495j\Desktop\test.ps1");
    psExec.AddArgument(DateTime.Now);

    Collection<PSObject> results;
    Collection<ErrorRecord> errors;
    results = psExec.Invoke();
    errors = psExec.Streams.Error.ReadAll();

    if (errors.Count > 0)
    {
        foreach (ErrorRecord error in errors)
        {
            sb.AppendLine(error.ToString());
        }
    }
    else
    {
        foreach (PSObject result in results)
        {
            sb.AppendLine(result.ToString());
        }
    }

    Console.WriteLine(sb.ToString());
}
0 голосов
/ 07 февраля 2020

Что касается этого ...

Поделитесь ссылкой, в которой есть сценарий PowerShell, который перезапускает IIS на удаленном сервере с использованием системных учетных данных.

. .. быстрый поиск с использованием «Перезапустить IIS на удаленной машине»

... даст список статей в топи c, некоторые из которых прямо здесь, на StackOverflow, так как это не первый раз, когда об этом спрашивают. Таким образом, ваш вопрос можно считать потенциальной копией нижеследующего.

Пример (ы):

about_Remote - PowerShell | Документы Microsoft

Перезапустите IIS на удаленной машине

Некоторые ответы, не использующие PowerShell для этого из приведенного выше:

# Simplest will be 
iisreset <servername>
# Run command prompt as admin and execute the command.
# Example : If server name is SRVAPP then command will be iisreset SRVAPP

# You could use sc

sc \\RemoteServer stop iisadmin
sc \\RemoteServer start w3svc
# or SysInternals' psexec. The PsTools suite is useful for these scenarios.

psexec \\RemoteServer iisreset

PowerShell Remoting требует, чтобы вы были в локальной группе администраторов на целевом хосте. Вы не можете запускать код PowerShell как SYSTEM, если не выполняете запланированное задание, даже если это запланированное задание, выполняемое с теми учетными данными, для которых оно было установлено, и запускающее любой сценарий в этой задаче. Чтобы запустить код PowerShell от имени другого пользователя, необходимо знать имя пользователя и пароль.

Вы можете использовать PowerShell для настройки запуска запланированной задачи. Просто поищите для «Назначенная задача PowerShell» для получения подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...