Как попасть в окно приглашения для ввода имени пользователя и пароля сети - PullRequest
0 голосов
/ 29 ноября 2018

Я пишу сценарий 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Настраиваемое диалоговое окно, запрашивающее у пользователей их пароли, но проблема с этим подходом состоит в том, что в этом случае пользователи должны вводить свое имя пользователя и пароль каждый раз, когда они запускают / перезагружают его / ее ПК (без сохранения). Диалог, которыйWindows представляет, позволяет пользователям сохранить свой пароль в следующий раз.

Сохранение пользовательских паролей, которые я собираю из этого настраиваемого диалогового окна, не является решением, которое я ищу, потому что тогда у меня возникает проблема безопасности.

Есть идеи, как попасть в это окно входа в систему с помощью команд VBScript?

1 Ответ

0 голосов
/ 29 ноября 2018

Не пытайтесь автоматизировать диалоговое окно с паролем, которое вам представляет Windows.Вместо этого передайте учетные данные с помощью соответствующих параметров метода MapNetworkDrive:

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

Если вам нужно запросить у пользователя его учетные данные (которые мне не были понятны из вашеговопрос) самый простой способ будет использовать 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
...