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

Vbscript 如何进入网络用户名和密码提示窗口,vbscript,nas,Vbscript,Nas,我正在编写一个VB脚本,以便在每次计算机启动时自动为Synology NAS DS218j设备(如果重要的话)托管的网络位置安装网络驱动器。我还希望用户在NAS设备提示时输入用户名和密码。问题是,NAS用户配置文件可能与Windows 10的不同,因此每个用户在第一次连接到NAS设备位置(也在安装网络驱动器时)时都必须输入其用户名和密码: 首次成功登录后,可以保存凭据 问题是: 如何从VBScript访问此提示窗口?我已经尝试做的是: 只需装载驱动器:我得到一个错误,用户名和密码无效(清除,因

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

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

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

只需装载驱动器:我得到一个错误,用户名和密码无效(清除,因为它使用windows配置文件密码):

要捕获错误并告诉资源管理器打开窗口(要模拟此行为,用户手动执行哪些操作以打开NAS登录窗口):

如果错误号为0,则
WScript.Echo CStr(错误描述)
如果错误编号=CLng(&H“&80070056),则
错误转到0
昏暗的奥布舍尔
设置objShell=CreateObject(“WScript.Shell”)
暗淡的返回
Dim cmdString
cmdString=“Explorer.exe/n,/root,”+stremotepath
intReturn=objShell.Run(cmdString,1,True)
其他的
WScript.Quit
如果结束
如果结束
这实际上就是打开“文档”文件夹!它也不会等待窗口关闭(这是我实际期望的,通过将第三个参数
True
赋给
objShell.Run
命令)

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

保存从该自定义对话框收集的用户密码不是我寻求的解决方案,因为这样我就有了安全问题


您知道如何通过VBScript命令访问此登录窗口吗?

不要尝试自动执行Windows向您显示的密码对话框。而是通过方法的相应参数传递凭据:

如果您需要提示用户输入他们的凭据(我对您的问题不太清楚),最简单的方法是使用
InputBox
对话框。但是,由于您无法在这些对话框中隐藏密码输入,因此您可能希望改为创建一个。类似如下:

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
Set ie=CreateObject(“InternetExplorer.Application”)
即,导航“关于:空白”
ie.Document.title=“title”
ie.ToolBar=False
即:可调整大小=错误
ie.StatusBar=False
即宽度=320
即高度=180
而ie.ReadyState 4:WScript.Sleep 100:Wend
ie.Document.body.innerHTML=_
“

”&vbNewLine&_ “

”&vbNewLine&_ “”和_ “

” ie.Document.body.style.overflow=“自动” 可见=真实 ie.Document.all.Username.focus 出错时继续下一步 当ie.Document.all.OK.value=0时执行 WScript.Sleep 100 环 错误转到0 username=objIE.Document.all.username.value password=objIE.Document.all.password.value
不要尝试自动执行Windows向您显示的密码对话框。而是通过方法的相应参数传递凭据:

如果您需要提示用户输入他们的凭据(我对您的问题不太清楚),最简单的方法是使用
InputBox
对话框。但是,由于您无法在这些对话框中隐藏密码输入,因此您可能希望改为创建一个。类似如下:

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
Set ie=CreateObject(“InternetExplorer.Application”)
即,导航“关于:空白”
ie.Document.title=“title”
ie.ToolBar=False
即:可调整大小=错误
ie.StatusBar=False
即宽度=320
即高度=180
而ie.ReadyState 4:WScript.Sleep 100:Wend
ie.Document.body.innerHTML=_
“

”&vbNewLine&_ “

”&vbNewLine&_ “”和_ “

” ie.Document.body.style.overflow=“自动” 可见=真实 ie.Document.all.Username.focus 出错时继续下一步 当ie.Document.all.OK.value=0时执行 WScript.Sleep 100 环 错误转到0 username=objIE.Document.all.username.value password=objIE.Document.all.password.value
1.因为密码必须保密,只有用户知道(我不知道每个用户的密码,他/她必须自己输入)2.因为脚本必须对每个用户都通用(没有预定义的数据,应该是可变的),谢谢你的回答。我已经考虑过这种方式了(也可以通过基于IE的自定义对话框),但这种方法的问题是,在这种情况下,用户每次启动/重新启动电脑时都必须输入用户名和密码(无保存选项)。Windows显示的对话框允许用户保存密码以备下次使用。这就是我希望获得该对话框的原因。您可能会建议我保存用户密码,这是我从该自定义对话框收集的密码,但随后我遇到了安全问题!还有其他解决方案吗?@Vytautas您在原始文档中提到过吗stion,你认为这与那些试图帮助你的人无关吗?@Lankymart谢谢你的精确评论。已经扩展了我最初的问题。因此,我想,既然你意识到这不是简单的情况,就没有解决方案了…:/1。因为密码必须保密,并且只有用户知道(我不知道每个用户的密码,他/她必须自己输入密码)2.因为脚本必须适合每个用户(没有预定义的数据,应该是可变的)谢谢你的
username = "..."
password = "..."
...
objNetwork.MapNetworkDrive strDriveLetter, strRemotePath, False, username, password
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