Repository navigation
Expand file tree
/
Copy pathGet-AzureDataSet.ps1
More file actions
165 lines (154 loc) · 13.8 KB
/
Copy pathGet-AzureDataSet.ps1
File metadata and controls
165 lines (154 loc) · 13.8 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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#REQUIRES -Version 5 -Modules @{ModuleName='Avanade.AzureAD';ModuleVersion="1.1.1"},AzureADReports,AzureReports
using module AzureReports
using module AzureADReports
[CmdletBinding(ConfirmImpact='None',DefaultParameterSetName='Credential')]
param
(
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[String]
$ClientId='1950a258-227b-4e31-a9cf-717495945fc2',
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[String]
$TenantId='common',
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[String[]]
$GraphTenants='myOrganization',
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[System.Uri]
$ArmResourceUri='https://management.core.windows.net',
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[System.Uri]
$GraphResourceUri="https://graph.windows.net",
[Parameter(Mandatory=$true,ParameterSetName='Credential')]
[PSCredential]
$Credential,
[Parameter(Mandatory=$true,ParameterSetName='Username')]
[String]
$Username,
[Parameter(Mandatory=$true,ParameterSetName='Username')]
[SecureString]
$Password,
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[datetime]
$End=[DateTime]::UtcNow.Date,
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[datetime]
$Start=[DateTime]::UtcNow.Date.AddDays(-30),
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[String]
$OfferId="0003P",
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[String]
$Region="US",
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[String]
$Locale="en-US",
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[String]
$MetricAggregationType="Average",
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[String]
$MetricGranularity='PT1H',
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[String]
$UsageGranularity='Daily',
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[Switch]
$Usage,
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[Switch]
$Metrics,
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[Switch]
$InstanceData,
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[ScriptBlock]
$SubscriptionFilter={$_.DisplayName -ne 'Access To Azure Active Directory'},
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[Switch]
$TenantEvents,
[Parameter(Mandatory=$false,ParameterSetName='Username')]
[Parameter(Mandatory=$false,ParameterSetName='Credential')]
[Switch]
$OAuthPermissionGrants
)
if($TenantEvents.IsPresent -or $OAuthPermissionGrants.isPresent -and $GraphTenants -eq 'myOrganization')
{
throw "I apologize. You must specify a tenant id to gather usage"
}
if($PSCmdlet.ParameterSetName -ne 'Credential')
{
$Credential=New-Object PSCredential($UserName,$Password)
}
$ArmConnection=New-Object PSObject -Property @{
ClientId=$ClientId;
TenantId=$TenantId;
Resource=$ArmResourceUri.AbsoluteUri;
Credential=$Credential;
}
$GraphConnection=New-Object PSObject -Property @{
ClientId=$ClientId;
TenantId=$TenantId;
Resource=$GraphResourceUri.AbsoluteUri;
Credential=$Credential;
}
$GraphToken=Get-AzureADUserToken -ConnectionDetails $GraphConnection
$ArmToken=Get-AzureADUserToken -ConnectionDetails $ArmConnection
#Subscriptions
[SubscriptionInstance[]]$Subscriptions=Get-ArmSubscription -AccessToken $ArmToken.access_token|Where-Object -FilterScript $SubscriptionFilter
[SubscriptionSummary[]]$SubscriptionSummaries=$Subscriptions|Get-SubscriptionSummary -AccessToken $ArmToken.access_token -OfferId $OfferId `
-Start $Start -End $End -Region $Region -Locale $Locale `
-AggregationType $MetricAggregationType -MetricGranularity $MetricGranularity -UsageGranularity $UsageGranularity `
-InstanceData:$InstanceData.IsPresent `
-Usage:$Usage.IsPresent -Metrics:$Metrics.IsPresent
#AD Graph
[TenantSummary[]]$TenantSummary=Get-TenantSummary -TenantId $GraphTenants -AccessToken $GraphToken.access_token `
-Start $Start -End $End `
-Events:$TenantEvents.IsPresent `
-OAuthPermissionGrants:$OAuthPermissionGrants
$ReportData=@{
RateCards=($SubscriptionSummaries|Export-SubscriptionRateCard);
EventLogs=($SubscriptionSummaries|Export-SubscriptionEventlog);
AdvisorRecommendations=($SubscriptionSummaries|Export-SubscriptionRecommendations);
Resources=($SubscriptionSummaries|Export-SubscriptionResources);
ResourceLocks=($SubscriptionSummaries|Export-SubscriptionResourceLocks);
PolicyDefinitions=($SubscriptionSummaries|Export-SubscriptionPolicyDefinitions);
RoleAssignments=($SubscriptionSummaries|Export-SubscriptionRoleAssignments);
RoleDefinitions=($SubscriptionSummaries|Export-SubscriptionRoleDefinitions);
PolicyAssignments=($SubscriptionSummaries|Export-SubscriptionPolicyAssignments);
Groups=($TenantSummary|Export-TenantGroups);
OauthPermissionGrants=($TenantSummary|Export-TenantOauthPermissionGrants);
Roles=($TenantSummary|Export-TenantRoles);
RoleTemplates=($TenantSummary|Export-TenantRoleTemplates);
Users=($TenantSummary|Export-TenantUsers);
AuditEvents=($TenantSummary|Export-TenantAuditEvents);
SigninEvents=($TenantSummary|Export-TenantSigninEvents);
}
if($Metrics.IsPresent)
{
$ReportData.Add('ResourceMetrics',($SubscriptionSummaries|Export-SubscriptionMetricSet))
}
if($Usage.IsPresent)
{
$ReportData.Add('ResourceUsage',($SubscriptionSummaries|Export-SubscriptionUsageAggregates))
}
$ReportResult=New-Object PSObject -Property $ReportData
Write-Output $ReportResult