Назад | Перейти на главную страницу

Сопоставление сетевого диска с сервером WebDAV через PowerShell

Моя цель - подключить сетевой диск в Windows к серверу WebDAV через PowerShell.

У меня есть сценарий, который автоматически создает виртуальную машину Azure с установленным IIS и настроенным WebDAV. Я могу вручную подключить сетевой диск через проводник Windows к серверу WebDAV (используя возможность использовать другие учетные данные). Это подтверждает, что сервер WebDAV настроен правильно. Я тоже умею читать и писать файлы.

С помощью PowerShell я попытался использовать команду New-PSDrive и, как видите, получил ошибки.

New-PSDrive –Name $networkDrive –PSProvider FileSystem –Root "http://$serviceName.cloudapp.net/" –Persist
New-PSDrive : When you use the Persist parameter, the root must be a file system location on a remote computer.
At line:1 char:1
+ New-PSDrive –Name $networkDrive –PSProvider FileSystem –Root "http:// ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (Z:PSDriveInfo) [New-PSDrive], NotSupportedException
    + FullyQualifiedErrorId : DriveRootNotNetworkPath,Microsoft.PowerShell.Commands.NewPSDriveCommand

ИЛИ без параметра -Persist

New-PSDrive –Name $networkDrive –PSProvider FileSystem –Root "http://$serviceName.cloudapp.net/"
New-PSDrive : The specified drive root "http://webdavservertest3.cloudapp.net/" either does not exist, or it is not 
a folder.
At line:1 char:1
+ New-PSDrive –Name $networkDrive –PSProvider FileSystem –Root "http:// ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ReadError: (Z:PSDriveInfo) [New-PSDrive], IOException
    + FullyQualifiedErrorId : DriveRootError,Microsoft.PowerShell.Commands.NewPSDriveCommand

Как видно термин "http://$serviceName.cloudapp.net/" успешно оценивается "http://webdavservertest3.cloudapp.net/".

Итак, это правильный подход? Должен ли New-PSDrive иметь возможность отображать на серверы WebDAV? Если нет, есть идея подключить сетевой диск через PowerShell?

Вот рабочий пример того, как я монтирую сайт Sysinternals WebDAV на свой диск S::

[String]$WebDAVShare = '\\live.sysinternals.com\Tools'
New-PSDrive -Name S -PSProvider FileSystem -Root $WebDAVShare

Обратите внимание, что вам нужно использовать формат UNC, а не http:// префикс.

Также вам необходимо убедиться, что на вашем компьютере запущена служба WebClient.

Если вы хотите подтвердить, что сервер поддерживает WebDAV, вы можете сделать:

(Invoke-WebRequest http://live.sysinternals.com -Method Options).Headers.DAV  

И если это вернет что-то вроде 1,2,3 то сервер поддерживает различные версии WebDAV. (Хотя администратор сервера мог запретить использование команды Options.)

New-PSDrive -Name F -PSProvider FileSystem -Root "\\\\$FQDN_without_https@SSL/$URI_or_PathTo" -Credential <Username>

Обратите внимание на @SSL после FQDN.

Это работает для PowerShell 5.0.

Мне не удалось заставить метод New-PSDrive подключиться к моему сайту https. Я использовал команду dos в PowerShell, завернутую в тест, чтобы увидеть, существует ли диск.

net use B: https://tu13.DEG3.usae.com/BAD/code /Persistent:Yes

Я понимаю, что это не идеальный подход, основанный на OP, но я подумал, что работа стоит того.

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

Эта строка подключения позволяет мне монтировать и использовать библиотеку Sharepoint в качестве буквы диска:

function Map-SharePoint
        {
        $cred = Get-Credential "email@address.com"
        New-PSDrive -Name U -PSProvider FileSystem -Root "\\organisation.sharepoint.com@SSL\DavWWWRoot\Shared Documents" -Credential $cred
        }

Замечание о пути, это не сработает, если ваш патч содержит% 20 для пробелов. Вам нужно оставить как есть и заключить в кавычки.