diff --git a/Powershell/Modules/Effectory.Dns/Effectory.Dns.psd1 b/Powershell/Modules/Effectory.Dns/Effectory.Dns/Effectory.Dns.psd1 similarity index 100% rename from Powershell/Modules/Effectory.Dns/Effectory.Dns.psd1 rename to Powershell/Modules/Effectory.Dns/Effectory.Dns/Effectory.Dns.psd1 diff --git a/Powershell/Modules/Effectory.Dns/Effectory.Dns.psm1 b/Powershell/Modules/Effectory.Dns/Effectory.Dns/Effectory.Dns.psm1 similarity index 82% rename from Powershell/Modules/Effectory.Dns/Effectory.Dns.psm1 rename to Powershell/Modules/Effectory.Dns/Effectory.Dns/Effectory.Dns.psm1 index b9be54b..6132b8a 100644 --- a/Powershell/Modules/Effectory.Dns/Effectory.Dns.psm1 +++ b/Powershell/Modules/Effectory.Dns/Effectory.Dns/Effectory.Dns.psm1 @@ -7,8 +7,8 @@ Find dangling DNS records Compares DNS bindings with a previous state and checks the existence of DNS records for bindings that may have been deleted. #> -'public', 'private' | - Resolve-Path -Path $PSScriptRoot -ChildPath { $_ } | +'public', 'private', 'classes' | + Join-Path -Path $PSScriptRoot -ChildPath { $_ } | Get-ChildItem -Recurse -File -Filter *.ps1 | ForEach-Object { . $_.FullName diff --git a/Powershell/Modules/Effectory.Dns/build.psd1 b/Powershell/Modules/Effectory.Dns/Effectory.Dns/build.psd1 similarity index 100% rename from Powershell/Modules/Effectory.Dns/build.psd1 rename to Powershell/Modules/Effectory.Dns/Effectory.Dns/build.psd1 diff --git a/Powershell/Modules/Effectory.Dns/classes/Effectory-DomainNameCheck.ps1 b/Powershell/Modules/Effectory.Dns/Effectory.Dns/classes/Effectory-DomainNameCheck.ps1 similarity index 91% rename from Powershell/Modules/Effectory.Dns/classes/Effectory-DomainNameCheck.ps1 rename to Powershell/Modules/Effectory.Dns/Effectory.Dns/classes/Effectory-DomainNameCheck.ps1 index 6189697..f8f5b76 100644 --- a/Powershell/Modules/Effectory.Dns/classes/Effectory-DomainNameCheck.ps1 +++ b/Powershell/Modules/Effectory.Dns/Effectory.Dns/classes/Effectory-DomainNameCheck.ps1 @@ -1,4 +1,4 @@ -class Effectory-DomainNameCheck { +class EffectoryDomainNameCheck { [string] $SubscriptionId = "" [string] $SubscriptionName = "" [string] $ResourceId = "" diff --git a/Powershell/Modules/Effectory.Dns/Effectory.Dns/private/CheckCdnEndpoints.ps1 b/Powershell/Modules/Effectory.Dns/Effectory.Dns/private/CheckCdnEndpoints.ps1 new file mode 100644 index 0000000..e70cae8 --- /dev/null +++ b/Powershell/Modules/Effectory.Dns/Effectory.Dns/private/CheckCdnEndpoints.ps1 @@ -0,0 +1,39 @@ +function CheckCdnEndpoints() { + param( + [Parameter(Mandatory)] + [Microsoft.Azure.Commands.Profile.Models.Core.PSAzureContext]$subscription, + [Parameter(Mandatory)] + [Microsoft.Azure.Commands.Cdn.Models.Profile.PSProfile[]] $cdnProfiles, + [Parameter(Mandatory)] + [string]$effectoryDomainPattern + ) + [EffectoryDomainNameCheck[]]$Result = @() + + foreach($cdnProfile in $cdnProfiles) { + $cdnEndPoints = Get-AzCdnEndpoint -ProfileName $cdnProfile.Name -ResourceGroupName $cdnProfile.ResourceGroupName + foreach($cdnEndPoint in $cdnEndPoints) { + $resource = Get-AzResource -ResourceId $cdnEndPoint.Id + $cdnEffectory = Get-AzCdnCustomDomain -CdnEndpoint $cdnEndPoint | Where-Object HostName -Like $effectoryDomainPattern + + foreach($cdn in $cdnEffectory) { + $domainNameCheck = [EffectoryDomainNameCheck] @{ + SubscriptionId = $subscriptionId; + SubscriptionName = $subscription.Name; + ResourceId = $cdn.Id; + ResourceName = $cdn.Name; + ResourceType = $cdn.Type; + ResourceGroupName = $cdn.ResourceGroupName; + DomainName = $cdn.HostName; + Tag_Team = $resource.Tags.team + Tag_Product = $resource.Tags.product + Tag_Environment = $resource.Tags.environment + Tag_Data = $resource.Tags.data + } + $Result += $domainNameCheck + } + } + } + + $Result +} + diff --git a/Powershell/Modules/Effectory.Dns/Effectory.Dns/private/CheckFrontDoorEndPoints.ps1 b/Powershell/Modules/Effectory.Dns/Effectory.Dns/private/CheckFrontDoorEndPoints.ps1 new file mode 100644 index 0000000..e59d6b7 --- /dev/null +++ b/Powershell/Modules/Effectory.Dns/Effectory.Dns/private/CheckFrontDoorEndPoints.ps1 @@ -0,0 +1,36 @@ +function CheckFrontDoorEndPoints() { + param( + [Parameter(Mandatory)] + [Microsoft.Azure.Commands.Profile.Models.Core.PSAzureContext]$subscription, + [Parameter(Mandatory)] + [Microsoft.Azure.Commands.FrontDoor.Models.PSFrontDoor[]] $frontDoors, + [Parameter(Mandatory)] + [string]$effectoryDomainPattern + ) + [EffectoryDomainNameCheck[]]$Result = @() + + foreach($frontDoor in $frontDoors) { + $resource = Get-AzResource -ResourceId $frontDoor.Id + + if ($endPointHostNames = $frontDoor.FrontendEndpoints | Where-Object HostName -like $effectoryDomainPattern) { + foreach ($endPoint in $endPointHostNames) { + # frontdoor + $domainNameCheck = [EffectoryDomainNameCheck] @{ + SubscriptionId = $subscriptionId; + SubscriptionName = $subscription.Name; + ResourceId = $endPoint.Id; + ResourceName = $endPoint.Name; + ResourceType = $endPoint.Type; + ResourceGroupName = $resource.ResourceGroupName; + DomainName = $endPoint.HostName; + Tag_Team = $resource.Tags.team + Tag_Product = $resource.Tags.product + Tag_Environment = $resource.Tags.environment + Tag_Data = $resource.Tags.data + } + $Result += $domainNameCheck + } } + } + + $Result +} \ No newline at end of file diff --git a/Powershell/Modules/Effectory.Dns/Effectory.Dns/private/CheckStorageAccounts.ps1 b/Powershell/Modules/Effectory.Dns/Effectory.Dns/private/CheckStorageAccounts.ps1 new file mode 100644 index 0000000..cfa5832 --- /dev/null +++ b/Powershell/Modules/Effectory.Dns/Effectory.Dns/private/CheckStorageAccounts.ps1 @@ -0,0 +1,32 @@ +function CheckStorageAccounts() { + param( + [Parameter(Mandatory)] + [Microsoft.Azure.Commands.Profile.Models.Core.PSAzureContext]$subscription, + [Parameter(Mandatory)] + [Microsoft.Azure.Commands.Management.Storage.Models.PSStorageAccount[]] $storageAccounts, + [Parameter(Mandatory)] + [string]$effectoryDomainPattern + ) + [EffectoryDomainNameCheck[]]$Result = @() + + foreach($storageAccount in $storageAccounts) { + $resource = Get-AzResource -ResourceId $storageAccount.Id + + $domainNameCheck = [EffectoryDomainNameCheck] @{ + SubscriptionId = $subscriptionId; + SubscriptionName = $subscription.Name; + ResourceId = $storageAccount.Id; + ResourceName = $resource.Name; + ResourceType = $resource.ResourceType; + ResourceGroupName = $resource.ResourceGroupName; + DomainName = $storageAccount.CustomDomain.Name; + Tag_Team = $resource.Tags.team + Tag_Product = $resource.Tags.product + Tag_Environment = $resource.Tags.environment + Tag_Data = $resource.Tags.data + } + $Result += $domainNameCheck + } + + $Result +} \ No newline at end of file diff --git a/Powershell/Modules/Effectory.Dns/Effectory.Dns/private/CheckWebApps.ps1 b/Powershell/Modules/Effectory.Dns/Effectory.Dns/private/CheckWebApps.ps1 new file mode 100644 index 0000000..925d077 --- /dev/null +++ b/Powershell/Modules/Effectory.Dns/Effectory.Dns/private/CheckWebApps.ps1 @@ -0,0 +1,33 @@ +function CheckWebApps() { + param( + [Parameter(Mandatory)] + [Microsoft.Azure.Commands.Profile.Models.Core.PSAzureContext]$subscription, + [Parameter(Mandatory)] + [Microsoft.Azure.Commands.WebApps.Models.PSSite[]] $webApps, + [Parameter(Mandatory)] + [string]$effectoryDomainPattern + ) + [EffectoryDomainNameCheck[]]$Result = @() + + $webAppsEffectory = $webApps | Where-Object {@($_.HostNames) -like $effectoryDomainPattern} + foreach ($webAppEffectory in $webAppsEffectory) { + foreach ($hostName in $webAppEffectory.HostNames | Where-Object {$_ -like $effectoryDomainPattern}) { + $domainNameCheck = [EffectoryDomainNameCheck] @{ + SubscriptionId = $subscriptionId; + SubscriptionName = $subscription.Name; + ResourceId = $webAppEffectory.Id; + ResourceName = $webAppEffectory.Name; + ResourceType = $webAppEffectory.Type; + ResourceGroupName = $webAppEffectory.ResourceGroup; + DomainName = $hostName; + Tag_Team = $webAppEffectory.Tags.team + Tag_Product = $webAppEffectory.Tags.product + Tag_Environment = $webAppEffectory.Tags.environment + Tag_Data = $webAppEffectory.Tags.data + } + $Result += $domainNameCheck + } + } + + $Result +} \ No newline at end of file diff --git a/Powershell/Modules/Effectory.Dns/Effectory.Dns/private/GetDomainNameCheck.ps1 b/Powershell/Modules/Effectory.Dns/Effectory.Dns/private/GetDomainNameCheck.ps1 new file mode 100644 index 0000000..9f11818 --- /dev/null +++ b/Powershell/Modules/Effectory.Dns/Effectory.Dns/private/GetDomainNameCheck.ps1 @@ -0,0 +1,21 @@ +function GetDomainNameCheck () { + param( + [Parameter(Mandatory)] + [Microsoft.Azure.Commands.Profile.Models.Core.PSAzureContext]$subscription, + [Parameter(Mandatory)] + [Microsoft.Azure.Management.WebSites.Models.Resource] $resource + ) + $Result = [EffectoryDomainNameCheck] @{ + SubscriptionId = $subscriptionId; + SubscriptionName = $subscription.Name; + ResourceId = $resource.Id; + ResourceName = $resource.Name; + ResourceType = $resource.Type; + Tag_Team = $resource.Tags.team + Tag_Product = $resource.Tags.product + Tag_Environment = $resource.Tags.environment + Tag_Data = $resource.Tags.data + } + + $Result; +} \ No newline at end of file diff --git a/Powershell/Modules/Effectory.Dns/Effectory.Dns/public/Get-EffectoryDomainResources.ps1 b/Powershell/Modules/Effectory.Dns/Effectory.Dns/public/Get-EffectoryDomainResources.ps1 new file mode 100644 index 0000000..c854206 --- /dev/null +++ b/Powershell/Modules/Effectory.Dns/Effectory.Dns/public/Get-EffectoryDomainResources.ps1 @@ -0,0 +1,97 @@ +#Requires -Modules Az.Accounts,Az.Websites,Az.FrontDoor,Az.Storage,Az.Cdn,Az.Network,Az.TrafficManager,Az.ContainerInstance +function Get-EffectoryDomainResources { + <# + .SYNOPSIS + Find dangling DNS records + .DESCRIPTION + Compares DNS bindings with a previous state and checks the existence of DNS records for bindings that may have been deleted. + .PARAMETER subscriptionId + Optional Subscription Id to set the context to. Otherwise uses the current context. + #> + param( + [Parameter()] + [string] $subscriptionId + ) + + # Initialize + [EffectoryDomainNameCheck[]]$result = @() + [string]$effectoryDomainPattern = "*.effectory.com" + + # Get subscription info + [Microsoft.Azure.Commands.Profile.Models.Core.PSAzureContext]$currentContext = $null + if (![string]::IsNullOrWhitespace($subscriptionId)) { + $currentContext = Set-AzContext -SubscriptionId $subscriptionId + } + else { + $currentContext = Get-AzContext + $subscriptionId = $currentContext.Subscription + } + + Write-Host "Processing subscription $($currentContext.Name)" + + # ------------------------------------------------------------------------------------------------------------------ + Write-Host "Checking WebApps and WebApp Slots for subscription $($currentContext.Name)" + # $webApps = Get-AzWebApp + # [int]$webAppCounter = 0 + # [int]$webAppSlotCounter = 0 + + # if ($null -ne $webApps) { + # # check webapps + # $itemsWebApps = CheckWebApps -subscription $currentContext -webApps $webApps -effectoryDomainPattern $effectoryDomainPattern + # $webAppCounter += $itemsWebApps.Count + # $result += $itemsWebApps + + # # check webapp slots + # foreach ($webApp in $webApps) { + # $slot = Get-AzWebAppSlot -WebApp $webApp + # if ($null -ne $slot) { + # $itemsWebAppSlots = CheckWebApps -subscription $currentContext -webApps $slot -effectoryDomainPattern $effectoryDomainPattern + # $webAppSlotCounter += $itemsWebAppSlots.Count + # $result += $itemsWebAppSlots + # } + # } + # } + # Write-Host "Found $($webAppCounter) WebApps and $($webAppSlotsCounter) WebApp Slots for subscription $($currentContext.Name)" + + # ------------------------------------------------------------------------------------------------------------------ + Write-Host "Checking FrontDoor Endpoints for subscription $($currentContext.Name)" + $frontDoors = Get-AzFrontDoor + [int]$frontDoorEndPointCounter = 0 + + if ($null -ne $frontDoors) { + $itemsFrontDoors = CheckFrontDoorEndPoints -subscription $currentContext -frontDoors $frontDoors -effectoryDomainPattern $effectoryDomainPattern + $frontDoorEndPointCounter += $itemsFrontDoors.Count + $result += $itemsFrontDoors + } + Write-Host "Found $($frontDoorEndPointCounter) FrontDoor Endpoints for subscription $($currentContext.Name)" + + # ------------------------------------------------------------------------------------------------------------------ + Write-Host "Checking Storage Accounts for subscription $($currentContext.Name)" + $storageAccounts = Get-AzStorageAccount | Where-Object { $_.CustomDomain.Name -like $effectoryDomainPattern } # storage accounts + [int]$storageCounter = 0 + + if ($null -ne $storageAccounts) { + $itemsStorage = CheckStorageAccounts -subscription $currentContext -storageAccounts $storageAccounts -effectoryDomainPattern $effectoryDomainPattern + $storageCounter += $itemsStorage.Count + $result += $itemsStorage + } + Write-Host "Found $($storageCounter) Storage Accounts for subscription $($currentContext.Name)" + + # ------------------------------------------------------------------------------------------------------------------ + Write-Host "Checking Cdn Endpoints for subscription $($currentContext.Name)" + $cdnProfiles = Get-AzCdnProfile + [int]$cdnCounter = 0 + + if ($null -ne $cdnProfiles) { + $itemsCdn = CheckCdnEndpoints -subscription $currentContext -cdnProfiles $cdnProfiles -effectoryDomainPattern $effectoryDomainPattern + $cdnCounter += $itemsCdn.Count + $result += $itemsCdn + } + Write-Host "Found $($cdnCounter) Cdn Endpoints for subscription $($currentContext.Name)" + + + $result +} + + + diff --git a/Powershell/Modules/build.ps1 b/Powershell/Modules/Effectory.Dns/build.ps1 similarity index 100% rename from Powershell/Modules/build.ps1 rename to Powershell/Modules/Effectory.Dns/build.ps1 diff --git a/Powershell/Modules/Effectory.Dns/build/Effectory.Dns/0.0.1/Effectory.Dns.psd1 b/Powershell/Modules/Effectory.Dns/build/Effectory.Dns/0.0.1/Effectory.Dns.psd1 new file mode 100644 index 0000000..bb10c93 --- /dev/null +++ b/Powershell/Modules/Effectory.Dns/build/Effectory.Dns/0.0.1/Effectory.Dns.psd1 @@ -0,0 +1,131 @@ +# +# Module manifest for module 'Effectory.Dns' +# +# Generated by: Jurjen Ladenius +# +# Generated on: 8/11/2021 +# + +@{ + +# Script module or binary module file associated with this manifest. +RootModule = 'Effectory.Dns.psm1' + +# Version number of this module. +ModuleVersion = '0.0.1' + +# Supported PSEditions +# CompatiblePSEditions = @() + +# ID used to uniquely identify this module +GUID = '1e64644e-639c-47d1-8816-c0e48390a6a7' + +# Author of this module +Author = 'Jurjen Ladenius' + +# Company or vendor of this module +CompanyName = 'Effectory B.V.' + +# Copyright statement for this module +Copyright = '(c) Effectory B.V. - Jurjen Ladenius. All rights reserved.' + +# Description of the functionality provided by this module +# Description = '' + +# Minimum version of the PowerShell engine required by this module +# PowerShellVersion = '' + +# Name of the PowerShell host required by this module +# PowerShellHostName = '' + +# Minimum version of the PowerShell host required by this module +# PowerShellHostVersion = '' + +# Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only. +# DotNetFrameworkVersion = '' + +# Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only. +# ClrVersion = '' + +# Processor architecture (None, X86, Amd64) required by this module +# ProcessorArchitecture = '' + +# Modules that must be imported into the global environment prior to importing this module +# RequiredModules = @() + +# Assemblies that must be loaded prior to importing this module +# RequiredAssemblies = @() + +# Script files (.ps1) that are run in the caller's environment prior to importing this module. +# ScriptsToProcess = @() + +# Type files (.ps1xml) to be loaded when importing this module +# TypesToProcess = @() + +# Format files (.ps1xml) to be loaded when importing this module +# FormatsToProcess = @() + +# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess +# NestedModules = @() + +# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export. +FunctionsToExport = 'Get-EffectoryDomainResources' + +# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export. +CmdletsToExport = '*' + +# Variables to export from this module +VariablesToExport = '*' + +# Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export. +AliasesToExport = '*' + +# DSC resources to export from this module +# DscResourcesToExport = @() + +# List of all modules packaged with this module +# ModuleList = @() + +# List of all files packaged with this module +# FileList = @() + +# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell. +PrivateData = @{ + + PSData = @{ + + # Tags applied to this module. These help with module discovery in online galleries. + # Tags = @() + + # A URL to the license for this module. + # LicenseUri = '' + + # A URL to the main website for this project. + # ProjectUri = '' + + # A URL to an icon representing this module. + # IconUri = '' + + # ReleaseNotes of this module + # ReleaseNotes = '' + + # Prerelease string of this module + # Prerelease = '' + + # Flag to indicate whether the module requires explicit user acceptance for install/update/save + # RequireLicenseAcceptance = $false + + # External dependent modules of this module + # ExternalModuleDependencies = @() + + } # End of PSData hashtable + +} # End of PrivateData hashtable + +# HelpInfo URI of this module +# HelpInfoURI = '' + +# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix. +# DefaultCommandPrefix = '' + +} diff --git a/Powershell/Modules/Effectory.Dns/build/Effectory.Dns/0.0.1/Effectory.Dns.psm1 b/Powershell/Modules/Effectory.Dns/build/Effectory.Dns/0.0.1/Effectory.Dns.psm1 new file mode 100644 index 0000000..31f7bc4 --- /dev/null +++ b/Powershell/Modules/Effectory.Dns/build/Effectory.Dns/0.0.1/Effectory.Dns.psm1 @@ -0,0 +1,116 @@ +#Region '.\classes\Effectory-DomainNameCheck.ps1' 0 +class EffectoryDomainNameCheck { + [string] $SubscriptionId = "" + [string] $SubscriptionName = "" + [string] $ResourceId = "" + [string] $ResourceGroupName = "" + [string] $ResourceName = "" + [string] $ResourceType = "" + [string] $DomainName = "" + [string] $Tag_Team = "" + [string] $Tag_Product = "" + [string] $Tag_Environment = "" + [string] $Tag_Data = "" +} +#EndRegion '.\classes\Effectory-DomainNameCheck.ps1' 14 +#Region '.\private\CheckWebApps.ps1' 0 +function CheckWebApps() { + param( + [Parameter(Mandatory)] + [Microsoft.Azure.Commands.Profile.Models.Core.PSAzureContext]$subscription, + [Parameter(Mandatory)] + [Microsoft.Azure.Commands.WebApps.Models.PSSite[]] $webApps, + [Parameter(Mandatory)] + [string]$effectoryDomainPattern + ) + [EffectoryDomainNameCheck[]]$Result = @() + + $webAppsEffectory = $webApps | Where-Object {@($_.HostNames) -like $effectoryDomainPattern} + foreach ($webAppEffectory in $webAppsEffectory) { + foreach ($hostName in $webAppEffectory.HostNames) { + $domainNameCheck = GetDomainNameCheck($subscription, $webAppEffectory) + $domainNameCheck.ResourceGroupName = $webAppEffectory.ResourceGroup + $domainNameCheck.DomainName = $hostName + $Result += $domainNameCheck + } + } + + $Result +} +#EndRegion '.\private\CheckWebApps.ps1' 24 +#Region '.\private\GetDomainNameCheck.ps1' 0 +function GetDomainNameCheck () { + param( + [Parameter(Mandatory)] + [Microsoft.Azure.Commands.Profile.Models.Core.PSAzureContext]$subscription, + [Parameter(Mandatory)] + [Microsoft.Azure.Commands.WebApps.Models.Resource] $resource + ) + $Result = [EffectoryDomainNameCheck] @{ + SubscriptionId = $subscriptionId; + SubscriptionName = $subscription.Name; + ResourceId = $resource.Id; + ResourceName = $resource.Name; + ResourceType = $resource.Type; + Tag_Team = $resource.Tags.team + Tag_Product = $resource.Tags.product + Tag_Environment = $resource.Tags.environment + Tag_Data = $resource.Tags.data + } + + $Result; +} +#EndRegion '.\private\GetDomainNameCheck.ps1' 22 +#Region '.\public\Get-EffectoryDomainResources.ps1' 0 +function Get-EffectoryDomainResources { + <# + .SYNOPSIS + Find dangling DNS records + .DESCRIPTION + Compares DNS bindings with a previous state and checks the existence of DNS records for bindings that may have been deleted. + .PARAMETER subscriptionId + Optional Subscription Id to set the context to. Otherwise uses the current context. + #> + param( + [Parameter()] + [string] $subscriptionId + ) + + # Initialize + [EffectoryDomainNameCheck[]]$result = @() + [string]$effectoryDomainPattern = "*.effectory.com" + + # Get subscription info + [Microsoft.Azure.Commands.Profile.Models.Core.PSAzureContext]$currentContext = $null + if (![string]::IsNullOrWhitespace($subscriptionId)) { + $currentContext = Set-AzContext -SubscriptionId $subscriptionId + } + else { + $currentContext = Get-AzContext + $subscriptionId = $currentContext.Subscription + } + + Write-Verbose "Processing subscription $($currentContext.Name) [$($subscriptionId)]" + + $webApps = Get-AzWebApp + + $items = CheckWebApps -subscription $currentContext -webApps $webApps -effectoryDomainPattern $effectoryDomainPattern + $result = $result + $items + + $result + + + + # $webAppsEffectory = $webApps | Where-Object {@($_.HostNames) -like "*.effectory.com"} # app service + # foreach ($we in $collection) { + + # } + + + #$domainNameCheck + + + +} + +#EndRegion '.\public\Get-EffectoryDomainResources.ps1' 52 diff --git a/Powershell/Modules/Effectory.Dns/public/Get-EffectoryDomainResources.ps1 b/Powershell/Modules/Effectory.Dns/public/Get-EffectoryDomainResources.ps1 deleted file mode 100644 index 5fffc53..0000000 --- a/Powershell/Modules/Effectory.Dns/public/Get-EffectoryDomainResources.ps1 +++ /dev/null @@ -1,22 +0,0 @@ -function Get-EffectoryDomainResources { - <# - .SYNOPSIS - Find dangling DNS records - .DESCRIPTION - Compares DNS bindings with a previous state and checks the existence of DNS records for bindings that may have been deleted. - .PARAMETER subscriptionId - Optional Subscription Id to set the context to. Otherwise uses the current context. - #> - param( - [Parameter()] - [string] $subscriptionId - ) - - $subscription = Get-AzContext - if (![string]::IsNullOrWhitespace($subscriptionId)) { - $subscription = Set-AzContext -SubscriptionId $subscriptionId - } - - - Write-Host "foo" -} \ No newline at end of file diff --git a/Powershell/Modules/Effectory.Dns/test.csv b/Powershell/Modules/Effectory.Dns/test.csv new file mode 100644 index 0000000..321d05b --- /dev/null +++ b/Powershell/Modules/Effectory.Dns/test.csv @@ -0,0 +1,8 @@ +"SubscriptionId","SubscriptionName","ResourceId","ResourceGroupName","ResourceName","ResourceType","DomainName","Tag_Team","Tag_Product","Tag_Environment","Tag_Data" +"a134faf1-7a89-4f2c-8389-06d00bd5e2a7","Survey Software Production (a134faf1-7a89-4f2c-8389-06d00bd5e2a7) - jurjen.ladenius@effectory.com","/subscriptions/a134faf1-7a89-4f2c-8389-06d00bd5e2a7/resourcegroups/my-effectory-europe/providers/Microsoft.Network/Frontdoors/my-effectory/FrontendEndpoints/my-effectory-com","my-effectory-europe","my-effectory-com","Microsoft.Network/Frontdoors/FrontendEndpoints","my.effectory.com","yellow","my-effectory","prod","n/a" +"a134faf1-7a89-4f2c-8389-06d00bd5e2a7","Survey Software Production (a134faf1-7a89-4f2c-8389-06d00bd5e2a7) - jurjen.ladenius@effectory.com","/subscriptions/a134faf1-7a89-4f2c-8389-06d00bd5e2a7/resourcegroups/my-effectory-europe/providers/Microsoft.Network/Frontdoors/my-effectory/FrontendEndpoints/my-internetspiegel-effectory-com","my-effectory-europe","my-internetspiegel-effectory-com","Microsoft.Network/Frontdoors/FrontendEndpoints","my.internetspiegel.effectory.com","yellow","my-effectory","prod","n/a" +"a134faf1-7a89-4f2c-8389-06d00bd5e2a7","Survey Software Production (a134faf1-7a89-4f2c-8389-06d00bd5e2a7) - jurjen.ladenius@effectory.com","/subscriptions/a134faf1-7a89-4f2c-8389-06d00bd5e2a7/resourcegroups/my-effectory-europe-staging/providers/Microsoft.Network/Frontdoors/stage-my-effectory/FrontendEndpoints/stage-my-internetspiegel-effectory-com","my-effectory-europe-staging","stage-my-internetspiegel-effectory-com","Microsoft.Network/Frontdoors/FrontendEndpoints","stage-my.internetspiegel.effectory.com","yellow","my-effectory","prod","n/a" +"a134faf1-7a89-4f2c-8389-06d00bd5e2a7","Survey Software Production (a134faf1-7a89-4f2c-8389-06d00bd5e2a7) - jurjen.ladenius@effectory.com","/subscriptions/a134faf1-7a89-4f2c-8389-06d00bd5e2a7/resourcegroups/my-effectory-europe-staging/providers/Microsoft.Network/Frontdoors/stage-my-effectory/FrontendEndpoints/stage-my-effectory-com","my-effectory-europe-staging","stage-my-effectory-com","Microsoft.Network/Frontdoors/FrontendEndpoints","stage-my.effectory.com","yellow","my-effectory","prod","n/a" +"a134faf1-7a89-4f2c-8389-06d00bd5e2a7","Survey Software Production (a134faf1-7a89-4f2c-8389-06d00bd5e2a7) - jurjen.ladenius@effectory.com","/subscriptions/a134faf1-7a89-4f2c-8389-06d00bd5e2a7/resourceGroups/Default-Storage-WestEurope/providers/Microsoft.Storage/storageAccounts/mailingstore","Default-Storage-WestEurope","mailingstore","Microsoft.Storage/storageAccounts","mailstore.effectory.com","pink","general","prod","internal" +"a134faf1-7a89-4f2c-8389-06d00bd5e2a7","Survey Software Production (a134faf1-7a89-4f2c-8389-06d00bd5e2a7) - jurjen.ladenius@effectory.com","/subscriptions/a134faf1-7a89-4f2c-8389-06d00bd5e2a7/resourcegroups/my-effectory-europe/providers/Microsoft.Cdn/profiles/effectorybranding/endpoints/effectorybranding/customdomains/styleguide-effectory-com","my-effectory-europe","styleguide-effectory-com","Microsoft.Cdn/profiles/endpoints/customdomains","styleguide.effectory.com","orange","my-effectory","prod","n/a" +"a134faf1-7a89-4f2c-8389-06d00bd5e2a7","Survey Software Production (a134faf1-7a89-4f2c-8389-06d00bd5e2a7) - jurjen.ladenius@effectory.com","/subscriptions/a134faf1-7a89-4f2c-8389-06d00bd5e2a7/resourcegroups/tech-effectory/providers/Microsoft.Cdn/profiles/tech-effectory/endpoints/techeffectory/customdomains/tech-effectory-com","tech-effectory","tech-effectory-com","Microsoft.Cdn/profiles/endpoints/customdomains","tech.effectory.com","to","tech.effectory.com","prod","public" diff --git a/Powershell/Modules/Effectory.Dns/testscript.ps1 b/Powershell/Modules/Effectory.Dns/testscript.ps1 new file mode 100644 index 0000000..d1d8066 --- /dev/null +++ b/Powershell/Modules/Effectory.Dns/testscript.ps1 @@ -0,0 +1,23 @@ +#using module .\build\Effectory.Dns\0.0.1\Effectory.Dns.psm1 + +# .\build.ps1 + +# Import-Module .\build\Effectory.Dns\0.0.1\Effectory.Dns.psm1 -Force + + +Import-Module .\Effectory.Dns -Force + +# $subscriptions = Get-AzSubscription | Where-Object State -eq "Enabled" + +# foreach ($subscription in $subscriptions) +# { +# [Object[]]$result = @() +# $items = Get-EffectoryDomainResources -subscriptionId $subscription.Id +# $result = $result + $items +# } + +# $result + +$result = Get-EffectoryDomainResources -subscriptionId "a134faf1-7a89-4f2c-8389-06d00bd5e2a7" + +$result | Export-Csv -Path "test.csv" diff --git a/Powershell/Modules/testscript.ps1 b/Powershell/Modules/testscript.ps1 deleted file mode 100644 index b7a0a10..0000000 --- a/Powershell/Modules/testscript.ps1 +++ /dev/null @@ -1,3 +0,0 @@ -Import-Module .\Effectory.Dns - -Get-EffectoryDomainResources \ No newline at end of file