17
17
using Microsoft . Azure . Commands . Profile . Models ;
18
18
using Microsoft . Azure . Commands . ResourceManager . Common ;
19
19
using Microsoft . WindowsAzure . Commands . Common ;
20
+ using Microsoft . Azure . Commands . Profile . Properties ;
20
21
21
22
namespace Microsoft . Azure . Commands . Profile
22
23
{
23
24
/// <summary>
24
25
/// Cmdlet to change current Azure context.
25
26
/// </summary>
26
- [ Cmdlet ( VerbsCommon . Set , "AzureRmContext" , DefaultParameterSetName = TenantIdAndSubscriptionIdParameterSet ) ]
27
+ [ Cmdlet ( VerbsCommon . Set , "AzureRmContext" , DefaultParameterSetName = SubscriptionNameParameterSet ) ]
27
28
[ Alias ( "Select-AzureRmSubscription" ) ]
28
29
[ OutputType ( typeof ( PSAzureContext ) ) ]
29
30
public class SetAzureRMContextCommand : AzureRMCmdlet
30
31
{
31
- private const string TenantIdParameterSet = "TenantId" ;
32
- private const string SubscriptionIdParameterSet = "Subscription" ;
33
- private const string TenantIdAndSubscriptionIdParameterSet = "TenantIdAndSubscriptionId" ;
32
+ private const string SubscriptionNameParameterSet = "SubscriptionName" ;
33
+ private const string SubscriptionIdParameterSet = "SubscriptionId" ;
34
34
private const string ContextParameterSet = "Context" ;
35
35
36
- [ Parameter ( ParameterSetName = TenantIdParameterSet , Mandatory = false , HelpMessage = "TenantId name or ID" , ValueFromPipelineByPropertyName = true ) ]
37
- [ Parameter ( ParameterSetName = TenantIdAndSubscriptionIdParameterSet , Mandatory = false , HelpMessage = "TenantId name or ID" , ValueFromPipelineByPropertyName = true ) ]
36
+ [ Parameter ( ParameterSetName = SubscriptionNameParameterSet , Mandatory = false , HelpMessage = "TenantId name or ID" , ValueFromPipelineByPropertyName = true ) ]
37
+ [ Parameter ( ParameterSetName = SubscriptionIdParameterSet , Mandatory = false , HelpMessage = "TenantId name or ID" , ValueFromPipelineByPropertyName = true ) ]
38
38
[ ValidateNotNullOrEmpty ]
39
39
public string TenantId { get ; set ; }
40
-
41
- [ Parameter ( ParameterSetName = SubscriptionIdParameterSet , Mandatory = true , HelpMessage = "Subscription" , ValueFromPipelineByPropertyName = true ) ]
42
- [ Parameter ( ParameterSetName = TenantIdAndSubscriptionIdParameterSet , Mandatory = true , HelpMessage = "Subscription" , ValueFromPipelineByPropertyName = true ) ]
40
+
41
+ [ Parameter ( ParameterSetName = SubscriptionIdParameterSet , Mandatory = true , HelpMessage = "Subscription" , ValueFromPipelineByPropertyName = true ) ]
43
42
[ ValidateNotNullOrEmpty ]
44
43
public string SubscriptionId { get ; set ; }
45
44
46
- [ Parameter ( ParameterSetName = SubscriptionIdParameterSet , Mandatory = false , HelpMessage = "Subscription Name" , ValueFromPipelineByPropertyName = true ) ]
47
- [ Parameter ( ParameterSetName = TenantIdAndSubscriptionIdParameterSet , Mandatory = false , HelpMessage = "Subscription Name" , ValueFromPipelineByPropertyName = true ) ]
45
+ [ Parameter ( ParameterSetName = SubscriptionNameParameterSet , Mandatory = true , HelpMessage = "Subscription Name" , ValueFromPipelineByPropertyName = true ) ]
48
46
[ ValidateNotNullOrEmpty ]
49
- public string SubscriptionName { get ; set ; }
50
-
51
- [ Parameter ( ParameterSetName = ContextParameterSet , Mandatory = true , HelpMessage = "Context" , ValueFromPipeline = true ) ]
47
+ public string SubscriptionName { get ; set ; }
48
+
49
+ [ Parameter ( ParameterSetName = ContextParameterSet , Mandatory = true , HelpMessage = "Context" , ValueFromPipeline = true ) ]
52
50
public PSAzureContext Context { get ; set ; }
53
51
54
52
protected override void ProcessRecord ( )
@@ -58,14 +56,40 @@ protected override void ProcessRecord()
58
56
AzureRmProfileProvider . Instance . Profile . SetContextWithCache ( new AzureContext ( Context . Subscription , Context . Account ,
59
57
Context . Environment , Context . Tenant ) ) ;
60
58
}
61
- else
59
+ else if ( ParameterSetName == SubscriptionNameParameterSet )
62
60
{
63
61
var profileClient = new RMProfileClient ( AzureRmProfileProvider . Instance . Profile ) ;
64
- profileClient . SetCurrentContext ( SubscriptionId , TenantId ) ;
65
- if ( ! string . IsNullOrWhiteSpace ( SubscriptionName ) )
62
+ AzureSubscription subscription = null ;
63
+ string tenantId = AzureRmProfileProvider . Instance . Profile . Context . Tenant . Id . ToString ( ) ;
64
+
65
+ if ( string . IsNullOrWhiteSpace ( TenantId ) )
66
+ {
67
+ WriteVerbose (
68
+ string . Format (
69
+ Resources . CurrentTenantInUse ,
70
+ tenantId ) ) ;
71
+ }
72
+ else
66
73
{
67
- AzureRmProfileProvider . Instance . Profile . Context . Subscription . Name = SubscriptionName ;
74
+ tenantId = TenantId ;
68
75
}
76
+
77
+ if ( ! profileClient . TryGetSubscriptionByName (
78
+ tenantId ,
79
+ SubscriptionName ,
80
+ out subscription ) )
81
+ {
82
+ throw new ItemNotFoundException (
83
+ string . Format ( Resources . SubscriptionNameNotFoundError , SubscriptionName ) ) ;
84
+ }
85
+
86
+ profileClient . SetCurrentContext ( subscription . Id . ToString ( ) , tenantId , verifySubscription : false ) ;
87
+ AzureRmProfileProvider . Instance . Profile . Context . Subscription . Name = SubscriptionName ;
88
+ }
89
+ else if ( ParameterSetName == SubscriptionIdParameterSet )
90
+ {
91
+ var profileClient = new RMProfileClient ( AzureRmProfileProvider . Instance . Profile ) ;
92
+ profileClient . SetCurrentContext ( SubscriptionId , TenantId ) ;
69
93
}
70
94
WriteObject ( ( PSAzureContext ) AzureRmProfileProvider . Instance . Profile . Context ) ;
71
95
}
0 commit comments