forked from OfficeDev/Project-REST-Basic-Operations
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreateproject.ps1
More file actions
116 lines (97 loc) · 3.31 KB
/
Copy pathcreateproject.ps1
File metadata and controls
116 lines (97 loc) · 3.31 KB
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<#
Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
See LICENSE in the project root for license information.
#>
# Creates a Project using ReST API
param
(
# SharepointOnline project site collection URL
$SiteUrl = $(throw "SiteUrl parameter is required")
)
# Load ReST helper methods
. .\ReST.ps1
# Set up the request authentication
Set-SPOAuthenticationTicket $siteUrl
Set-DigestValue $siteUrl
# Project parameters as JSON payload
$projectid = [Guid]::NewGuid()
$body = "{
'parameters': {
'Id': '$projectid',
'Name': 'Project_$projectid',
'Description': 'Created from PowerShell using REST API'
}
}"
# ReST request to create a project
Post-ReSTRequest $SiteUrl "ProjectServer/Projects/Add" $body
# Wait till new project is finally ready in SharepointOnline.
While ($true)
{
Start-Sleep -Seconds 1
Write-Host "Querying new project's readiness"
$result = Get-ReSTRequest $SiteUrl "ProjectServer/Projects('$projectid')"
if ($result)
{
Write-Host "Project is ready"
break;
}
}
# ReST request to check out the project
Post-ReSTRequest $SiteUrl "ProjectServer/Projects('$projectid')/checkOut" $null
# Task parameters as JSON payload
$taskid = [Guid]::NewGuid()
$body = "{
'parameters': {
'Id': '$taskid',
'Name': 'Task_$taskid',
'Notes': 'Created from PowerShell using REST API',
'Start': '2016-01-04T08:00:00',
'Duration': '5d'
}
}"
# ReST request to create a task
Post-ReSTRequest $SiteUrl "ProjectServer/Projects('$projectid')/Draft/Tasks/Add" $body
# Resource parameters as JSON payload
$resourceid = [Guid]::NewGuid()
$body = "{
'parameters': {
'Id': '$resourceid',
'Name': 'Resource_$resourceid'
}
}"
# ReST request to create a local resource
Post-ReSTRequest $SiteUrl "ProjectServer/Projects('$projectid')/Draft/ProjectResources/Add" $body
# Enterprise resource parameters as JSON payload
$enterprise_resourceid = [Guid]::NewGuid()
$body = "{
'parameters': {
'Id': '$enterprise_resourceid',
'Name': 'EnterpriseResource_$enterprise_resourceid'
}
}"
# ReST request to create an enterprise resource
Post-ReSTRequest $SiteUrl "ProjectServer/EnterpriseResources/Add" $body
# ReST request to add an enterprise resource to the project team
Post-ReSTRequest $SiteUrl "ProjectServer/Projects('$projectid')/Draft/ProjectResources/AddEnterpriseResourceById('$enterprise_resourceid')"
# Assignment parameters as JSON payload
$body = "{
'parameters': {
'ResourceId': '$resourceid',
'TaskId': '$taskid',
'Notes': 'Created from PowerShell using REST API'
}
}"
# ReST request to create an assignment for the local resource
Post-ReSTRequest $SiteUrl "ProjectServer/Projects('$projectid')/Draft/Assignments/Add" $body
# Assignment parameters as JSON payload
$body = "{
'parameters': {
'ResourceId': '$enterprise_resourceid',
'TaskId': '$taskid',
'Notes': 'Created from PowerShell using REST API'
}
}"
# ReST request to create an assignment for the enterprise resource
Post-ReSTRequest $SiteUrl "ProjectServer/Projects('$projectid')/Draft/Assignments/Add" $body
# ReST request to publish and check-in the project
Post-ReSTRequest $SiteUrl "ProjectServer/Projects('$projectid')/Draft/publish(true)" $null