
У меня есть два сетевых диска, подключенных к моей машине Windows, из NAS. Оба диска требуют одинаковой конфигурации имени пользователя/пароля, и я решил не указывать Windows, чтобы она это запоминала, потому что, ну, я хочу, чтобы минимальным требованием для доступа к любому из моих файлов был хотя бы ввод одного пароля, верно?
Из-за этого Windows не подключает сетевые диски при входе в систему и выдает мне обычную ошибку:
Никого не удивит, что Windows понятия не имеет, что делать, если не знает пароль к моему сетевому ресурсу.
Итак, вот как я хочу автоматизировать этот процесс: после загрузки и входа в систему я хочу получить всплывающее окно входа в сеть, похожее на то, которое вы получаете при попытке доступа к окну. Я хочу успешно войти в систему, а затем хочу, чтобы Windows попыталась подключить сетевые диски.
Как мне этого добиться?
(Я прекрасно понимаю, что могу использовать то же имя пользователя и логин на моем компьютере с Windows, что и для сетевого входа, чтобы автоматизировать этот процесс, но я тоже не хочу этого делать, даже если я обычно рекомендую это другим)
решение1
Я попытался добиться этого с помощью своих базовых навыков пакетной обработки. Вот что у меня получилось.
Сначала настройте Windows для запуска окон папок как отдельного процесса (вместо того, чтобы хранить все папки в одном explorer.exe), это позволит закрывать папки через командную строку/пакетные скрипты.
Затем запишите этот пакетный файл и поместите его в **C:\Users\Имя пользователя\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup** (почему он не выделен жирным шрифтом?)
@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» в выводе «net use») и не продолжает работу, пока не найдет «OK» (в этой части предполагается, что у вас не инициализированы сетевые диски. Я не уверен, как сделать findstr более подробным; он не так хорош, как grep в bash).
Затем, как только он обнаружит, что сетевой диск подключен правильно, он попытается подключить другие сетевые диски, открыв их с помощью проводника, а затем закрыв их.
Мне пришлось использовать команду остановки в конце пакетного файла, иначе он не завершился бы нормально (ожидал ввода данных пользователем).
Если вы хотите сделать то же самое, но скрыть окно команд, обратитесь сюда:Как запустить пакетный файл, не открывая «командное окно»?