dimayakovlev.ru


Подключение Яндекс.Диска в качестве сетевого диска при помощи PowerShell

Благодаря поддержке сервисом Яндекс.Диск протокола WebDAV, пользователь может не устанавливать официальный клиент Яндекс.Диска, а, если используемая операционная система предоставляет такую возможность, подключить его как сетевой диск. В Microsoft Windows сетевой диск подключается через графический пользовательский интерфейс Windows Explorer (File Explorer в Microsoft Windows 10) в несколько кликов. Тем не менее существуют сценарии, когда эта задача должна быть автоматизирована. Здесь на помощь пользователю приходит PowerShell.

Предлагаю рассмотреть два варианта автоматизации создания сетевого диска, ссылающегося на Яндекс.Диск, но сначала следует ознакомиться с официальной инструкцией “Доступ к Диску через WebDAV”, чтобы понимать механизм работы.

Использование командлета New-PSDrive

Это самый очевидный способ, так как командлет New-PSDrive предназначен для создания временных и постоянных сетевых дисков. На странице справки описаны параметры, принимаемые командлетом. Так параметр -Root командлета New-PSDrive принимает расположение (путь) хранилища данных, с которым сопоставлен создаваемый сетевой диск. Для подключения Яндекс.Диска передаётся путь в формате UNC.

# Имя пользователя Яндекс.Диска, совпадает с адресом электронной почты
$user = ''
# Пароль пользователя Яндекс.Диска, совпадает с паролем электронной почты
$passwd = ''
# Имя диска, одна буква
$disk = 'Y'

$passwd = ConvertTo-SecureString $passwd -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential($user, $passwd)
$root = '\\webdav.yandex.ru@SSL\DavWWWRoot'

New-PSDrive -Name $disk -PSProvider "FileSystem" -Root $root -Credential $creds

В приведённом примере командлет New-PSDrive создаёт временный сетевой диск, доступный только внутри сессии PowerShell. Это значит, что сетевой диск не будет доступен через File Explorer, Windows Management Instrumentation (WMI), Component Object Model (COM), Microsoft .NET Framework или другие инструменты, например, Net Use.

Начиная с версии PowerShell 3.0 командлет New-PSDrive принимает параметр -Persist, позволяющий создавать постоянные сетевые диски. Однако использование параметра -Persist при подключении Яндекс.Диска вызывает ошибку: New-PSDrive : The network resource type is not correct. Поэтому рекомендую этот метод подключения Яндекс.Диска при автоматизации задач, выполняемых в одной сессии PowerShell.

Использование COM-объекта WScript.Network

# Имя пользователя Яндекс.Диска, совпадает с адресом электронной почты
$user = ''
# Пароль пользователя Яндекс.Диска, совпадает с паролем электронной почты
$passwd = ''
# Имя диска, буква с двоеточием
$disk = 'Y:'

$root = 'https://webdav.yandex.ru'
$net = New-Object -ComObject WScript.Network
$net.MapNetworkDrive($disk, $root, $false, $user, $passwd)

Этот метод лишён ограничений предыдущего и подходит для создания сетевого диска, доступного за пределами сесии PowerShell.

В обоих примерах рассматривалось создание сетевого диска, указывающего на корень Яндекс.Диска, однако возможно подключение в качестве сетевого диска директории в Яндекс.Диске. Для этого изменяется значение переменной $root из первого примера. Так если в корне Яндекс.Диска создана директория Music, чтобы подключить эту директорию как сетевой диск, используется следующий путь: $root='\\webdav.yandex.ru@SSL\DavWWWRoot\Music'. Теперь сетевой диск будет указывать на директорию Music в Яндекс.Диске.

Знание вариантов использование Яндекс.Диска в сценариях автоматизации PowerShell расширяет возможности по управлению данными, хранящимися в облаке Яндекс.