2016-01-06 3 views
0

Backgroud: Я работаю старшим администратором системы для своей компании. Я довольно новичок, когда дело доходит до Powershell и Bash, но имеет 0 опыта в разработке веб-сайтов. Я знаком с ООП в целом.Выполнение удаленных команд Powershell с веб-страницы

Требования: Пользователям необходим доступ к конкретным задачам на удаленных серверах Win, таких как запуск определенных заданий по расписанию, проверка определенных URL-адресов, переработка пулов приложений IIS и т. Д. Все легко выполняется с использованием Powershell. Вместо того, чтобы предоставлять пользователям прямой доступ к скриптам, замаскируйте все, что находится за веб-порталом. Затем, после аутентификации с использованием LDAP, пользователю предоставляется набор предварительно настроенных скриптов, которые он может запускать непосредственно с портала.

Задача: Сделайте это самостоятельно без предварительного опыта программирования.

Задача: С чего начать? Я начинаю сначала изучать C#? ASP.NET? MVC? Javascript? HTML? Я скорее потерян и буду признателен за общее руководство.

ответ

0

Я .Net Developer, как только у меня возникла задача заставить интерфейс MVC взаимодействовать с сервером Microsoft Exchange и управлять почтовыми ящиками пользователей AD, мне пришлось изучить powershell и как взаимодействовать с powershell через C#. Поэтому, основываясь на моем опыте, я посоветую вам начать изучение C# с помощью Консольное приложение, понять, как C# работает с Powershell и AD, а затем начать обучение MVC для создания пользовательского интерфейса.

Вы должны установить пакет System.management.Automation из диспетчера пакетов NuGet.

C# => Powershell (Execute Powershell Command) => Microsoft Exchange.

Простой пример, получение атрибута PrimarySmtpAddress пользователя.

using System.Management.Automation; 
using System.Management.Automation.Runspaces; 

private static WSManConnectionInfo _connectionInfo; 

static void Main(string[] args) 
{ 
    string userName = "DOMAIN\\User"; 
    string password = "UserPassowrd"; 
    PSCredential psCredential = new PSCredential(userName, GenerateSecureString(password)); 

    _connectionInfo = new WSManConnectionInfo(
      new Uri("http://server.domain.local/PowerShell"), 
      "http://schemas.microsoft.com/powershell/Microsoft.Exchange", psCredential); 
    _connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Kerberos; 

    Console.WriteLine(GetPrimarySmtpAddressBy("Firstname Lastname"); 
} 

public static string GetPrimarySmtpAddressBy(string identity) 
    { 
     using (Runspace runspace = RunspaceFactory.CreateRunspace(_connectionInfo)) 
     { 

      using (PowerShell powerShell = PowerShell.Create()) 
      { 
       powerShell.AddCommand("Get-Mailbox"); 
       powerShell.AddParameter("Identity", identity); 
       runspace.Open(); 

       powerShell.Runspace = runspace; 

       PSObject psObject = powerShell.Invoke().FirstOrDefault(); 

       if (psObject != null && psObject.Properties["PrimarySmtpAddress"] != null) 
        return psObject.Properties["PrimarySmtpAddress"].Value.ToString(); 
       else return ""; 
      } 
     } 
    } 

public static System.Security.SecureString GenerateSecureString(string input) 
    { 
     System.Security.SecureString securePassword = new System.Security.SecureString(); 
     foreach (char c in input) 
      securePassword.AppendChar(c); 
     securePassword.MakeReadOnly(); 

     return securePassword; 
    } 
+0

Цените проницательность, спасибо! – JustAGuy

1

Посмотрите на Powershell Web Access. Возможно, это подход, чтобы избежать изучения всех тех технологий, о которых вы говорите.

+0

Боится не. Нет графического интерфейса. Просто CLI ... – JustAGuy