EnableBySubscription.psm1 5.1 KB

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