From 59304b103c45fadf3d58753522d054ce8673dcbf Mon Sep 17 00:00:00 2001 From: Jurjen Ladenius Effectory Date: Thu, 15 May 2025 06:19:24 +0000 Subject: [PATCH] Merged PR 59542: list storage blobs and tables & servicebus list scrip - Added servicebus list script #117926 - Added scripts to list storage blobs and tables #115638 Related work items: #117926 --- Powershell/Lists/Azure/ServiceBus.ps1 | 140 ++++++++++++++++++ Powershell/Tools/Custom Roles.ps1 | 6 + Powershell/Tools/DNS verification/DNS.csv | 40 +++++ .../Tools/DNS verification/DNSCheck.ps1 | 112 ++++++++++++++ 4 files changed, 298 insertions(+) create mode 100644 Powershell/Lists/Azure/ServiceBus.ps1 create mode 100644 Powershell/Tools/DNS verification/DNS.csv create mode 100644 Powershell/Tools/DNS verification/DNSCheck.ps1 diff --git a/Powershell/Lists/Azure/ServiceBus.ps1 b/Powershell/Lists/Azure/ServiceBus.ps1 new file mode 100644 index 0000000..a5aa6b0 --- /dev/null +++ b/Powershell/Lists/Azure/ServiceBus.ps1 @@ -0,0 +1,140 @@ +Import-Module Az.Accounts +Import-Module Az.Automation +Import-Module Az.ServiceBus +Import-Module Az.Resources + +$subscriptions = Get-AzSubscription + +class ResourceCheck { + [string] $ResourceId = "" + [string] $ManagementGroupId = "" + [string] $ManagementGroupName = "" + [string] $SubscriptionId = "" + [string] $SubscriptionName = "" + [string] $ResourceGroup = "" + [string] $RespourceType = "" + [string] $Location = "" + [string] $Tag_Team = "" + [string] $Tag_Product = "" + [string] $Tag_Environment = "" + [string] $Tag_Data = "" + [string] $Tag_Deployment = "" + [string] $Tag_CreatedOnDate = "" + [string] $ServiceBusName = "" + [string] $TopicName = "" + [string] $TopicSubscriptionName = "" + [string] $QueueName = "" +} + +Write-Host "======================================================================================================================================================================" +Write-Host "Creating service bus resource overview." +Write-Host "======================================================================================================================================================================" + +[string] $date = Get-Date -Format "yyyy-MM-dd HHmm" +$fileName = ".\$date azure service bus.csv" + +$managementGroups = Get-AzManagementGroup + +foreach ($managementGroup in $managementGroups) { + Write-Host "----------------------------------------------------------------------------------------------------------------------------------------------------------------------" + Write-Host "Management group [$($managementGroup.Name)]" + + $subscriptions = Get-AzManagementGroupSubscription -Group $managementGroup.Name | Where-Object State -eq "Active" + + foreach ($subscription in $subscriptions) { + Write-Host "----------------------------------------------------------------------------------------------------------------------------------------------------------------------" + $scope = $subscription.Id.Substring($subscription.Parent.Length, $subscription.Id.Length - $subscription.Parent.Length) + $subscriptionId = $scope.Replace("/subscriptions/", "") + Write-Host "Subscription [$($subscription.DisplayName) - $subscriptionId]" + Set-AzContext -SubscriptionId $subscriptionId | Out-Null + Write-Host "----------------------------------------------------------------------------------------------------------------------------------------------------------------------" + + $servicebusses = Get-AzServiceBusNamespaceV2 + foreach ($servicebus in $servicebusses) { + + Write-Host "Getting info for service bus [$($servicebus.Name)]" + + [ResourceCheck[]]$Result = @() + + [ResourceCheck] $resourceCheck = [ResourceCheck]::new() + $resourceCheck.ResourceId = $servicebus.Id + $resourceCheck.ManagementGroupId = $managementGroup.Id + $resourceCheck.ManagementGroupName = $managementGroup.DisplayName + $resourceCheck.SubscriptionId = $subscription.Id + $resourceCheck.SubscriptionName = $subscription.DisplayName + $resourceCheck.ResourceGroup = $servicebus.ResourceGroupName + $resourceCheck.RespourceType = $servicebus.Type + $resourceCheck.Location = $servicebus.Location + $resourceCheck.Tag_Team = $servicebus.Tags.team + $resourceCheck.Tag_Product = $servicebus.Tags.product + $resourceCheck.Tag_Environment = $servicebus.Tags.environment + $resourceCheck.Tag_Data = $servicebus.Tags.data + $resourceCheck.Tag_CreatedOnDate = $servicebus.Tags.CreatedOnDate + $resourceCheck.Tag_Deployment = $servicebus.Tags.drp_deployment + $resourceCheck.ServiceBusName = $servicebus.Name + $Result += $resourceCheck + + #topics + $topics = Get-AzServiceBusTopic -NamespaceName $servicebus.Name -ResourceGroupName $servicebus.ResourceGroupName + + foreach ($topic in $topics) { + [ResourceCheck] $resourceCheck = [ResourceCheck]::new() + $resourceCheck.ResourceId = $servicebus.Id + $resourceCheck.ManagementGroupId = $managementGroup.Id + $resourceCheck.ManagementGroupName = $managementGroup.DisplayName + $resourceCheck.SubscriptionId = $subscription.Id + $resourceCheck.SubscriptionName = $subscription.DisplayName + $resourceCheck.ResourceGroup = $servicebus.ResourceGroupName + $resourceCheck.RespourceType = $servicebus.Type + $resourceCheck.Location = $servicebus.Location + $resourceCheck.ServiceBusName = $servicebus.Name + $resourceCheck.TopicName = $topic.Name + $Result += $resourceCheck + + # topic subscriptions + $topicSubs = Get-AzServiceBusSubscription -NamespaceName $servicebus.Name -ResourceGroupName $servicebus.ResourceGroupName -TopicName $topic.Name + + foreach ($topicSub in $topicSubs) { + + [ResourceCheck] $resourceCheck = [ResourceCheck]::new() + $resourceCheck.ResourceId = $servicebus.Id + $resourceCheck.ManagementGroupId = $managementGroup.Id + $resourceCheck.ManagementGroupName = $managementGroup.DisplayName + $resourceCheck.SubscriptionId = $subscription.Id + $resourceCheck.SubscriptionName = $subscription.DisplayName + $resourceCheck.ResourceGroup = $servicebus.ResourceGroupName + $resourceCheck.RespourceType = $servicebus.Type + $resourceCheck.Location = $servicebus.Location + $resourceCheck.ServiceBusName = $servicebus.Name + $resourceCheck.TopicName = $topic.Name + $resourceCheck.TopicSubscriptionName = $topicSub.Name + $Result += $resourceCheck + } + } + + # queues + $queues = Get-AzServiceBusQueue -NamespaceName $servicebus.Name -ResourceGroupName $servicebus.ResourceGroupName + + foreach ($queue in $queues) { + + [ResourceCheck] $resourceCheck = [ResourceCheck]::new() + $resourceCheck.ResourceId = $servicebus.Id + $resourceCheck.ManagementGroupId = $managementGroup.Id + $resourceCheck.ManagementGroupName = $managementGroup.DisplayName + $resourceCheck.SubscriptionId = $subscription.Id + $resourceCheck.SubscriptionName = $subscription.DisplayName + $resourceCheck.ResourceGroup = $servicebus.ResourceGroupName + $resourceCheck.RespourceType = $servicebus.Type + $resourceCheck.Location = $servicebus.Location + $resourceCheck.ServiceBusName = $servicebus.Name + $resourceCheck.QueueName = $queue.Name + $Result += $resourceCheck + } + + $Result | Export-Csv -Path $fileName -Append -NoTypeInformation + } + } +} +Write-Host "======================================================================================================================================================================" +Write-Host "Done." + diff --git a/Powershell/Tools/Custom Roles.ps1 b/Powershell/Tools/Custom Roles.ps1 index 6b8e610..9f75b2f 100644 --- a/Powershell/Tools/Custom Roles.ps1 +++ b/Powershell/Tools/Custom Roles.ps1 @@ -39,3 +39,9 @@ New-AzCosmosDBSqlRoleAssignment -AccountName $accountName -PrincipalId $principa #Get-AzCosmosDBSqlRoleAssignment -AccountName $accountName -ResourceGroupName $resourceGroupName | Where PrincipalId -eq $principalIdReader #Get-AzCosmosDBSqlRoleAssignment -AccountName $accountName -ResourceGroupName $resourceGroupName | Where PrincipalId -eq $principalIdWriter # Remove-AzCosmosDBSqlRoleAssignment -AccountName $accountName -Id "/subscriptions/2161debe-6042-4633-b10e-de77c06cabc6/resourceGroups/phasedrelease/providers/Microsoft.DocumentDB/databaseAccounts/phasedrelease/sqlRoleAssignments/0991d31e-323d-4312-b328-92d75cbe0166" -ResourceGroupName $resourceGroupName + + +$subscriptionId = "4820b5d8-cc1d-49bd-93e5-0c7a656371b7" ; $resourceGroupName = "my-effectory-api"; $accountName = "my-effectory-api"; + +Get-AzCosmosDBSqlRoleDefinition -ResourceGroupName $resourceGroupName -AccountName $accountName +Get-AzCosmosDBSqlRoleAssignment -AccountName $accountName -ResourceGroupName $resourceGroupName \ No newline at end of file diff --git a/Powershell/Tools/DNS verification/DNS.csv b/Powershell/Tools/DNS verification/DNS.csv new file mode 100644 index 0000000..b2fb1a6 --- /dev/null +++ b/Powershell/Tools/DNS verification/DNS.csv @@ -0,0 +1,40 @@ +"HostName","Fqdn","CName","IpAddress","CNameChain","Exists","RegisteredInExternalDNS","Owner","Comment" +"status","status.effectory.com","statuspage.betteruptime.com","167.235.220.62"," -> statuspage.betteruptime.com","True","True","TO","" +"enterpriseregistration","enterpriseregistration.effectory.com","enterpriseregistration.windows.net","40.126.53.23 20.190.181.21 20.190.181.22 20.190.181.19 40.126.53.2 40.126.53.1 40.126.53.3 40.126.53.5"," -> enterpriseregistration.windows.net -> na.privatelink.msidentity.com -> prdf.aadg.msidentity.com -> www.tm.f.prd.aadg.trafficmanager.net","True","True","Int-Aut","" +"mailjetgo","mailjetgo.effectory.com","r.mailjet.com","35.241.186.140"," -> r.mailjet.com","True","True","TO","" +"hs1-27043721._domainkey","hs1-27043721._domainkey.effectory.com","effectory-com.hs16a.dkim.hubspotemail.net",""," -> effectory-com.hs16a.dkim.hubspotemail.net","False","True","Int-Aut","" +"hs2-27043721._domainkey","hs2-27043721._domainkey.effectory.com","effectory-com.hs16b.dkim.hubspotemail.net",""," -> effectory-com.hs16b.dkim.hubspotemail.net","False","True","Int-Aut","" +"sip","sip.effectory.com","sipdir.online.lync.com","","","False","False","Int-Aut","" +"wiki","wiki.effectory.com","effectorysupport.zendesk.com","216.198.54.1 216.198.53.1"," -> effectorysupport.zendesk.com","True","True","Int-Aut","" +"pki","pki.effectory.com","pkieffectory.azurewebsites.net","20.105.216.25"," -> pkieffectory.azurewebsites.net -> waws-prod-am2-635.sip.azurewebsites.windows.net -> waws-prod-am2-635-518a.westeurope.cloudapp.azure.com","True","True","Int-Aut","" +"lyncdiscover","lyncdiscover.effectory.com","webdir.online.lync.com","","","False","False","Int-Aut","" +"autodiscover","autodiscover.effectory.com","autodiscover.outlook.com","40.99.204.200 52.97.163.8 52.97.201.104 40.99.204.104"," -> autodiscover.outlook.com -> atod-g2.tm-4.office.com","True","True","Int-Aut","" +"jobs","jobs.effectory.com","secure.recruitee.com","35.242.209.60"," -> secure.recruitee.com","True","True","Int-Aut","" +"www.jobs","www.jobs.effectory.com","secure.recruitee.com","35.242.209.60"," -> secure.recruitee.com","True","True","Int-Aut","" +"rds","rds.effectory.com","rds-effectory12.msappproxy.net","172.172.255.228"," -> rds-effectory12.msappproxy.net -> cwap-nam1-runtime.routing.msappproxy.net -> nam.proxy-3.appproxy.msidentity.com -> www.tm.nam.proxy-3.appproxy.trafficmanager.net","True","True","Int-Aut","" +"security","security.effectory.com","effectory.portals.safebase.io","104.18.5.130 104.18.4.130"," -> effectory.portals.safebase.io","True","True","Int-Aut","" +"qualys","qualys.effectory.com","qualysguard.qg2.apps.qualys.eu","162.159.152.21 162.159.153.243"," -> qualysguard.qg2.apps.qualys.eu","True","True","Int-Aut","" +"go","go.effectory.com","27043721.sites.hscoscdn-eu1.net","141.101.90.98 141.101.90.99 141.101.90.96 141.101.90.97"," -> 27043721.sites.hscoscdn-eu1.net","True","True","Int-Aut","" +"eurkey1._domainkey","eurkey1._domainkey.effectory.com","eurkey1effectorycom.k01.dyn365mktg.com",""," -> eurkey1effectorycom.k01.dyn365mktg.com","False","True","Int-Aut","" +"eurkey2._domainkey","eurkey2._domainkey.effectory.com","eurkey2effectorycom.k01.dyn365mktg.com",""," -> eurkey2effectorycom.k01.dyn365mktg.com","False","True","Int-Aut","" +"bouncing","bouncing.effectory.com","eur.pb-dynmktge.com","72.145.44.93"," -> eur.pb-dynmktge.com","True","True","Int-Aut","" +"enterpriseenrollment","enterpriseenrollment.effectory.com","enterpriseenrollment-s.manage.microsoft.com","20.91.147.72"," -> enterpriseenrollment-s.manage.microsoft.com -> manage-pe.trafficmanager.net -> pexsucpeu02.westeurope.cloudapp.azure.com","True","True","Int-Aut","" +"support","support.effectory.com","effectory.zendesk.com","216.198.54.1 216.198.53.1"," -> effectory.zendesk.com","True","True","Int-Aut","" +"solutions","solutions.effectory.com","custom-tracking.salesloft.com","54.209.38.112 3.230.235.194 3.218.43.255"," -> custom-tracking.salesloft.com","True","True","Int-Aut","" +"zendesk1._domainkey","zendesk1._domainkey.effectory.com","zendesk1._domainkey.zendesk.com",""," -> zendesk1._domainkey.zendesk.com","False","True","Int-Aut","" +"track","track.effectory.com","mandrillapp.com","76.223.125.47 15.197.175.4"," -> mandrillapp.com","True","True","TO","" +"selector1._domainkey","selector1._domainkey.effectory.com","selector1-effectory-com._domainkey.effectory12.onmicrosoft.com","","","False","False","Int-Aut","" +"elink","elink.effectory.com","elink-eu.azuresend.com",""," -> elink-eu.azuresend.com -> azuresendeventseu.cloudapp.net","False","True","Int-Aut","" +"zendesk2._domainkey","zendesk2._domainkey.effectory.com","zendesk2._domainkey.zendesk.com",""," -> zendesk2._domainkey.zendesk.com","False","True","Int-Aut","" +"servicedesk","servicedesk.effectory.com","servicedesk-effectory12.msappproxy.net","172.172.255.228"," -> servicedesk-effectory12.msappproxy.net -> cwap-nam1-runtime.routing.msappproxy.net -> nam.proxy-3.appproxy.msidentity.com -> www.tm.nam.proxy-3.appproxy.trafficmanager.net","True","True","Int-Aut","" +"selector2._domainkey","selector2._domainkey.effectory.com","selector2-effectory-com._domainkey.effectory12.onmicrosoft.com",""," -> selector2-effectory-com._domainkey.effectory12.onmicrosoft.com","False","True","Int-Aut","" +"zendesk1","zendesk1.effectory.com","mail1.zendesk.com","216.198.54.2 216.198.53.2"," -> mail1.zendesk.com","True","True","Int-Aut","" +"pm-bounces.notifications.security","pm-bounces.notifications.security.effectory.com","pm.mtasv.net","3.135.172.178 3.20.18.133 3.143.47.38"," -> pm.mtasv.net","True","True","Int-Aut","" +"analytics","analytics.effectory.com","effectory.piwik.pro","20.93.211.47"," -> effectory.piwik.pro -> pp-public-p-euw.piwik.pro","True","True","Int-Aut","" +"zendesk2","zendesk2.effectory.com","mail2.zendesk.com","216.198.54.2 216.198.53.2"," -> mail2.zendesk.com","True","True","Int-Aut","" +"bnc3","bnc3.effectory.com","bnc3.mailjet.com","35.195.220.65"," -> bnc3.mailjet.com","True","True","Int-Aut","" +"zendesk3","zendesk3.effectory.com","mail3.zendesk.com","216.198.54.2 216.198.53.2"," -> mail3.zendesk.com","True","True","Int-Aut","" +"sts3","sts3.effectory.com","effectory-adfs-proxy.westeurope.cloudapp.azure.com","10.18.2.20"," -> effectory-adfs-proxy.westeurope.cloudapp.azure.com","True","True","Int-Aut","" +"zendesk4","zendesk4.effectory.com","mail4.zendesk.com","216.198.54.2 216.198.53.2"," -> mail4.zendesk.com","True","True","Int-Aut","" +"helpdeskinternetspiegel","helpdeskinternetspiegel.effectory.com","support.effectory.com","216.198.53.1 216.198.54.1"," -> support.effectory.com -> effectory.zendesk.com","True","True","Int-Aut","" +"msoid","msoid.effectory.com","clientconfig.microsoftonline-p.net","20.190.159.75 20.190.159.71 40.126.31.130 20.190.159.73 20.190.159.128 40.126.31.69 20.190.159.2 40.126.31.1"," -> clientconfig.microsoftonline-p.net -> a.privatelink.msidentity.com -> prda.aadg.msidentity.com -> www.tm.a.prd.aadg.akadns.net","True","True","Int-Aut","" diff --git a/Powershell/Tools/DNS verification/DNSCheck.ps1 b/Powershell/Tools/DNS verification/DNSCheck.ps1 new file mode 100644 index 0000000..1a8d1ef --- /dev/null +++ b/Powershell/Tools/DNS verification/DNSCheck.ps1 @@ -0,0 +1,112 @@ +class HostCheck { + [string] $HostName = "" + [string] $Fqdn = "" + [string] $CName = "" + [string] $IpAddress = "" + [string] $CNameChain = "" + [bool] $Exists = $false + [bool] $RegisteredInExternalDNS = $false + [string] $Owner = "" + [string] $Comment = "" +} + +function HostExistsInExternal ([HostCheck] $hostCheck, [string] $ExternalDNSServer) { + try { + $CnameChain = resolve-dnsname -name $hostCheck.Fqdn -NoHostsFile -Server $ExternalDNSServer -ErrorAction Ignore + + for ($i = 0; $i -lt $CnameChain.Count; $i++) { + $chainItem = $CnameChain[$i] + if ($chainItem.NameHost) { + $hostCheck.CNameChain = "$($hostCheck.CNameChain) -> $($chainItem.NameHost)" + if ($chainItem.NameHost -ieq $hostCheck.CName) { + $hostCheck.RegisteredInExternalDNS = $true + } + } + } + } + catch { + $hostCheck.RegisteredInExternalDNS = $false + } + + return $hostCheck +} + +function GetIPAddress ([HostCheck] $hostCheck) { + try { + $hostAddresses = [System.Net.Dns]::GetHostAddresses($hostCheck.Fqdn) + $hostCheck.IpAddress = $hostAddresses.IPAddressToString + + } + catch { + try { + $hostAddresses = [System.Net.Dns]::GetHostAddresses($hostCheck.HostName) + + $hostCheck.IpAddress = $hostAddresses.IPAddressToString + } + catch { + $hostCheck.IpAddress = "" + } + + } + return $hostCheck +} + +function TestIPConnection ([HostCheck] $hostCheck) { + try { + if (Test-Connection -TargetName $hostCheck.IpAddress -Count 1 -Quiet) { + $hostCheck.Exists = $true + } + else { + $hostCheck.Exists = $false + } + } + catch { + $hostCheck.Exists = $false + } + return $hostCheck +} + +function Effectory-DNSVerify-Csv ([string[]] $FileName, [string] $ExternalDNSServer = "8.8.8.8") { + Clear-DnsClientCache + + $DNSRecords = import-csv $FileName + + # HostName,Cname,Fqdn + # accept-authorization,authorization-web-api-accept.azurewebsites.net,accept-authorization.effectory.com + # accept-customer,test-customer-effectory-accept.azurewebsites.net,accept-customer.effectory.com + # accept-ecestore,test-ecestore-accept.azurewebsites.net,accept-ecestore.effectory.com + + [HostCheck[]]$Result = @() + foreach ($DNSRecord in $DNSRecords) { + + [HostCheck] $hostCheck = [HostCheck]::new() + $hostCheck.HostName = $DNSRecord.ExternalDNS + $hostCheck.CName = $DNSRecord.To + $hostCheck.Owner = $DNSRecord.Owner + $hostCheck.Comment = $DNSRecord.Comment + $hostCheck.Fqdn = "$($DNSRecord.ExternalDNS).effectory.com" + + $hostCheck = HostExistsInExternal -hostCheck $hostCheck -ExternalDNSServer $ExternalDNSServer + $hostCheck = GetIPAddress -hostCheck $hostCheck + $hostCheck.Exists = $hostCheck.IpAddress -ne "" + + $Result += $hostCheck + } + + return $Result +} + + +#Connect-AzAccount + +#Effectory-DNSVerify -ZoneName "effectory.com" -DNSServer "DC1.effectory.local" -ExternalDNSServer "8.8.8.8" | Export-Csv -Path ".\2021-06-01 DNS-effectory-com.csv" +#Effectory-DNSVerify -ZoneName "effectory.local" -DNSServer "DC1.effectory.local" -ExternalDNSServer "DC2.effectory.local" -DoIpCheck $true | Export-Csv -Path ".\2021-06-01 DNS-effectory-local.csv" +#Effectory-DNSVerify-Csv -FileName .\vip-effectory-com.csv -ExternalDNSServer "8.8.8.8" | Export-Csv -Path ".\2021-06-01 DNS-vip-effectory-com.csv" +#Effectory-GetAppServiceHostNames | Export-Csv -Path ".\2021-06-01 AppService Hosts.csv" +#Effectory-GetFrontDoorHostNames | Export-Csv -Path ".\2021-06-01 FrontDoor Hosts.csv" + +# | Format-Table +# | Export-Csv -Path .\DNS-xxxx.csv + +$foo = Effectory-DNSVerify-Csv -FileName "C:\tmp\Book3.csv" +$foo | Export-Csv -Path .\DNS.csv \ No newline at end of file