EnableBySubscription.ps1 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <#
  2. .SYNOPSIS
  3. Register provided subscriptions with Automatic Registraion feature. Failed registration information will be stored in RegistrationErrors.csv
  4. file in the current directory where this script is executed. RegistrationErrors.csv will be empty when there are no errors in subscription registration.
  5. .DESCRIPTION
  6. Registering each subscription is a two step process:
  7. -Register subscription to Microsoft.SqlVirtualMachine Resource provider.
  8. -Register subscription to the Automatic Registraion feature.
  9. By default (no subscriptions are specified), all subscription in the account will be registered.
  10. Prerequisites:
  11. - The user account running the script should have "Microsoft.SqlVirtualMachine/register/action" RBAC access over the subscriptions.
  12. - The user account running the script should have "Microsoft.Features/providers/features/register/action" RBAC access over the subscriptions.
  13. .EXAMPLE
  14. To register list of Subscriptions
  15. .\EnableBySubscription.ps1 -SubscriptionList SubscriptionId1,SubscriptionId2
  16. To register all subscriptions the user account has access to
  17. .\EnableBySubscription.ps1
  18. #>
  19. Param
  20. (
  21. [Parameter(Mandatory = $false)]
  22. [ValidateNotNullOrEmpty()]
  23. [Guid[]]$SubscriptionList
  24. );
  25. #Array of objects for storing failure subscriptionIds and failure reasons.
  26. $FailedRegistrations = @();
  27. # Register subscriptionIds to Automatic Registraion.
  28. # https://docs.microsoft.com/th-th/powershell/azure/install-az-ps?view=azps-3.8.0#install-the-azure-powershell-module.
  29. # Check if AzureRm is already installed and use that module if it is already available.
  30. if ($PSVersionTable.PSEdition -eq 'Desktop' -and (Get-Module -Name AzureRM -ListAvailable)) {
  31. Write-Host "AzureRM is already installed. Registering using AzureRm commands";
  32. Write-Host "Please login to your account which have access to the listed subscriptions";
  33. $Output = Connect-AzureRmAccount -ErrorAction Stop;
  34. If (!$SubscriptionList) {
  35. [Guid[]]$SubscriptionList = $null
  36. Get-AzureRmSubscription | ForEach-Object -Process {$SubscriptionList += $_.Id}
  37. }
  38. foreach ($SubscriptionId in $SubscriptionList) {
  39. Write-host "`n`n--------------------$SubscriptionId----------------------------`n`n";
  40. try {
  41. Write-Host "Setting powershell context to subscriptionid: $SubscriptionId";
  42. $Output = Set-AzureRmContext -SubscriptionId $SubscriptionId -ErrorAction Stop;
  43. Write-Host "Registering subscription($SubscriptionId) to Microsoft.SqlVirtualMachine Resource provider";
  44. $Output = Register-AzureRmResourceProvider -ProviderNamespace Microsoft.SqlVirtualMachine -ErrorAction Stop;
  45. Write-Host "Registering subscription($SubscriptionId) to AFEC";
  46. $Output = Register-AzureRmProviderFeature -FeatureName BulkRegistration -ProviderNamespace Microsoft.SqlVirtualMachine -ErrorAction Stop;
  47. }
  48. Catch {
  49. $message = $_.Exception.Message;
  50. Write-Error "We failed due to complete $SubscriptionId operation because of the following reason: $message";
  51. # Store failed subscriptionId and failure reason.
  52. $FailedRegistration = @{ };
  53. $FailedRegistration.Add("SubscriptionId", $SubscriptionId);
  54. $FailedRegistration.Add("Errormessage", $message);
  55. $FailedRegistrations += New-Object -TypeName psobject -Property $FailedSubscriptionId;
  56. }
  57. };
  58. }
  59. else {
  60. # Since AzureRm module is not availavle, we will use Az module.
  61. Write-Host "Installing Az powershell module if not installed already."
  62. Install-Module -Name Az -AllowClobber -Scope CurrentUser;
  63. Write-Host "Please login to your account which have access to the listed subscriptions";
  64. $Output = Connect-AzAccount -ErrorAction Stop;
  65. If (!$SubscriptionList) {
  66. [Guid[]]$SubscriptionList = $null
  67. Get-AzSubscription | ForEach-Object -Process {$SubscriptionList += $_.Id}
  68. }
  69. foreach ($SubscriptionId in $SubscriptionList) {
  70. Write-host "`n`n--------------------$SubscriptionId----------------------------`n`n"
  71. try {
  72. Write-Host "Setting powershell context to subscriptionid: $SubscriptionId";
  73. $Output = Set-AzContext -SubscriptionId $SubscriptionId -ErrorAction Stop;
  74. Write-Host "Registering subscription($SubscriptionId) to Microsoft.SqlVirtualMachine Resource provider";
  75. $Output = Register-AzResourceProvider -ProviderNamespace Microsoft.SqlVirtualMachine -ErrorAction Stop;
  76. Write-Host "Registering subscription($SubscriptionId) to AFEC";
  77. $Output = Register-AzProviderFeature -FeatureName BulkRegistration -ProviderNamespace Microsoft.SqlVirtualMachine -ErrorAction Stop;
  78. }
  79. Catch {
  80. $message = $_.Exception.Message;
  81. Write-Error "We failed due to complete $SubscriptionId operation because of the following reason: $message";
  82. # Store failed subscriptionId and failure reason.
  83. $FailedRegistration = @{ };
  84. $FailedRegistration.Add("SubscriptionId", $SubscriptionId);
  85. $FailedRegistration.Add("Errormessage", $message);
  86. $FailedRegistrations += New-Object -TypeName psobject -Property $FailedSubscriptionId;
  87. }
  88. };
  89. }
  90. # Failed subscription registration and its reason will be stored in a csv file(RegistrationErrors.csv) for easy analysis.
  91. # The file should be available in current directory where this .ps1 is executed
  92. $FailedRegistrations | Export-Csv -Path RegistrationErrors.csv -NoTypeInformation