将字符串从 vb.net 传递到 cmd



我正在尝试将字符串从 vb.net 传递到命令提示符窗口中。最后,我想使用 runas 并使用之前登录应用程序时提供的密码作为密码。基本上我想运行runas命令,然后在窗口中输入密码(或以某种方式将其提供给cmd(

Public Sub runCmd(ByVal pass As String, ByVal command As String, ByVal arguments As String, ByVal permanent As Boolean)
        Dim p As Process = New Process()
        Dim pi As ProcessStartInfo = New ProcessStartInfo()
        pi.Arguments = " " + If(permanent = True, "/K", "/C") + " " + command + " " + arguments
        pi.FileName = "cmd.exe"
        pi.Verb = "runas"
        p.StartInfo = pi
        p.Start()
    End Sub

这是我收到目录错误的更新代码

 Public Sub runCmd(ByVal pass As String, ByVal user As String, ByVal domainName As String, ByVal command As String, ByVal arguments As String, ByVal permanent As Boolean)
        Dim p As Process = New Process()
        Dim pi As ProcessStartInfo = New ProcessStartInfo()
        pi.Arguments = " " + If(permanent = True, "/K", "/C") + " " + command + " " + arguments
        pi.FileName = "cmd.exe"
        pi.Verb = "runas"
        pi.UserName = user
        pi.Domain = domainName
        pi.Password = getSecureString(pass)
        p.StartInfo = pi
        pi.UseShellExecute = False
        p.Start()
    End Sub

无法同时使用不同的用户帐户启动具有提升权限的Process。因此,我根据是否可以从批处理文件中获取用户的UAC提示?修改了您的runCmd函数。动态创建一个脚本,其中包含要使用提升的权限运行的命令。然后,使用 Process 在所需的用户帐户下运行该脚本。

Public Sub runCmd(ByVal password As String, ByVal user As String, ByVal domain As String, ByVal command As String, ByVal permanent As Boolean)
    ' Create script with desired command to run under elevated prompt.
    Dim persist As String = If(permanent, "/K ", "/C ")
    File.WriteAllText(
        "runCmd.js",
        $"ShA=new ActiveXObject(""Shell.Application"")" & vbCrLf &
        $"ShA.ShellExecute(""cmd.exe"",""{persist} {command}"","""",""runas"",5);")
    ' Run script as domainuser with password.
    Dim p As Process = New Process()
    Dim pi As ProcessStartInfo = New ProcessStartInfo()
    pi.Arguments = "runCmd.js"
    pi.FileName = "wscript.exe"
    pi.UserName = user
    pi.Domain = domain
    pi.Password = GetSecureString(password)
    p.StartInfo = pi
    pi.UseShellExecute = False
    p.Start()
End Sub

其中GetSecureString()函数定义如下。

Public Function GetSecureString(ByVal str As String) As SecureString
    Dim secureString As SecureString = New SecureString
    For Each ch As Char In str
        secureString.AppendChar(ch)
    Next
    secureString.MakeReadOnly()
    Return secureString
End Function

例如,您可以调用:

runCmd("password", "user", "domain", "dir", True)

你将获得 UAC 提示符,将打开一个命令窗口,运行dir命令,命令窗口将保持打开状态。

您可以通过查看 ShellExecute 和 wscript 提供的不同选项来进一步自定义您的解决方案。

最新更新