很抱歉,不清楚。这是解释。
有一个命令“ 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);
如何将第二个文本框值(密码)作为参数关联到进程。如何将密码链接到提示“请输入密码:”的提示。
请解释。
答案 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 post和this 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
}
在此建议下:
重要说明
无论您要解决的是什么问题,在处理密码时,都应认真考虑密码附带的哈希和加密。如果要在服务器上更改密码,则还应在更改之前验证旧密码。您还应该通过检查非法字符来验证新密码,确保密码强度足够,验证新密码的初始条目是否与确认条目匹配,以及诸如密码周围的散列和加密之类的其他事项。您需要进行验证。
全面发布
如果您需要更具体的问题的更彻底的答案,例如实际更改您有权访问的服务器上的密码,那么请更新您的问题,并遵循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
希望从我们对您想要的东西的猜测中可以将一些东西拼凑在一起。