-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupload.ps1
99 lines (90 loc) · 3.45 KB
/
upload.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Param(
[Parameter(Mandatory=$true,
ValueFromPipeline=$true)]
[string]
$myHost,
[Parameter(Mandatory=$true,
ValueFromPipeline=$true)]
[string]
$domain,
[Parameter(Mandatory=$true,
ValueFromPipeline=$true)]
[string[]]
$users
)
. .\connect.ps1
###########################################################################
# Inspired by
#Author: Adnan Amin
#blog: Https://mstechtalk.com
#Downloading files from OneDrive to local machine
###########################################################################
function ProcessFolder($folderUrl, $sourceFolder, $isOneNote) {
$folder = Get-PnPFolder -RelativeUrl $folderUrl
if (-not (Test-Path -path $sourceFolder)) {
return
}
$existingFiles = Get-PnPProperty -ClientObject $folder -Property Files
Get-ChildItem $sourceFolder -File | ForEach-Object {
$file = $_
if (-not($existingFiles | Where-Object -Property Name -eq $file.Name))
{
Write-Host "Copying file " $file.Name " at " $folder.ServerRelativeUrl
[void](Add-PnPFile -Path $file.FullName -Folder $folder)
}
}
if ($isOneNote) {
$item = Get-PnPProperty -ClientObject $folder -Property ListItemAllFields
[void](Get-PnPProperty -ClientObject $item -Property parentList)
[void](set-pnplistitem -list $item.parentList -identity $item -values @{"HTML_x0020_File_x0020_Type"="OneNote.Notebook"})
}
}
function EnsureSubFolders($parentFolder, $currentPath, $subFolderNames) {
$subFolderNames | ForEach-Object {
$subFolderName = $_
if ($subFolderName) {
if (-not ($parentFolder.Folders | Where-Object -Property Name -eq $subFolderName)) {
$parent = $parentFolder.ServerRelativeUrl
Write-Host "Creating $subFolderName in $parent"
[void](Add-PnPFolder -Folder $parentFolder -Name $subFolderName)
}
}
}
}
function ProcessSubFolders($folder, $folders, $currentPath, $onenotes) {
foreach ($folder in $folders) {
[void](Get-PnPProperty -ClientObject $folder -Property ServerRelativeUrl)
#Avoid Forms folders
if ($folder.Name -ne "Forms") {
write-host "Processing folder: ${folder.Name} .. at $currentPath"
$sourceFolder = Join-Path $currentPath $folder.Name;
ProcessFolder $folder.ServerRelativeUrl.Substring($web.ServerRelativeUrl.Length) $sourceFolder $onenotes.Contains($sourceFolder)
$tempfolders = Get-PnPProperty -ClientObject $folder -Property Folders
$subFolderNames = Get-ChildItem $sourceFolder -Directory | Select-Object -ExpandProperty Name
EnsureSubFolders $folder $currentPath $subFolderNames
$tempfolders = Get-PnPProperty -ClientObject $folder -Property Folders
ProcessSubFolders $web $tempfolders $sourceFolder $onenotes
}
}
}
function Upload($user) {
Connect $user
$web = Get-PnPWeb -ErrorAction Ignore
if (-not $web) {
Write-Error "Could not get site for $user"
return
}
if (-not (Test-Path $user -PathType container)) {
Write-Error "No folder for $user"
return
}
$list = Get-PNPList -Identity "Documents"
$onenotes = Get-Content (Join-Path $user 'OneNotes.txt') -ErrorAction Ignore
if (-not $onenotes) {
$onenotes = @{}
}
ProcessSubFolders $web $list.RootFolder $user $onenotes
}
$users | ForEach-Object {
Upload $_
}