我正在编写一个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的自定义对话框提示用户输入密码的解决方案,但是这种方法的问题在于,在这种情况下,用户每次启动/重新启动其密码时都必须输入用户名和密码。 /她的PC(无保存选项)。 Windows显示的对话框允许用户下次保存密码。
我从该自定义对话框中收集的保存用户密码不是我想要的解决方案,因为那样我就遇到了安全问题。
有什么想法如何通过VBScript命令进入此登录窗口?
答案 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