-
Notifications
You must be signed in to change notification settings - Fork 221
Expand file tree
/
Copy pathGet-RsRestItemDataSource.ps1
More file actions
117 lines (95 loc) · 4.31 KB
/
Get-RsRestItemDataSource.ps1
File metadata and controls
117 lines (95 loc) · 4.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
117
# Copyright (c) 2017 Microsoft Corporation. All Rights Reserved.
# Licensed under the MIT License (MIT)
function Get-RsRestItemDataSource
{
<#
.SYNOPSIS
This script fetches data sources related to a catalog item from the Report Server
.DESCRIPTION
This script fetches data sources related to a catalog item from the Report Server
.PARAMETER RsItem
Specify the location of the catalog item whose data sources should be fetched.
.PARAMETER ReportPortalUri
Specify the Report Portal URL to your SQL Server Reporting Services Instance.
.PARAMETER RestApiVersion
Specify the version of REST Endpoint to use. Valid values are: "v2.0".
.PARAMETER Credential
Specify the credentials to use when connecting to the Report Server.
.PARAMETER WebSession
Specify the session to be used when making calls to REST Endpoint.
.EXAMPLE
Get-RsRestItemDataSource -RsItem "/MyReport"
Description
-----------
Fetches item information (including data sources) associated to "MyReport" catalog item found in "/" folder from the Report Server located at http://localhost/reports.
.EXAMPLE
Get-RsRestItemDataSource -RsItem "/MyReport" -WebSession $session
Description
-----------
Fetches item information (including data sources) associated to "MyReport" catalog item found in "/" folder from the Report Server located at specificed WebSession object.
.EXAMPLE
Get-RsRestItemDataSource -RsItem "/MyReport" -ReportPortalUri http://myserver/reports
Description
-----------
Fetches item information (including data sources) associated to "MyReport" catalog item found in "/" folder from the Report Server located at http://myserver/reports.
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $True)]
[Alias('ItemPath','Path')]
[string]
$RsItem,
[string]
$ReportPortalUri,
[Alias('ApiVersion')]
[ValidateSet("v2.0")]
[string]
$RestApiVersion = "v2.0",
[Alias('ReportServerCredentials')]
[System.Management.Automation.PSCredential]
$Credential,
[Microsoft.PowerShell.Commands.WebRequestSession]
$WebSession
)
Begin
{
$WebSession = New-RsRestSessionHelper -BoundParameters $PSBoundParameters
$ReportPortalUri = Get-RsPortalUriHelper -WebSession $WebSession
$catalogItemsUri = $ReportPortalUri + "api/$RestApiVersion/CatalogItems(Path='{0}')"
$dataSourcesUri = $ReportPortalUri + "api/$RestApiVersion/{0}(Path='{1}')?`$expand=DataSources"
}
Process
{
try
{
Write-Verbose "Fetching metadata for $RsItem..."
$catalogItemsUri = [String]::Format($catalogItemsUri, $RsItem)
if ($Credential -ne $null)
{
$response = Invoke-WebRequest -Uri $catalogItemsUri -Method Get -WebSession $WebSession -Credential $Credential -Verbose:$false -UseBasicParsing
}
else
{
$response = Invoke-WebRequest -Uri $catalogItemsUri -Method Get -WebSession $WebSession -UseDefaultCredentials -Verbose:$false -UseBasicParsing
}
$item = ConvertFrom-Json $response.Content
$itemType = $item.Type
Write-Verbose "Fetching data sources for $RsItem..."
$dataSourcesUri = [String]::Format($dataSourcesUri, $itemType + "s", $RsItem)
if ($Credential -ne $null)
{
$response = Invoke-WebRequest -Uri $dataSourcesUri -Method Get -WebSession $WebSession -Credential $Credential -Verbose:$false -UseBasicParsing
}
else
{
$response = Invoke-WebRequest -Uri $dataSourcesUri -Method Get -WebSession $WebSession -UseDefaultCredentials -Verbose:$false -UseBasicParsing
}
$itemWithDataSources = ConvertFrom-Json $response.Content
return $itemWithDataSources.DataSources
}
catch
{
throw (New-Object System.Exception("Failed to get data sources for '$RsItem': $($_.Exception.Message)", $_.Exception))
}
}
}