运行多个命令/设置服务器密码

时间:2018-06-29 12:47:49

标签: c# command-line-arguments

很抱歉,不清楚。这是解释。

有一个命令“ admin setserver systempw”,用于设置密码。在cmd中键入该命令后单击“ Enter”,它将提示用户输入。我们必须输入一个字符串,然后单击“ 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 :(得分:0)

在彻底更新您的帖子之后,我相信您可能会喜欢以下两种情况之一:

  • 如何根据用户输入执行不同的命令?
  • 如何在服务器上更改用户密码。

我将对每种方法进行基本概述,以期使您受过更好的教育,并希望能更新您的帖子以反映您真正想要的结果。

神奇的开关

要在控制台应用程序中执行多个命令,请查看C#中可用的switch structure。这将允许您根据某些条件(例如用户输入)执行不同的代码位。例如:

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更改,您应该查看this postthis documentation以获得更多信息。它使用的代码(如果链接由于某种原因而消失)是

// 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的更改,我建议您研究this post(其中有两个不错的答案来解决此问题)和this documentation,以在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
}

在此建议下:

  • 考虑您的字符串用户名->对其进行哈希处理->编写查询以检查该哈希值与存储在数据库中的用户密码的哈希值是否相同
  • 考虑字符串密码和字符串newPassword->检查每个字符串是否为null或长度为0
  • 在代码中考虑字符串密码和字符串newPassword->都进行哈希处理->检查哈希值是否相同

重要说明

无论您要解决的是什么问题,在处理密码时,都应认真考虑密码附带的哈希和加密。如果要在服务器上更改密码,则还应在更改之前验证旧密码。您还应该通过检查非法字符来验证新密码,确保密码强度足够,验证新密码的初始条目是否与确认条目匹配,以及诸如密码周围的散列和加密之类的其他事项。您需要进行验证。

全面发布

如果您需要更具体的问题的更彻底的答案,例如实际更改您有权访问的服务器上的密码,那么请更新您的问题,并遵循mjwills的建议并访问Minimal, Complete, and Verifiable example 。这将使其他读者不仅可以更好地为您提供帮助,而且可以为以后的读者解决类似问题提供帮助。一旦您更新了问题以反映真正想要的结果,我将更新我的答案(如果我有答案),以证明您正在寻找的知识。

答案 1 :(得分:0)

经过深思熟虑,我认为您是在问“ 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

希望从我们对您想要的东西的猜测中可以将一些东西拼凑在一起。