forked from Action1Corp/APIScripts
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEndpointGroupsComparisonCSV.ps1
More file actions
66 lines (53 loc) · 2.81 KB
/
Copy pathEndpointGroupsComparisonCSV.ps1
File metadata and controls
66 lines (53 loc) · 2.81 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
# Name: PSAction1EndpointGroupsComparisonCSV.ps1
# Description: script is designed to generate CSV that shows what endpoints are in what groups
# Copyright (C) 2024 Action1 Corporation
# Documentation: https://github.com/Action1Corp/PSAction1/
# Use Action1 Roadmap system (https://roadmap.action1.com/) to submit feedback or enhancement requests.
# WARNING: Carefully study the provided scripts and components before using them. Test in your non-production lab first.
# LIMITATION OF LIABILITY. IN NO EVENT SHALL ACTION1 OR ITS SUPPLIERS, OR THEIR RESPECTIVE
# OFFICERS, DIRECTORS, EMPLOYEES, OR AGENTS BE LIABLE WITH RESPECT TO THE WEBSITE OR
# THE COMPONENTS OR THE SERVICES UNDER ANY CONTRACT, NEGLIGENCE, TORT, STRICT
# LIABILITY OR OTHER LEGAL OR EQUITABLE THEORY (I)FOR ANY AMOUNT IN THE AGGREGATE IN
# EXCESS OF THE GREATER OF FEES PAID BY YOU THEREFOR OR $100; (II) FOR ANY INDIRECT,
# INCIDENTAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES OF ANY KIND WHATSOEVER; (III) FOR
# DATA LOSS OR COST OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; OR (IV) FOR ANY
# MATTER BEYOND ACTION1’S REASONABLE CONTROL. SOME STATES DO NOT ALLOW THE
# EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE
# LIMITATIONS AND EXCLUSIONS MAY NOT APPLY TO YOU.
# Comment out below import/set-action1credentials if not needed, or preformed prior
Install-Module -Name PSAction1
Set-Action1Credentials -APIKey '<your api key>' -Secret '<your secret>'
Set-Action1DefaultOrg -Org_ID '<your org id>'
Set-Action1Region -Region '<Enter Region Here>'
$Exportpath = "<InsertFilePathHere.csv>"
# Initialize other variables
$groupEndpointMapping = @{}
# Fetch all endpoints
$allEndpoints = @()
$endpointsResponse = Get-Action1 -Query Endpoints
$allEndpoints += $endpointsResponse | Select-Object -ExpandProperty name
# Fetch all groups
$allGroups = Get-Action1 -Query EndpointGroups
# Process groups and their members
foreach ($group in $allGroups) {
$groupMembersResponse = Get-Action1 -Query EndpointGroupMembers -Id $group.id
$groupMembers = $groupMembersResponse | ForEach-Object { $_.name }
$groupEndpointMapping[$group.name] = $groupMembers
}
# CSV Generation
$csvOutput = @()
foreach ($endpointName in $allEndpoints) {
$groupsForEndpoint = @()
foreach ($groupName in $groupEndpointMapping.Keys) {
if ($endpointName -in $groupEndpointMapping[$groupName]) {
$groupsForEndpoint += $groupName
}
}
$obj = New-Object PSObject -Property @{
"Endpoint" = $endpointName
"Groups" = if ($groupsForEndpoint.Count -eq 0) { "none" } else { $groupsForEndpoint -join ", " }
}
$csvOutput += $obj
}
# Export to CSV
$csvOutput | Select-Object Endpoint, Groups | Export-Csv -Path $Exportpath -NoTypeInformation -Encoding UTF8