@@ -41,6 +41,7 @@ $ArcIntegrationNotAvailableForCloudError = "Azure Arc for Server integration is
41
41
$ArcNeedsToBeEnabledError = " Azure Arc for servers integration can't be disabled. Skip the parameter '-EnableAzureArcServer' or Specify '-EnableAzureArcServer:`$ true' in Register-AzStackHCI Cmdlet to register."
42
42
$ArcAADAppCreationMessage = " Creating AAD application for onboarding ARC"
43
43
$FetchingRegistrationState = " Checking whether the cluster is already registered"
44
+ $CheckingDependentModules = " Checking whether the required modules are installed"
44
45
$ValidatingParametersFetchClusterName = " Validating cmdlet parameters"
45
46
$ValidatingParametersRegisteredInfo = " Validating the parameters and checking registration information"
46
47
$RegisterProgressActivityName = " Registering Azure Stack HCI with Azure..."
@@ -77,6 +78,7 @@ $VerifyingArcMessage = "Verifying Azure Arc for Servers registration"
77
78
$WaitingUnregisterMessage = " Disabling Azure Arc integration on every clustered node"
78
79
$CleanArcMessage = " Cleaning up Azure Arc integration"
79
80
81
+ $MissingDependentModulesError = " Can't find PowerShell module(s): {0}. Please install the missing module(s) using 'Install-Module -Name <Module_Name>' and try again."
80
82
$ArcAlreadyEnabledInADifferentResourceError = " Below mentioned cluster node(s) are already Arc enabled with a different ARM Resource Id:`n {0}`n Disconnect Arc agent on these nodes and run Register-AzStackHCI again."
81
83
82
84
$ArcAgentRolesInsufficientPreviligeMessage = " Failed to assign required roles for Azure Arc integration. Your Azure AD account must be an Owner or User Access Administrator in the subscription to enable Azure Arc integration."
@@ -242,8 +244,8 @@ $ArcSettingsDisableInProgressState = "DisableInProgress"
242
244
$ClusterAgentServiceName = " HciClusterAgentSvc"
243
245
$ClusterAgentGroupName = " Cloud Management"
244
246
245
- $AzAccountsModuleVersion = " 2.10 .2"
246
- $AzResourcesModuleVersion = " 6.2.0"
247
+ $AzAccountsModuleMinVersion = " 2.11 .2"
248
+ $AzResourcesModuleMinVersion = " 6.2.0"
247
249
248
250
Function Write-Log {
249
251
[Microsoft.Azure.PowerShell.Cmdlets.StackHCI.DoNotExportAttribute ()]
@@ -932,33 +934,65 @@ param(
932
934
return " /Subscriptions/" + $SubscriptionId + " /resourceGroups/" + $ResourceGroupName + " /providers/Microsoft.AzureStackHCI/clusters/" + $ResourceName
933
935
}
934
936
935
- function Install-Dependent-Module {
936
- param (
937
- [string ] $ModuleName ,
938
- [string ] $ModuleVersion
937
+ function Import-DependentModule
938
+ {
939
+ param (
940
+ [string ] $ModuleName ,
941
+ [string ] $MinVersion
939
942
)
940
- try
943
+ $module = Get-Module - Name $ModuleName
944
+ if ((-not $module ) -or ($module.Version -lt [System.Version ]$MinVersion ))
941
945
{
942
- Import-Module - Name $ModuleName - RequiredVersion $ModuleVersion - ErrorAction Stop
943
- Write-VerboseLog (" Found required Module: {0} version: {1}" -f $ModuleName , $ModuleVersion )
944
- }
945
- catch
946
- {
947
- try
946
+ Write-VerboseLog " Required module $ModuleName (minimum version: $MinVersion ) is not imported"
947
+ try
948
948
{
949
- Import-PackageProvider - Name Nuget - MinimumVersion " 2.8.5.201" - ErrorAction Stop
949
+ # Adding this statement to clear all the versions that exist in the current PS session
950
+ Remove-Module - Name $ModuleName - ErrorAction Ignore
951
+
952
+ Import-Module - Name $ModuleName - MinimumVersion $MinVersion
950
953
}
951
954
catch
952
955
{
953
- Install-PackageProvider NuGet - Force | Out-Null
956
+ Write-WarnLog " $_ .Exception"
957
+ Write-VerboseLog " Required module $ModuleName (minimum version: $MinVersion ) is missing"
958
+ throw (" $ModuleName (minimum version: $MinVersion )" )
954
959
}
960
+ }
961
+ }
955
962
956
- Write-VerboseLog (" Installing Module: {0} version: {1}" -f $ModuleName , $ModuleVersion )
963
+ function Check-DependentModules
964
+ {
965
+ param ()
957
966
958
- Install-Module - Name $ModuleName - RequiredVersion $ModuleVersion - Force - AllowClobber - Repository ' PSGallery'
959
- Import-Module - Name $ModuleName - RequiredVersion $ModuleVersion
960
-
961
- Write-VerboseLog (" Successfully imported Module: {0} version: {1}" -f $ModuleName , $ModuleVersion )
967
+ $missingDependentModules = [System.Collections.ArrayList ]::new()
968
+
969
+ # Checking if Az.Accounts is imported
970
+ try
971
+ {
972
+ Write-VerboseLog " Importing dependent module Az.Accounts"
973
+ Import-DependentModule - ModuleName " Az.Accounts" - MinVersion $AzAccountsModuleMinVersion
974
+ }
975
+ catch
976
+ {
977
+ $missingDependentModules.Add ($_.Exception.Message ) | Out-Null
978
+ }
979
+
980
+ # Checking if Az.Resources is imported
981
+ try
982
+ {
983
+ Write-VerboseLog " Importing dependent module Az.Resources"
984
+ Import-DependentModule - ModuleName " Az.Resources" - MinVersion $AzResourcesModuleMinVersion
985
+ }
986
+ catch
987
+ {
988
+ $missingDependentModules.Add ($_.Exception.Message ) | Out-Null
989
+ }
990
+
991
+ if ($missingDependentModules.Length -gt 0 )
992
+ {
993
+ $missingDependentModules = $missingDependentModules -join " , "
994
+ $MissingDependentModulesExceptionMessage = $MissingDependentModulesError -f $missingDependentModules
995
+ throw $MissingDependentModulesExceptionMessage
962
996
}
963
997
}
964
998
@@ -977,9 +1011,7 @@ param(
977
1011
)
978
1012
979
1013
Write-Progress - Id $MainProgressBarId - activity $ProgressActivityName - status $InstallAzResourcesMessage - percentcomplete 10
980
-
981
- Install-Dependent - Module - ModuleName " Az.Accounts" - ModuleVersion $AzAccountsModuleVersion
982
- Install-Dependent - Module - ModuleName " Az.Resources" - ModuleVersion $AzResourcesModuleVersion
1014
+
983
1015
Write-Progress - Id $MainProgressBarId - activity $ProgressActivityName - status $LoggingInToAzureMessage - percentcomplete 30
984
1016
985
1017
if ($EnvironmentName -eq $AzurePPE )
@@ -2438,15 +2470,6 @@ param(
2438
2470
$registrationOutput = New-Object - TypeName PSObject
2439
2471
$operationStatus = [OperationStatus ]::Unused
2440
2472
2441
- try
2442
- {
2443
- Import-PackageProvider - Name Nuget - MinimumVersion " 2.8.5.201" - ErrorAction Stop
2444
- }
2445
- catch
2446
- {
2447
- Install-PackageProvider NuGet - Force | Out-Null
2448
- }
2449
-
2450
2473
Show-LatestModuleVersion
2451
2474
2452
2475
if ([string ]::IsNullOrEmpty($ComputerName ))
@@ -2459,7 +2482,10 @@ param(
2459
2482
$IsManagementNode = $True
2460
2483
}
2461
2484
2462
- Write-Progress - Id $MainProgressBarId - activity $RegisterProgressActivityName - status $FetchingRegistrationState - percentcomplete 1
2485
+ Write-Progress - Id $MainProgressBarId - activity $RegisterProgressActivityName - status $CheckingDependentModules - percentcomplete 1
2486
+ Check- DependentModules
2487
+
2488
+ Write-Progress - Id $MainProgressBarId - activity $RegisterProgressActivityName - status $FetchingRegistrationState - percentcomplete 2
2463
2489
if ($IsManagementNode )
2464
2490
{
2465
2491
Write-VerboseLog (" Connecting via Management Node" )
@@ -3546,8 +3572,10 @@ param(
3546
3572
Write-VerboseLog (" Overriding RP API version for MC cloud to 2022-09-01" )
3547
3573
$RPAPIVersion = " 2022-09-01"
3548
3574
}
3549
-
3550
- Write-Progress - Id $MainProgressBarId - activity $UnregisterProgressActivityName - status $FetchingRegistrationState - percentcomplete 1
3575
+ Write-Progress - Id $MainProgressBarId - activity $UnregisterProgressActivityName - status $CheckingDependentModules - percentcomplete 1
3576
+ Check- DependentModules
3577
+
3578
+ Write-Progress - Id $MainProgressBarId - activity $UnregisterProgressActivityName - status $FetchingRegistrationState - percentcomplete 2
3551
3579
Write-VerboseLog ($UnregisterProgressActivityName )
3552
3580
$msg = Print- FunctionParameters - Message " Unregister-AzStackHCI" - Parameters $PSBoundParameters
3553
3581
Write-NodeEventLog - Message $msg - EventID 9009 - IsManagementNode $IsManagementNode - credentials $Credential - ComputerName $ComputerName
@@ -4167,14 +4195,18 @@ param(
4167
4195
{
4168
4196
$isManagementNode = $true
4169
4197
}
4170
-
4198
+
4171
4199
# To be removed after ARM rollout to MC cloud is complete
4172
4200
if ( $EnvironmentName -eq $AzureChinaCloud )
4173
4201
{
4174
4202
Write-VerboseLog (" Overriding RP API version for MC cloud to 2022-09-01" )
4175
4203
$RPAPIVersion = " 2022-09-01"
4176
4204
}
4177
-
4205
+
4206
+ Write-Progress - Id $MainProgressBarId - Activity $SetProgressActivityName - Status $CheckingDependentModules - PercentComplete 2
4207
+ Check- DependentModules
4208
+
4209
+
4178
4210
Write-Progress - Id $MainProgressBarId - Activity $SetProgressActivityName - Status $SetProgressStatusGathering - PercentComplete 5
4179
4211
4180
4212
if ($PSBoundParameters.ContainsKey (' ResourceId' ) -eq $false )
@@ -4283,11 +4315,6 @@ param(
4283
4315
4284
4316
$TenantId = Azure- Login @azureLoginParameters
4285
4317
}
4286
- else
4287
- {
4288
- Install-Dependent - Module - ModuleName " Az.Accounts" - ModuleVersion $AzAccountsModuleVersion
4289
- Install-Dependent - Module - ModuleName " Az.Resources" - ModuleVersion $AzResourcesModuleVersion
4290
- }
4291
4318
4292
4319
$armResource = Get-AzResource - ResourceId $armResourceId - ExpandProperties - ApiVersion $RPAPIVersion - ErrorAction Stop
4293
4320
0 commit comments