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

Posted

技术标签:

【中文标题】如何进入网络用户名和密码提示窗口【英文标题】:How to get to the prompt window for network username and password 【发布时间】:2019-05-01 09:14:27 【问题描述】:

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

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

问题是: 如何从 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 的自定义对话框提示用户输入密码,但这种方法的问题是,在这种情况下,用户每次启动/重新启动时都必须输入用户名和密码。 /她的电脑(没有保存选项)。 Windows 显示的对话框允许用户下次保存密码。

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

你知道如何通过 VBScript 命令进入这个登录窗口吗?

【问题讨论】:

【参考方案1】:

不要尝试自动化 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

【讨论】:

1.因为密码必须保密并且只有用户知道(我不会知道每个用户的密码,他/她必须自己输入) 2. 因为脚本必须为每个用户提供通用工作(没有预定义的数据,这应该是可变的) 感谢您的回答。我已经考虑过这种方式(也通过基于 IE 的自定义对话框),但这种方法的问题是,在这种情况下,用户每次启动/重新启动他/她的 PC 时都必须输入他们的用户名和密码(不保存选项)。 Windows 显示的对话框允许用户下次保存密码。这就是为什么我想得到那个对话框。您可能会建议我保存从该自定义对话框中收集的用户密码,但是我遇到了安全问题!还有其他解决方案吗? @Vytautas 您在最初的问题中是否提到过这些,您认为这与那些试图帮助您的人无关吗? @Lankymart 感谢您的准确评论。已经扩展了我最初的问题。 所以,我想,既然你意识到这不是一些简单的情况,没有解决方案......:/

以上是关于如何进入网络用户名和密码提示窗口的主要内容,如果未能解决你的问题,请参考以下文章

如何用fidder跳过密码进行用户账号登陆

连接网络打印机时输入主机用户名和密码(admin)后又出现自己电脑名称,需要输密码,如何解决??

如何解决mvc中授权失败的windows安全窗口提示

用VMware装CentOS 5.5 安装成功 最后输入用户名和密码进入时 提示验证失败

怎么设置局域网共享不用输入用户名和密码

mysql如何在命令行创建数据库