如何进入提示窗口输入网络用户名和密码

时间:2018-11-29 10:24:36

标签: vbscript nas

我正在编写一个VB脚本,以便在每次启动计算机时自动为Synology NAS DS218j设备(如果重要)托管的网络位置安装网络驱动器。如果NAS设备提示,我还希望用户输入用户名和密码。问题是,NAS用户配置文件可能与Windows 10的用户配置文件不同,因此每个用户在首次连接到NAS设备位置时(以及在安装网络驱动器时)都必须输入其用户名和密码:

NAS Device prompt-window

首次成功登录后,可以保存凭据。

问题是: 如何从VBScript进入此提示窗口?我已经尝试做的是:

仅安装驱动器:我得到一个错误,用户名和密码无效(清楚,因为它使用Windows配置文件密码):

Dim objNetwork 
Set objNetwork = CreateObject("WScript.Network")
strDriveLetter = "T:" 
strRemotePath = "\\192.168.2.247\BlaBla"
objNetwork.MapNetworkDrive strDriveLetter, strRemotePath

要捕获错误并告诉浏览器打开窗口(要模仿行为,用户将手动操作以使NAS登录窗口打开):

If Err.Number <> 0 Then
    WScript.Echo CStr(Err.Description)
    If Err.Number = CLng("&H" & 80070056) Then
        On Error Goto 0
        Dim objShell
        Set objShell = CreateObject("WScript.Shell")
        Dim intReturn
        Dim cmdString
        cmdString = "Explorer.exe /n,/root," + strRemotePath
        intReturn = objShell.Run(cmdString, 1, True)
    Else
        WScript.Quit
    End If
End If

实际上是打开“文档”文件夹!它还不等待窗口关闭(我实际上希望通过将第三个参数True赋予objShell.Run命令来完成此操作。

我已经考虑过通过基于IE的自定义对话框提示用户输入密码的解决方案,但是这种方法的问题在于,在这种情况下,用户每次启动/重新启动其密码时都必须输入用户名和密码。 /她的PC(无保存选项)。 Windows显示的对话框允许用户下次保存密码。

我从该自定义对话框中收集的保存用户密码不是我想要的解决方案,因为那样我就遇到了安全问题。

有什么想法如何通过VBScript命令进入此登录窗口?

1 个答案:

答案 0 :(得分:2)

请勿尝试自动出现Windows提示您的密码对话框。而是通过MapNetworkDrive方法的相应参数传递凭据:

username = "..."
password = "..."
...
objNetwork.MapNetworkDrive strDriveLetter, strRemotePath, False, username, password

如果您需要提示用户输入其凭据(我的问题尚不清楚),最简单的方法是使用InputBox对话框。但是,由于您无法在其中隐藏密码输入,因此您可能想创建一个custom dialog。像这样:

Set ie = CreateObject("InternetExplorer.Application")

ie.Navigate "about:blank"
ie.Document.title = "Title"
ie.ToolBar        = False
ie.Resizable      = False
ie.StatusBar      = False
ie.Width          = 320
ie.Height         = 180

While ie.ReadyState <> 4 : WScript.Sleep 100 : Wend

ie.Document.body.innerHTML = _
  "<p><input type='text' size='20' id='Username'></p>" & vbNewLine & _
  "<p><input type='password' size='20' id='Password'></p>" & vbNewLine & _
  "<p><input type='hidden' id='OK' name='OK' value='0'>" & _
  "<input type='submit' value='Foo' onClick='VBScript:OK.value=1'></p>"
ie.Document.body.style.overflow = "auto"

ie.Visible = True
ie.Document.all.Username.focus

On Error Resume Next
Do While ie.Document.all.OK.value = 0
  WScript.Sleep 100
Loop
On Error Goto 0

username = objIE.Document.all.Username.value
password = objIE.Document.all.Password.value