У меня есть два подключенных сетевых диска на моем компьютере с Windows от NAS. Для обоих дисков требуется одинаковая конфигурация имени пользователя и пароля, и я решил не указывать Windows помнить об этом, потому что я хочу, чтобы минимальное требование для доступа к любому из моих файлов должно было, по крайней мере, вводить один пароль правильно, верно?

Из-за этого Windows не подключает сетевые диски при входе в систему и выдает мне обычную ошибку: Не удалось переподключить все сетевые диски

Не удивительно, что Windows не знает, что делать, если не знает пароль к моей сетевой папке.

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

Как бы я этого достиг?

(Мне хорошо известно, что я мог бы использовать то же имя пользователя и логин на моей машине с Windows, что и сетевой логин, чтобы автоматизировать это, но я не хочу этого делать, даже если это то, что я обычно рекомендую другим)

1 ответ1

0

Я пытался достичь этого с помощью своих базовых навыков. Вот что я придумал.

Сначала настройте окна для запуска окон папок как отдельного процесса (вместо того, чтобы хранить все папки под одним и тем же explorer.exe), это позволяет закрывать папки с помощью командной строки / пакетных сценариев.

Включить папки как отдельные процессы

Затем запишите этот пакетный файл и поместите его в ** C:\Users\ Имя пользователя \ AppData \ Roaming \ Microsoft \ Windows \ Меню Пуск \ Программы \ Запуск ** (Почему это не жирным шрифтом?)

@echo off
start explorer "D:\"
:loop
timeout 0
(net use | findstr OK) > nul 2>&1
if errorlevel 1 goto loop
taskkill /F /FI "WINDOWTITLE eq NETWORKDRIVELABEL*" /IM explorer.exe
start /wait explorer "G:\"
timeout 0
taskkill /F /FI "WINDOWTITLE eq NETWORKDRIVE2LABEL*" /IM explorer.exe
start /wait explorer "F:\"
timeout 0
taskkill /F /FI "WINDOWTITLE eq NETWORKDRIVE3LABEL*" /IM explorer.exe
start /wait explorer "H:\"
timeout 0
taskkill /F /FI "WINDOWTITLE eq NETWORKDRIVE4LABEL*" /IM explorer.exe
stop

Просто замените буквы дисков на те, которые относятся к вашей системе, а на NETWORKDRIVELABEL - названия соответствующих сетевых дисков. Это необходимо, потому что полное имя заголовка окна - «NETWORKDRIVELABEL (\SHARENAME) (DRIVELETTER)», но вместо написания полного заголовка окна я просто использую звездочку (*), чтобы определить, что он предназначен для закрытия любого процесса проводника с помощью заголовок окна, начинающийся с NETWORKDRIVELABEL.

Он пытается открыть общий сетевой ресурс «D:\» с помощью проводника Windows. Как это происходит, так как это сетевой ресурс, вы получаете приглашение войти в систему. После этого запускается цикл, в котором программа запускает net use | findstr OK (ищет "OK" в выводе "net use") и не двигается дальше, пока не найдет OK (эта часть предполагает, что у вас нет инициализированных сетевых дисков. Я не уверен, как быть более сложным с findstr; это не так хорошо, как grep Bash).

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

Мне пришлось использовать команду остановки в конце командного файла, иначе он не закончится нормально (ожидал ввода данных пользователем).

Обратитесь сюда, если вы хотите сделать это, но скрыть командное окно: Как запустить командный файл без запуска "командного окна"?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .