Как связать Sharepoint с Yandex.Disk
А задача следующая.
Имеется ферма on-premise Sharepoint и пользователи хотели бы делиться некоторыми файлами размещенными в библиотеках Sharepoint со сторонними пользователями не имеющими логина в компании ( всякие субчики + заказчики ) -т.е. посылать файл на публичный яндекс диск и чтобы стороннему пользователю приходила ссылка
План следующий
-на файле в Sharepoint запускаем workflow который переносит файл во временную выделенную библиотеку назовем ее YandexDisk и отсылает получателю письмо с сылкой на заранее созданный общедоступный yandex диск типа https://yadi.sk/d/L0xD61uCpY2w
- на сервере запускается скрипт который забирает из библиотеки Sharepoint YandexDisk все файлы и кладет их на yandex диск типа https://yadi.sk/d/L0xD61uCpY2w. По завершении копирования очищает библиотеку Sharepoint YandexDisk
Реализуем ( чесно говоря можно было и лучше все сделать - сейчас я уже вижу что улучшить -но времени этим заниматься нет )
подготовка
-регистрируем на Яндекс
- получаем яндекс диск , берем ссылку на общедоступную папку в яндекс диске вида https://yadi.sk/d/L0xD61uCpY2w ее мы будем слать в письме
- создаем в Sharepoint перевалочную библиотеку YandexDisk
-Устанавливаем Sharepoint Designer
Понеслась
Подключаемся в Sharepoint Designer и создаем WorkFlow
1 Отсылка Email ( Помним что нормально отсылка емайл работает только Sharepoint workflow 2010 )
2 в форме запуска рабочего процесса переменную запрашиваем
3 Создаем
новый WorkFlow уже Sharepoint workflow 2013 ( если нет в выборе 2013 то добро пожаловат в приключение по установке Sharepoint workflow 2013 )
4
Выбираем действие Call HTTP Web Service метод POST
URL подстановка следующая все меняем под себя с умом
Тут DocLib это та библиотека где лежат файлы которые нужно послать
5
Добавляем следующее действие
Start site WorkFlow
вызываем WorkFlow отправку письма и передаем в него новую переменную рабочего процесса
После этих манипуляций
На файл в Sharepoint натравливаем Workflow Копирование файла для YandexDisk
Файл скопируется во временную библиотеку YandexDisk
Осталось дело за мылым скопировать файл из Sharepoint в yandex disk и удалить файл из временной папки
Web Dav
Установить webdav клиент и добавить диск Z от яндекс диск
На сервере win 2019 по умолчанию нет клиента WebDav Устанавливаем его
Install-WindowsFeature WebDAV-Redirector –Restart
Иногда нужно подправить в реестре
HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters.
BasicAuthLevel на 2
и подключаем сетевой диск
6 Следующий скрипт монтируе Яндекс диск wev dav-ом, кладет файлы прямо в подмонтированный диск из sharepoint библиотеки , удаляет временные файлы.
( Думаем меняем под себя )
CopyTOYandexDisk.ps1
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
#Монтируем диск
# Имя пользователя Яндекс.Диска, совпадает с адресом электронной почты
$user = ''
# Пароль пользователя Яндекс.Диска, совпадает с паролем электронной почты
$passwd = ''
# Имя диска, буква с двоеточием
$disk = 'Z:'
$root = 'https://webdav.yandex.ru'
$net = New-Object -ComObject WScript.Network
$net.MapNetworkDrive($disk, $root, $false, $user, $passwd)
#Копируем в yandex disk
$s = Get-SPWeb https://.............URL Сайта
$files = $s.GetFolder("YandexDisk").Files
foreach ($file in $files) {
Write-host $file.Name
$b = $file.OpenBinary()
$fs = New-Object System.IO.FileStream(("Z:\Общий доступ\"+$file.Name), [System.IO.FileMode]::Create)
$bw = New-Object System.IO.BinaryWriter($fs)
$bw.Write($b)
$bw.Close()
}
#remove all items in temp list "yandex"
$SITEURL = "https://.............URL Сайта "
$site = new-object Microsoft.SharePoint.SPSite ( $SITEURL )
$web = $site.OpenWeb()
"Web is : " + $web.Title
# Enter name of the List below
$oList = $web.Lists["YandexDisk"];
"List is :" + $oList.Title + " with item count " + $oList.ItemCount
$collListItems = $oList.Items;
$count = $collListItems.Count – 1
for($intIndex = $count; $intIndex -gt -1; $intIndex--)
{
"Deleting : " + $intIndex
$collListItems.Delete($intIndex);
}
7
делаем Copy.cmd
в нем пишем
powershell.exe C:\SharepointScripts\SendToYandexDisk.ps1
И в шедулер его каждые 10мин
ВСЕ