Выполнить несколько команд / установить пароль сервера - PullRequest
0 голосов
/ 29 июня 2018

Извините, что не так ясно. Вот объяснение.

Существует команда «admin setserver systempw», которая используется для установки пароля. При нажатии «Ввод» после ввода этой команды в cmd, появится запрос на ввод данных пользователем. Мы должны ввести строку и нажать «Enter», чтобы установить эту строку в качестве пароля для сервера, указанного в команде. Теперь я должен автоматизировать это выполнение с помощью кода C #. На экране должно быть 2 поля ввода и кнопка. Входными данными являются имя сервера и пароль. При нажатии на эту кнопку, он должен выполнить команду, указанную сверху, связывая имя сервера и пароль, введенные в качестве входных данных для команды. Используя учебники, я мог бы создать процесс, который будет запускать первую команду. Но я не могу связать пароль. Как я могу связать этот пароль с приглашением, о котором я упоминал?


C: /> admin setserver systempw, нажав «Enter»
Пожалуйста, введите пароль: Sai @ 45678 «Нажав Enter»

Пароль был успешно установлен.

Это фрагмент кода, который я пытаюсь написать.

            string servername = TextBox1.Text;

            ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c admin setserver systempw  " + servername );
            procStartInfo.RedirectStandardOutput = true;
            procStartInfo.UseShellExecute = false;

            procStartInfo.CreateNoWindow = true;

            procStartInfo.WorkingDirectory = @"C:/";

            Process proc = new Process();
            proc.StartInfo = procStartInfo;
            proc.Start();

            string result = proc.StandardOutput.ReadToEnd();

            MessageBox.Show("Done! " + result);

Как связать значение второго текстового поля (пароль) с процессом в качестве аргумента. Как можно связать пароль с подсказкой «Пожалуйста, введите пароль:».

Пожалуйста, объясните.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

После долгих размышлений, я думаю, что вы спрашиваете: "Как программа в стиле DOS может получить пользовательский ввод?"

Вот два метода, один из приглашения, а другой из всплывающего окна.

Sub Main()
    Dim whut As String

    Console.WriteLine("I demand input!:")
    whut = Console.ReadLine() 'from dos prompt

    whut = InputBox("Say whut?") 'from popup window

    Console.WriteLine(whut)
End Sub

Надеюсь, из наших догадок, что вы хотите, вы можете собрать что-нибудь вместе.

0 голосов
/ 29 июня 2018

После тщательного обновления вашего поста, я полагаю, что вы можете найти одну из двух вещей здесь:

  • Как выполнять различные команды на основе пользовательского ввода?
  • Как изменить пароль пользователя на сервере.

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

Удивительный переключатель

Чтобы выполнить несколько команд в вашем консольном приложении, посмотрите на структуру переключателя , доступную в C #. Это позволит вам выполнять разные биты кода на основе определенных критериев, таких как пользовательский ввод. Например:

using System;
using static System.Console;

private static bool exit = false;
private static string serverName = string.Empty;
static void Main(string[] args) {
        WriteLine("Please enter a command.");
        string response = ReadLine();

        switch (response) {
            case "setserver": SetServer(); break;
            case "changepass": ChangePassword(); break;
        }
    }
    ReadKey();
}
static void SetServer() {
    WriteLine("Please enter a server name.");
    serverName = ReadLine(); // You should probably validate the user input here.
}
static void ChangePassword() {
    // Execute your needed password change code here.
}

Это поможет вам выполнить несколько команд в консольном приложении.

Изменение пароля (Active Directory)

Для изменений в Active Directory вы должны взглянуть на этот пост и эту документацию для получения дополнительной информации. Код, который он использует (в случае, если ссылка когда-либо умирает по какой-либо причине):

// Connect to Active Directory and get the DirectoryEntry object.
// Note, ADPath is an Active Directory path pointing to a user. You would have created this
// path by calling a GetUser() function, which searches AD for the specified user
// and returns its DirectoryEntry object or path. See http://www.primaryobjects.com/CMS/Article61.aspx
DirectoryEntry oDE;
oDE = new DirectoryEntry(ADPath, ADUser, ADPassword, AuthenticationTypes.Secure);

try {
   // Change the password.
   oDE.Invoke("ChangePassword", new object[]{strOldPassword, strNewPassword});
} 
catch (Exception e) {
   Debug.WriteLine($"Error changing password. Reason: {e.Message}");
}

Изменение пароля (SQL Server)

Для изменений в SQL Server я бы порекомендовал вам посмотреть этот пост (где есть два достойных ответа на решение этой проблемы) и эту документацию об изменении пароля на SqlConnection уровень объекта.

SqlConnection.ChangePassword(string, string);

Изменяет пароль SQL Server для пользователя, указанного в строке подключения, на предоставленный новый пароль.

Ответы, предоставленные на другой пост, будут объединять этот код:

string sqlquery = "SELECT Password FROM [Member] where Username=@username";
SqlCommand cmd = new SqlCommand(sqlquery, connect);
cmd.Parameters.AddWithValue("@username", label_username.Text);
cmd.Connection = connect; 
string currentPassword = (string)cmd.ExecuteScalar();

if (currentPassword == textBox_Current.Text) {
    // PASSWORD IS CORRECT, CHANGE IT, NOW.
} else {
    // WOW EASY BUDDY, NOT SO FAST
}

С этим советом:

  • рассмотрите вашу строку username -> Hash it -> напишите запрос, чтобы проверить, совпадает ли это хеш-значение и хеш-значение пароля пользователя, хранящееся в базе данных
  • рассмотреть строку пароля и строку newPassword -> проверить, является ли каждый из них нулевым или длина равна 0
  • учитывать строковый пароль и строку newPassword в вашем коде -> Hash both -> проверить, совпадают ли значения хеша

Важное примечание

Независимо от того, какую проблему вы пытаетесь решить, при работе с паролями вы должны тщательно продумывать хеширование и шифрование, которые сопровождают пароли. Если вы собираетесь изменить пароль на сервере, вы должны также проверить старый пароль перед внесением изменений. Вам также следует проверить новый пароль, проверив наличие недопустимых символов, убедившись, что надежность пароля достаточна, проверив, что начальная запись нового пароля совпадает с записью подтверждения, в числе нескольких других вещей, таких как хеширование и шифрование, которые могут окружать пароль. вам нужно проверить против.

Тщательная проводка

Если вам нужен более подробный ответ на более конкретную проблему, такую ​​как фактическое изменение пароля на сервере, к которому у вас есть разрешения, обновите свой вопрос и будьте более внимательны, следуя советам mjwills и посещая Minimal, Полный и проверяемый пример . Это позволит другим читателям не только помочь вам лучше, но и поможет будущим читателям с аналогичными проблемами. Как только вы обновите свой вопрос, чтобы отразить действительно желаемый результат, я обновлю свой ответ (если у меня есть ответ), чтобы продемонстрировать знания, которые вы ищете.

...