Иногда в моей практике были случаи что сетевые диски не подключались при входе. Были случаи когда надо было подключить много сетевых дисков на много машин сразу. Для решения этих задач необходимо написать *.bat или *.cmd файл.
Содержимое его может быть например таким:
@ECHO OFF
net use * /delete /yes
net use z: \\10.24.3.17\Shared
- Первая строка выключает сообщения.
- Вторая удаляет все уже существующие диски.
- Третья подключает диском z папку Shared с сервера
Прочитано 6176 раз
Последнее изменение Среда, 27 Январь 2021 15:11
Добавить комментарий
Скрипт Для подключения общего ресурса, расшаренного ресурса, Общей папки.
Для того что бы вручную не набивать имя ПК, либо IP адрес ПК, если это разные рабочие группы или доменная сеть и обычная.
Делаем скрипт который:
0. Определение текущей сети и подстановка IP
1. запрашивает логин пароль на подключение,
2. назначает первую свободную букву с конца алфавита,
3. дает имя сетевому диску,
4. сохраняет логин пароль.
5. Если все удачно откроется общая папка
Скрипт на CMD bat
Скачать
Образец будет для текущей сети подставлять IP например 192.168.101.7 или 192.168.102.7 и т.д.
расшаренная папка будет находится по следующему пути 192.168.101.7\docs
так как у нас уже была настроенная общая папка под гостем без авторизации (без матрицы доступа) в начале нам ее нужно отключить.
@ECHO OFF
mode con:cols=130 lines=40
color 1A
:: Автор Артём Андреевич Мамзиков
chcp 1251 >NUL
TITLE Переподключение диска\папки docs
@cls
::Получаем просто подсеть из начала совпадения строки более правильно чем dns
for /f «tokens=2 delims=:(» %%d in (‘ipconfig /all^|FIND /I «IP»^|FINDSTR /c:»192.168.» /c:»172.16.»‘) do (
:: Так как ip разной длинны обрезка :~1.10% нам не подходит разбиваем на октеты
for /f «tokens=1-4 delims=. » %%k in («%%d») do set IP=%%k.%%l.%%m
)
set Server=%IP: =%.7
:: Отключаем конкретную папку
net use \\%Server%\docs /delete /y
:: Удалит сразу все подключенные сетевые диски
::net use * /delete /y
::net use z: /delete /y
:vopros
chcp 1251 >NUL
:: Запрос Логина Пароля
set login=Введите имя пользователя (Логин):=
set password=Введите пароль (Пароль ):=
:: Визуальный вывод и получение ввода данных
chcp 866 >NUL
echo %login%
set /P loginp=
echo.
echo %password%
set /P passwordp=
echo.
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters /v BasicAuthLevel /t REG_DWORD /d 2 /f
sc config WebClient start= auto
sc failure WebClient reset= 60 actions= restart/60000/restart/120000//
net start WebClient
:: Подключение сетевого диска
:: Перебираем свободные буквы для сетевого диска с буквы Z
For %%Z In (Z Y X W V U T S R Q P O N M L J I H G F E) Do If Not Exist «%%Z:\» Set Disk=%%Z& GoTo ExitLoop
Echo Нет свободных букв дисков
:ExitLoop
::set str=net use %Disk%: \\%Server%\docs /user:%loginp% %passwordp% /persistent:yes
set str=net use %Disk%: \\%Server%\docs /user:ДОМЕН\%loginp% %passwordp% /persistent:yes
chcp 1251 >NUL
:: Подпишем диск
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\##%Server%#docs /t REG_SZ /v _LabelFromReg /d Общая /f
echo %str%
%str%
start %Disk%:\
chcp 866 >NUL
pause
color 0f
Некоторые моменты при подключении через доменную учётку которые возникли у нас
Есть доменное имя
Например domen.local завязано оно на 3 сервера т.е. при его пинге чередуются IP адреса для данного имени
2 сервера подсети видят , 3 нет (доступ закрыт) это другая подсеть и в этот момент не проходит авторизация, даже если жестко задан DNS доступного сервера , попытки прописать данные в hosts файл, бывает что у чётки не авторизуются.
Причем если уже все доступно общий ресурс недоступен нужно отключать и снова подключать, либо после перезагрузки.
Для Windows
Если не подключается docs скриптом mount-docs-cp1251.bat
1 Отключить Диск в моем компьютере
2 Удалить сохранённые логин пароли через cmd командой net use * /delete
можно еще проверить командами rundll32.exe keymgr.dll, KRShowKeyMgr или control userpasswords2
Проверить пинг на ping Домен.local
Если пинга нет то ОбновитьDNS командой ipconfig /flushdns
Просмотреть IP
nslookup Домен.local
Обновление учеток по LDAP
Проверить gpupdate
После снова запускаем скрипт mount-docs-cp1251.bat
Попытка через HOST файл
FOR /L %I IN (1,1,10) DO ECHO 192.168.101.7 SRV%I >> C:\WINDOWS\SYSTEM32\DRIVERS\ETC\HOSTS
Если где то вирус скрыл папки
attrib -h -s /d /s D:\docs\*
attrib -h -s /d /s D:\docs
Подключение сетевого диска из ownСloud
Рабочий вариант скрипта , но после перезагрузки не проходил логин пароль
@echo off
mode con:cols=100 lines=20
color f0
echo.
chcp 1251 >NUL
TITLE Подключение к «Облачному хранилищу»
set x=Для подключения к «Облачному хранилищу» введите логин и пароль от почты Zimbra.
set n=Сетевой диск с вашим именем пользователя будет доступен в «Мой Компьютер».
set l=Введите логин для почты Zimbra и нажмите Enter:
set p=Введите пароль для почты Zimbra и нажмите Enter:
chcp 866 >NUL
echo %x%
echo %n%
echo.
echo %l%
echo.
set /P user=
echo.
echo %p%
echo.
set /P password=
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters /v BasicAuthLevel /t REG_DWORD /d 2 /f
sc config WebClient start= auto
sc failure WebClient reset= 60 actions= restart/60000/restart/120000//
net start WebClient
For %%Z In (Z Y X W V U T S R Q P O N M L J I H G F E) Do If Not Exist «%%Z:\» Set Disk=%%Z& GoTo ExitLoop
Echo Нет свободных букв дисков
:ExitLoop
set str=net use %Disk%: http://cloud.DNS.ru/owncloud/remote.php/dav/files/%user%/ /Persistent:No /user:%user% %password%
echo %str%
%str%
start %Disk%:\
color 0f
Другие варианты скриптов тестировались
@echo off
chcp 1251
set /P user=»Введите логин от zimbra Spark glpi: «
set /P password=»Введите пароль от zimbra Spark glpi: «
net use x: /delete /y
reg add HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters /v BasicAuthLevel /t REG_DWORD /d 2 /f
sc config WebClient start= auto
net start WebClient
cmdkey /generic:cloud.DNS.ru /user:%user% /pass:%password%
For %%Z In (Z Y X W V U T S R Q P O N M L J I H G F E D C) Do If Not Exist «%%Z:\» Set Disk=%%Z& GoTo ExitLoop
Echo Нет свободных букв дисков
:ExitLoop
set str=net use «%Disk%»: http://cloud.DNS.ru/owncloud/remote.php/dav/files/%user%/ /Persistent:Yes /user:%user% %password%
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\##cloud.DNS.ru#DavWWWRoot#owncloud#remote.php#dav#files#%user% /t REG_SZ /v _LabelFromReg /d Облако /f
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\##cloud.DNS.ru#owncloud#remote.php#dav#files#%user% /t REG_SZ /v _LabelFromReg /d Облако /f
echo %str%
set str=%str:echo =%
%str%
start %Disk%:\
if exist h:\* exit /b 0
reg add HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters /v BasicAuthLevel /t REG_DWORD /d 2 /f
sc config WebClient start= auto
net start WebClient
set user=mamzikovaa
set password=Пароль
net use x: /delete /y
cmdkey /generic:cloud.DNS.ru /user:%user%@DNS.ru /pass:%password%
set str=net use x: http://cloud.DNS.ru/owncloud/remote.php/dav/files/%user%/ /Persistent:Yes /user:%user% %password%
chcp 1251
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\##cloud.DNS.ru#DavWWWRoot#owncloud#remote.php#dav#files#%user% /t REG_SZ /v _LabelFromReg /d ќблако /f
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\##cloud.DNS.ru#owncloud#remote.php#dav#files#%user% /t REG_SZ /v _LabelFromReg /d ќблако /f
echo %str%
set str=%str:echo =%
%str%
start x:\
set user=echo %username% — запрос пользователя ПК
set str=net use z: http://cloud.DNS.ru/owncloud/remote.php/dav/files/%user%/ /Persistent:Yes /user:%user% — подключение диска
echo %str%
set str=%str:echo =%
%str%
start z:\
/user — имя пользователя должно быть в виде USER@DOMAIN или DOMAIN\USER
runas /user:имя-пользователя@домен «C:\Program Files\Opera\launcher.exe»
runas /user:mamzikovaa@DNS.ru «cmd.exe»
runas /user:mamzikovaa@DNS.local «cmd.exe»
runas /user:DNS.local\mamzikovaa «cmd.exe»
set COMPUTERNAME=echo %COMPUTERNAME%
sc.exe \\%COMPUTERNAME% config WebClient start= auto
sc.exe \\%COMPUTERNAME% start WebClient
net use x: http://mamzikovaa:Пароль@cloud.DNS.ru/o … amzikovaa/ /Persistent:Yes /user:mamzikovaa@DNS.ru
net use x: http://cloud.DNS.ru/owncloud/remote.php … amzikovaa/ /Persistent:Yes /user:mamzikovaa@DNS.ru Пароль
net use x: http://cloud.DNS.ru/owncloud/remote.php … amzikovaa/ Пароль /user:mamzikovaa@DNS.ru
net use «\\server\share» password /user:login
net use x: \\VasyaServer\Share /user:VASYADOMAIN\VASYA 12345
Примонтируем сетевой диск под буквой X, расположенный на сервере \\VasyaServer\Share, имя пользователя VASYA, домен VASYADOMAIN, пароль 12345
reg add HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters /v BasicAuthLevel /t REG_DWORD /d 2 /f
sc config WebClient start= auto
net start WebClient
set user=echo %username%
set password=
set str=net use x: http://cloud.DNS.ru/owncloud/remote.php/dav/files/%user%/ /Persistent:Yes /user:%user%@DNS.ru %password%
echo %str%
set str=%str:echo =%
%str%
start x:\
Для того, чтобы подключиться по протоколу WebDAV к нашему серверу OwnCloud в Windows 7 необходимо выполнить следующие действия:
1. Изменить параметры ключа HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameter\ BasicAuthLevel с 1 на 2
Он может принимать 3 возможных значения:
0 – Basic-аутентификация полностью запрещена
1 – Basic-аутентификация разрешена для SSL-соединений (значение по умолчанию)
2 – Basic-аутентификация разрешена для любых типов соединений
cmdkey /add:SRV10 /user:user /pass:passwd — создать учетную запись для подключения к компьютеру SRV10 пользователя user с паролем passwd
cmdkey /add:cloud.DNS.ru /user:mamzikovaa@DNS.ru /pass:Пароль
cmdkey /generic:cloud.DNS.ru /user:mamzikovaa@DNS.ru /pass:Пароль
Формат командной строки:
CMDKEY [{/add | /generic}:targetname {/smartcard | /user:username {/pass{:password}}} | /delete{:targetname | /ras} | /list{:targetname}]
targetname — определяет компьютер или домен, с который эта учетная запись будет связана.
/generic:targetName — общие учетные данные.
TargetName — имя компьютера или домена, где будут использованы полученные учетные данные.
/smartcard — определяет режим получения удостоверения с использованием смарт-карты
/user:username — имя пользователя.
/pass:password — пароль для учетной записи.
/delete:targetname |/ras — удаление учетной записи, /ras используется для того, что бы удалить учетные данные сервера удаленного доступа RAS.
/list:targetname — отобразить список учетных записей.
@echo off — скрыть выполнение команд
chcp 1251 — изменение кодировки если текст иероглифами
set /P user=»Введите логин от zimbra Spark glpi: » — запрос логина
set /P password=»Введите пароль от zimbra Spark glpi: » — запрос пароля
net use x: /delete /y — удаление диска X
reg add HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters /v BasicAuthLevel /t REG_DWORD /d 2 /f — изменение параметра реестра Basic-аутентификация разрешена для любых типов соединений
sc config WebClient start= auto — перевод службы ВебКлиент на автозапуск
net start WebClient — старт службы ВебКлиент
cmdkey /generic:cloud.DNS.ru /user:%user% /pass:%password% — Сохранение пароля в Диспетчер учетных данных
For %%Z In (Z Y X W V U T S R Q P O N M L J I H G F E D C) Do If Not Exist «%%Z:\» Set Disk=%%Z& GoTo ExitLoop -поиск свободной буквы для присвоения диску
Echo Нет свободных букв дисков
:ExitLoop
set str=net use «%Disk%»: http://cloud.DNS.ru/owncloud/remote.php/dav/files/%user%/ /Persistent:Yes /user:%user% %password% — подключение диска
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\##cloud.DNS.ru#DavWWWRoot#owncloud#remote.php#dav#files#%user% /t REG_SZ /v _LabelFromReg /d Облако /f — переименования диска параметр реестра
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\##cloud.DNS.ru#owncloud#remote.php#dav#files#%user% /t REG_SZ /v _LabelFromReg /d Облако /f — — переименования диска параметр реестра
echo %str%
set str=%str:echo =%
%str%
start %Disk%:\ — открытие смонтированного диска
if exist h:\* exit /b 0 — если буква диска h занята прекратить выполнение скрипта дальше и выйти
Скрипт для Подключение сетевого диска (расшареной папки) на Alt Linux
В последних билдах Windows 10 встречался неприятный баг, из-за которого перестают подключаться сетевые диски после перезагрузки компьютера. После входа в систему пользователь в проводнике Windows видит красный крест на иконках всех подключенных сетевых дисков. Если в командой строке выполнить команду net use, то напротив всех подключенных дисков вы увидите статус Недоступны (Unavailable). Автоматически не переподключаются как сетевые диски, подключенные пользователем, так и диски, подключаемые через GPO.
Впервые эта проблема была обнаружена в Windows 10 1809, но она встречается и в более новых билдах, в том числе в Windows 10 2004.
Содержание:
- Windows 10 не восстанавливает подключение к сетевым дискам
- PowerShell скрипт для автоматического переподключения сетевых дисков
- Подключение сетевых дисков через GPO
- Не подключаются сетевые диски в Windows 10 2004
- Настроить задержку подключения сетевых дисков в Windows через GPO
- Отключить уведомление “Не удалось восстановить подключение ко всем сетевым дискам”
Windows 10 не восстанавливает подключение к сетевым дискам
Windows 10 по какой-то причине перестает автоматически подключать сетевые диски после перезагрузки компьютера. Сетевые диски отображаются в проводнике, но подключиться к ним нельзя.
При этом в области уведомлений появляется всплывающее окно с текстом:
Could not reconnect all network drives.
Не удалось восстановить подключения ко всем сетевым дискам.
Проблема возникает как с дисками, подключенных с NAS устройств, так и с сетевыми папками на других компьютерах Windows/Linux. Этот баг впервые появился в Windows 10 1809 и по словам Microsoft исправлен обновлением KB469342 выпущенным 5 декабря 2018 года (addresses an issue that may cause mapped drives to fail to reconnect after starting and logging onto a Windows device). Но проблема встречается и в других билдах Windows 10.
Также Microsoft предлагает обходное решение проблемы с восстановлением подключения к сетевым дискам (см. KB4471218 — Mapped network drive may fail to reconnect in Windows 10). Для этого при входе пользователя в систему предлагается запускать PowerShell скрипт, который должен переподключить все недоступные сетевые диски. Если сетевые диски подключаются через групповые политики, нужно изменить настройки GPO.
PowerShell скрипт для автоматического переподключения сетевых дисков
Рассмотрим, как использовать PowerShell скрипт для автоматического переподключения сетевых дисков при входе пользователя в Windows.
Откройте блокнот (notepad.exe), скопируйте в него следующий PowerShell код и сохраните файл в каталог C:\PS с именем MapDrives.ps1:
$i=3
while($True){
$error.clear()
$MappedDrives = Get-SmbMapping |where -property Status -Value Unavailable -EQ | select LocalPath,RemotePath
foreach( $MappedDrive in $MappedDrives)
{
try {
New-SmbMapping -LocalPath $MappedDrive.LocalPath -RemotePath $MappedDrive.RemotePath -Persistent $True
} catch {
Write-Host "Ошибка подключения сетевого каталога $MappedDrive.RemotePath в диск $MappedDrive.LocalPath"
}
}
$i = $i - 1
if($error.Count -eq 0 -Or $i -eq 0) {break}
Start-Sleep -Seconds 30
}
Данный скрипт выбирает все недоступные сетевые диски и пытается их переподключить в постоянном режиме (ключ Persistent).
Создайте еще один файл сценария MapDrives.cmd с кодом:
PowerShell -Command "Set-ExecutionPolicy -Scope CurrentUser Unrestricted" >> "%TEMP%\StartupLog.txt" 2>&1
PowerShell -File "%SystemDrive%\PS\MapDrives.ps1" >> "%TEMP%\StartupLog.txt" 2>&1
Данный код позволяет корректно вызвать PowerShell скрипт, описанный выше.
Вы можете поместить файл в автозагрузку пользователя, скопировав файл MapDrives.cmd в каталог %ProgramData%\Microsoft\Windows\Start Menu\Programs\StartUp.
Также вы можете создать задание планировщика, которое дожно запускать файл MapDrives.cmd при входе пользователя в систему. Вы можете создать задание планировщика с помощью PowerShell или из графического интерфейса консоли планировщика Windows (Taskschd.msc).
Создайте новое задание, укажите его имя, выберите что задание должно запускаться от имени встроенной группы Пользователи (Builtin\Users).
На вкладке Триггеры выберите, что задание должно выполняться при входе в систему любого пользователя (At logon -> Any user).
На вкладке действие в поле Программа укажите путь к файлу MapDrives.cmd.
На вкладке Условие можно включить опцию Сеть -> Запускать только при подключении к следующей сети -> Любое подключение.
Перезайдите в систему или выполните перезагрузку компьютера. При входе пользователя должен запуститься PowerShell скрипт, которые пересоздаст все подключения к сетевым дискам.
Подключение сетевых дисков через GPO
Если вы подключаете сетевые диски пользователям с помощью доменной GPO, то для корректного переподключения дисков нужно изменить настройки политики.
Откройте политику, подключающую диски, и в разделе User Settings -> Preferences -> Windows Settings -> Drive maps найдите вашу политику (политики) назначения сетевых дисков и измените тип действия с Update на Replace.
После обновления параметров групповых политик на клиентах при входе пользователя в систему, сетевые диски будут удалены и назначены снова.
Не подключаются сетевые диски в Windows 10 2004
Проблема с подключением сетевых дисков также наблюдается в билде Windows 10 2004. Проблема возникает с сетевыми дисками, подключенных с legacy устройств с поддержкой только протокола SMBv1 (Windows XP/2003, старые NAS устройства).
Для решения этой проблемы нужно прописать в реестре пользователя для каждого подключенного сетевого диска параметр ProviderFlags =1.
Например, если у пользователя в сессии подключен сетевой диск U:, перейдите в раздел реестра HKEY_CURRENT_USER\Network\U. Создайте параметр типа DWORD с именем ProviderFlags и значением 1.
Или выполните команду:
REG ADD "HKCU\Network\U" /v "ProviderFlags" /t REG_DWORD /d "1" /f
Настроить задержку подключения сетевых дисков в Windows через GPO
Windows может пытаться переподключить сетевые диски при входе пользователя до полноценной инициализации сетевого интерфейса. Чтобы предотвратить подключение сетевых дисков до полного включения сети, вы можете включить специальный параметр групповой политики.
Вы можете настроить этот параметр через редактор локальной групповой политики (
gpedit.msc
) или из редактора доменных GPO (
gpmc.msc
). Перейдите в раздел Computer Configuration -> Administrative Templates -> System -> Logon и включите политику Always wait for the network at computer startup and logon (Всегда ожидать инициализации сети при загрузке и входе в систему).
Перезагрузите компьютер.
Также эту проблему можно решить, если просто подождать 15 секунд после загрузки компьютера (или выхода его из режима гибернации/спящего режима), прежде чем логиниться. Этого времени будет достаточно, чтобы Windows инициализировала сеть.
Отключить уведомление “Не удалось восстановить подключение ко всем сетевым дискам”
Если ваш компьютер находится не в сети предприятия (сетевые диски не доступны по определению), и вам мешает назойливое уведомление “Не удалось восстановить подключение ко всем сетевым дискам” при каждой загрузке Windows, вы можете его отключить.
Для этого в ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider нужно создать параметр типа DWORD с именем RestoreConnection и значением 0.
Многие сталкиваются с необходимостью подключать сетевые диски. Мы расскажем, как подключить сетевой диск с помощью простенького скрипта без лишних настроек системы.
Задача.
Сделать на одной машине общий сетевой диск для обмена различной внутренней информацией.
Каждый пользователь должен подключить и видеть этот сетевой диск в «Этот компьютер». На машинах стоит Windows.
Решение.
Создали папку на машине с ip 192.168.0.100, в свойствах дали права на запись\чтение\удаление всем, поставили галочку общий доступ.
Более подробнее описывать смысла думаю нет, но остановимся на подключении данного диска на компьютерах пользователей.
Для этого, было предложено решение создать bat-файл и раскидать его по почте всем заинтересованным.
В блокноте пишем строчку:
net use X: «\\192.168.0.100\ftp obmen» /yes (указали букву диска «X» и путь к диску.)
Жмем в блокноте Файл — Сохранить как — Имя файла «Подключение к общему сетевому диску.bat»
.bat — расширение файла, которое позволяет исполнить данную команду
Таким образом с помощью запуска данного файла, мы избавили «админа» от лишних движений и подключаем сетевой диск ко всем локальным компьютерам..
В Powershell реализована возможность подключать сетевые диски используя протоколы SMB/CIFS. Эта возможность использует разные команды работа с которыми может вызвать сложности. Рассмотрим применение команд на примерах.
В Powershell по умолчанию существует возможность обратиться по сетевому пути не используя сетевые диски. Например это можно сделать через команду ‘Get-ChildItem’:
Get-ChildItem -Path '\\localhost\c$'
Такой способ ограничен пользователем, который открыл консоль или запустил скрипт. Если вы запустите консоль от имени доменного администратора — то обращение к сетевому пути будет от его имени.
Возможность использовать другие учетные записи, а так же подключать сетевые диски, реализованы в 2 командах:
- New-SmbMapping — команда появилась в версии Powershell 5. Относится к модулю SmbShare, то есть создана специально для работы с SMB;
- New-PSDrive — работает с версии Powershell 3. Все командлеты типа ‘PSDrive’ относятся ко всем дискам.
Обе команды, аналогично Get-ChildItem, подключают диски под учетной записью, которая запустила консоль.
Хоть эти команды достаточно старые, в каждой из новых версий Powershell находятся ошибки и баги. На момент написания статьи баги были найдены в версиях 5.1 — 7.1 и все они касались процесса подключения.
Основной момент, который упростит работу с сетевыми папками в Powershell кроется в понимании понятии провайдеров. Создавая сетевой диск обычными средствами Windows вы сразу видите результат в проводнике. Делая то же самое в Powershell вы изначально обращаетесь к провайдеру услуг, а он обращается к Windows. В зависимости от указанных вами параметров и возможностью команды у вас может быть создан диск только в рамках этого провайдера либо в рамках провайдера и области Windows.
Если это сложно понять, то представьте, что среда Windows и Powershell это разные вещи и что бы скопировать файл с одного места на другое — нужно использовать дополнительный параметр, которого может и не быть.
Получение списка сетевых дисков и их удаление
Мы можем получить список сетевых дисков используя обе команды модуля:
Get-PSDrive
Get-SmbMapping
Отличия, которые видны на первый взгляд в том, что во втором случае мы возвращаем список дисков подключение к которым не восстановилось. Кроме этого ‘Get-SmbMapping’ хранит больше информации о дисках, если вывести их все:
Get-PSDrive -Name 'G' | select *
Get-SmbMapping -LocalPath 'G:' | select *
Мы можем вывести учетную запись, под которой подключена сетевая папка, следующим образом:
(Get-PSDrive -Name 'G').Credential
Команды удаления отличаются только наличием параметра ‘UpdateProfile’. Если он присутствует в команде ‘Remove-SMBMapping’, то диск не будет восстанавливать соединение после перезагрузки компьютера. В случае с Remove-PSDrive это предусмотрено автоматически:
Remove-SmbMapping -LocalPath 'G:' -UpdateProfile -Force
Remove-PSDrive -Name 'J' -Force
Force удаляет подключение без подтверждения.
Подключение сетевых дисков
Проблемы с командами могут зависеть от версии вашего интерпретатора. Powershell 5-ой версии был предустановлен во всех версиях начиная с Windows 10 и Windows Server 2016. Если вы сомневаетесь в версии, то это можно проверить следующей командой:
$PSVersionTable
# или
host
New-SmbMapping
Самый простой способ подключить диски, используя команду New-SmbMapping, будет выглядеть следующим способом:
New-SmbMapping -LocalPath 'J:' -RemotePath '\\192.168.2.200\SharedFolder' -Persistent $true
В этой команде используются следующие ключи:
- LocalPath — локальный путь или буква, под которой будет подключен диск;
- RemotePath — путь к папке через IP или DNS. В случае выше подразумевается, что у пользователя, который открыл консоль Powershell, есть права для подключения к этому пути. Важно так же обратить внимание на кавычки, если ваш путь содержит специальные символы;
- Persistent — дословно переводится как ‘постоянный’, но в случае сетевых папок обозначает восстановление соединения после отключения сети/компьютера.
Пример выше специально демонстрирует проводник так как это одна из проблем этой команды в версии 5.1 — диск начнет отображаться в проводнике только после перезагрузки компьютера или перезапуске процесса ‘explorer.exe’.
Мы можем перезапустить процесс средствами Powershell. Выполнение этой команды, как минимум, закроет все открытые окна:
Stop-Process -Name 'explorer' | Start-Process -FilePath 'C:\Windows\explorer.exe'
Так же у вас могут появиться другие ошибки, например следующие говорят об уже занятой букве:
- New-SmbMapping : Имя локального устройства уже используется.
- New-SmbMapping : The local device name is already in use.
Следующая ошибка произойдет, если вы указали слэш ‘\’ в конце пути или к нему нет доступа на уровне сети (фаерволла, dns, политик и т.д.):
- New-SmbMapping : The network name cannot be found.
New-PSDrive
В отличие от предыдущего способа — у него нет проблем с проводником, но после перезагрузки компьютера подключение к диску пропадет. Как я прочитал в каких-то версиях Powershell это исправлено, в каких-то появились новые проблем. Один из способов сделать диск постоянным — будет рассмотрен ниже.
Подключить аналогичный диск можно следующим способом:
New-PSDrive -Name 'G' -PSProvider 'FileSystem' -Root '\\192.168.2.200\SharedFolder' -Persist -Scope 'Global'
Где:
- Name — путь, буква или любой другой идентификатор определяющий диск. Чаще всего это просто буква;
- PSProvider — поставщик услуг. Всех поставщиков услуг можно увидеть через ‘Get-PSProvider’. В большинстве случаев поставщиком услуг для сетевых дисков будет ‘FileSystem’. В теории вы можете использовать поставщика «Registry» что бы в рамках сессии Powershell легче обращаться к какому-то пути. Поставщик услуг или ‘PSProvider’ — это условная программа, которая будет обрабатывать вашу команду между Powershell и Windows;
- Root — путь до удаленной папки. Если бы в ‘PSProvider’ стоял ‘Registry’, то тут можно было указать путь следующего формата: ‘HKLM:\Software\Microsoft’;
- Persist — должно ли восстанавливаться подключение при потере связи;
- Scope — область действия диска. В этом случае не должно играть значение, но на форумах советуют использовать значение ‘Global’, если не получается подключать диск. Если бы вы использовали сетевой диск только для одно сессии Powershell — вы могли бы ограничить область видимости диска.
У вас могут появиться следующие ошибки:
- New-PSDrive : The network resource type is not correct;
- The specified network resource or device is no longer available.
Один из способов решения — убрать слэш в конце пути. Так же попробуйте открыть полный путь в проводнике так как ошибка может указывать на недоступность папки. Так же можете попробовать убрать параметр ‘Persist’, т.к. после этого ошибка может изменится и принять более понятный характер.
Рабочий способ сделать этот диск постоянным — отредактировать его через реестр. Ветка, под которой был подключен диск, будет иметь следующий путь »HKCU:\Network\G». «G» в конце — это буква под который был подключен диск. Мы можем вернуть существующие значения следующей командой:
Get-ItemProperty -Path 'HKCU:\Network\G'
Вам нужно обратить внимание на выделенные фрагменты. ‘DeferFlags’, в значении 4, обозначает, что диск подключается под логином и паролем аутентифицированного пользователя. 1-ца говорит об обратном и, возможно, что пароль не указан. На одном из форумов писали, что это поле должно указывать на цифру 4 что бы команда успешно работала. Я наблюдал случаи с 1 и 4, но проблем не замечал.
Моя проблема была решена после указания 1 в поле ‘ConnectionType’. Значение 1 говорит, что будет выполняться перенаправление дисков. Установить это значение через Powershell можно так:
Set-ItemProperty -Path 'HKCU:\Network\G' -Name 'ConnectionType' -Value 1
Подключение дисков под другим пользователем
Обе команды позволяют выполнять подключение используя других пользователей. Для каждой из команд этот подход отличается.
В случае команды ‘New-PSDrive’ вам нужно будет выполнить ‘Get-Credential’ и поместить в него учетные данные. Традиционный способ поместить эти данные в переменную:
$сred = Get-Credential
Эта переменная будет хранить ссылку на объект в памяти, который нельзя будет экспортировать на другой компьютер. Как упростить процесс, если вы планируете использовать учетные данные на разных компьютерах, рассмотрено в другой статье.
После этого мы передаем переменную в параметр ‘-Credential’:
New-PSDrive -Credential $cred -Name 'G' -PSProvider 'FileSystem' -Root '\\192.168.2.200\SharedFolder' -Persist -Scope 'Global'
В случае с ‘New-SMBMapping’ эта операция выполняется проще. У вас есть 3 параметра, которые нужно заполнить:
- UserName — логин;
- Password — пароль;
- SaveCredential — нужно ли сохранять учетные данные.
Пример подключения с сохранением учетных данных:
$password = '123'
$username = 'admin@domain.local'
New-SmbMapping -Username $username -Password $password `
-LocalPath 'J:' -RemotePath '\\192.168.2.200\SharedFolder' `
-Persistent $true -SaveCredentials
Проблема, которую не получилось решить на разных версиях Powershell, связана с параметром ‘-SaveCredentials’. Его указание приводит к ошибке «New-SmbMapping : The parameter is incorrect.«. Его отсутствие — не сохраняет введенные учетные данные и после перезагрузки связь с диском может пропасть если не добавить соответствующую запись в ‘Credential Manager’.
Подключение дисков удаленно
Каждая из команд может выполняется удаленно. У команды ‘New-SMBMapping’ для этого есть встроенный параметр ‘CimSession’. В случае обоих подходов можно использовать команды из модуля PSRemoting, например ‘Invoke-Command’. Нужно отметить, что сетевые папки в Powershell всегда подключаются под тем пользователем, под которым была запущена консоль или скрипт. Если вы были аутентифицированы под пользователем ‘alex’ и открыли консоль Powershell, то диски будут подключены пользователю ‘alex’. Кроме этого, для каждой команды у вас должен быть запущен WinRM и установлены настройки в TrustedHost.
Пример команды, которая подключит диск у пользователя:
# Вводим логин и пароль пользователя
# который имеет право подключаться к удаленному компьютеру
$cred = Get-Credential
# Устанавливаем сессию с удаленным компьютером
$session = New-CimSession -Credential $cred -ComputerName 192.168.2.111
# Через созданную сессию подключаем сетевой диск
New-SmbMapping -LocalPath S: -RemotePath "\\192.168.2.200\admin2" -CimSession $session
Для обеих команд подойдет следующий способ:
# Вводим логин и пароль пользователя
# который имеет право подключаться к удаленному компьютеру
$cred = Get-Credential
# Используем учетные данные для выполнения команды
Invoke-Command -ComputerName '192.168.2.111' -Credential $cred -ScriptBlock {
New-PSDrive -Name 'G' -PSProvider 'FileSystem' -Root '\\192.168.2.200\SharedFolder' -Persist -Scope 'Global'
}
…
Теги:
#powershell