среда, 18 ноября 2020 г.

 

Как связать 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

Отсылка Email ( Помним что нормально отсылка емайл работает только Sharepoint workflow 2010 )

 Снимок.PNG

в форме запуска рабочего процесса переменную запрашиваем

Снимок1.PNG 

3 Создаем

новый WorkFlow уже Sharepoint workflow 2013 ( если нет в выборе 2013 то добро пожаловат в приключение по установке Sharepoint workflow 2013 )

Снимок2.PNG 

4

Выбираем действие Call HTTP Web Service метод POST

Снимок3.PNG

URL подстановка следующая все меняем под себя с умом

 

Снимок4.PNG

Тут DocLib это та библиотека где лежат файлы которые нужно послать

 

5

Добавляем следующее действие

Start site WorkFlow

вызываем WorkFlow отправку письма и передаем в него новую переменную рабочего процесса

Снимок5.PNG 

После этих манипуляций

На файл в Sharepoint натравливаем Workflow Копирование файла для YandexDisk

 

Снимок6.PNG

Файл скопируется во временную библиотеку 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мин

ВСЕ

Комментариев нет:

Отправить комментарий

Установка SharepPoint Framework для Sharepoint Server 2019 on premises

 На 07.11.2022 Работающая конфигурация следующая  Node.js LTS v8  (specifically,  Node.js v8.17.0  ) Gulp-CLI v2.3.0 Yeoman generator for th...