1313// ----------------------------------------------------------------------------------
1414
1515using Microsoft . Azure . Commands . KeyVault . Models ;
16+ using Microsoft . Azure . Commands . KeyVault . Models . Secret ;
1617using Microsoft . Azure . Commands . ResourceManager . Common . ArgumentCompleters ;
1718using Microsoft . Azure . Management . Internal . Resources . Utilities . Models ;
19+ using System ;
1820using System . Management . Automation ;
1921using System . Runtime . InteropServices ;
2022using System . Security ;
@@ -30,14 +32,15 @@ public class GetAzureKeyVaultSecret : KeyVaultCmdletBase
3032 private const string ByVaultNameParameterSet = "ByVaultName" ;
3133 private const string BySecretNameParameterSet = "BySecretName" ;
3234 private const string BySecretVersionsParameterSet = "BySecretVersions" ;
35+ private const string BySecretUriParameterSet = "BySecretUri" ;
3336
3437 private const string InputObjectByVaultNameParameterSet = "ByInputObjectVaultName" ;
3538 private const string InputObjectBySecretNameParameterSet = "ByInputObjectSecretName" ;
3639 private const string InputObjectBySecretVersionsParameterSet = "ByInputObjectSecretVersions" ;
3740
38- private const string ResourceIdByVaultNameParameterSet = "ByResourceIdVaultName " ;
39- private const string ResourceIdBySecretNameParameterSet = "ByResourceIdSecretName " ;
40- private const string ResourceIdBySecretVersionsParameterSet = "ByResourceIdSecretVersions " ;
41+ private const string ParentResourceIdByVaultNameParameterSet = "ByParentResourceIdVaultName " ;
42+ private const string ParentResourceIdBySecretNameParameterSet = "ByParentResourceIdSecretName " ;
43+ private const string ParentResourceIdBySecretVersionsParameterSet = "ByParentResourceIdSecretVersions " ;
4144
4245 #endregion
4346
@@ -84,25 +87,38 @@ public class GetAzureKeyVaultSecret : KeyVaultCmdletBase
8487 public PSKeyVault InputObject { get ; set ; }
8588
8689 /// <summary>
87- /// KeyVault Resource ID
90+ /// KeyVault Secret ID
91+ /// </summary>
92+ [ Parameter ( Mandatory = true ,
93+ Position = 0 ,
94+ ParameterSetName = BySecretUriParameterSet ,
95+ HelpMessage = "The URI of the KeyVault Secret." ) ]
96+ [ Alias ( "SecretId" ) ]
97+ [ ValidateNotNullOrEmpty ]
98+ public string Id { get ; set ; }
99+
100+
101+ /// <summary>
102+ /// KeyVault Parent Resource ID
88103 /// </summary>
89104 [ Parameter ( Mandatory = true ,
90105 Position = 0 ,
91106 ValueFromPipelineByPropertyName = true ,
92- ParameterSetName = ResourceIdByVaultNameParameterSet ,
107+ ParameterSetName = ParentResourceIdByVaultNameParameterSet ,
93108 HelpMessage = "KeyVault Resource Id." ) ]
94109 [ Parameter ( Mandatory = true ,
95110 Position = 0 ,
96111 ValueFromPipelineByPropertyName = true ,
97- ParameterSetName = ResourceIdBySecretNameParameterSet ,
112+ ParameterSetName = ParentResourceIdBySecretNameParameterSet ,
98113 HelpMessage = "KeyVault Resource Id." ) ]
99114 [ Parameter ( Mandatory = true ,
100115 Position = 0 ,
101116 ValueFromPipelineByPropertyName = true ,
102- ParameterSetName = ResourceIdBySecretVersionsParameterSet ,
117+ ParameterSetName = ParentResourceIdBySecretVersionsParameterSet ,
103118 HelpMessage = "KeyVault Resource Id." ) ]
119+ [ Alias ( "ResourceId" ) ]
104120 [ ValidateNotNullOrEmpty ]
105- public string ResourceId { get ; set ; }
121+ public string ParentResourceId { get ; set ; }
106122
107123 /// <summary>
108124 /// Secret name
@@ -117,7 +133,7 @@ public class GetAzureKeyVaultSecret : KeyVaultCmdletBase
117133 HelpMessage = "Secret name. Cmdlet constructs the FQDN of a secret from vault name, currently selected environment and secret name." ) ]
118134 [ Parameter ( Mandatory = false ,
119135 Position = 1 ,
120- ParameterSetName = ResourceIdByVaultNameParameterSet ,
136+ ParameterSetName = ParentResourceIdByVaultNameParameterSet ,
121137 HelpMessage = "Secret name. Cmdlet constructs the FQDN of a secret from vault name, currently selected environment and secret name." ) ]
122138 [ Parameter ( Mandatory = true ,
123139 Position = 1 ,
@@ -129,7 +145,7 @@ public class GetAzureKeyVaultSecret : KeyVaultCmdletBase
129145 HelpMessage = "Secret name. Cmdlet constructs the FQDN of a secret from vault name, currently selected environment and secret name." ) ]
130146 [ Parameter ( Mandatory = true ,
131147 Position = 1 ,
132- ParameterSetName = ResourceIdBySecretNameParameterSet ,
148+ ParameterSetName = ParentResourceIdBySecretNameParameterSet ,
133149 HelpMessage = "Secret name. Cmdlet constructs the FQDN of a secret from vault name, currently selected environment and secret name." ) ]
134150 [ Parameter ( Mandatory = true ,
135151 Position = 1 ,
@@ -141,7 +157,7 @@ public class GetAzureKeyVaultSecret : KeyVaultCmdletBase
141157 HelpMessage = "Secret name. Cmdlet constructs the FQDN of a secret from vault name, currently selected environment and secret name." ) ]
142158 [ Parameter ( Mandatory = true ,
143159 Position = 1 ,
144- ParameterSetName = ResourceIdBySecretVersionsParameterSet ,
160+ ParameterSetName = ParentResourceIdBySecretVersionsParameterSet ,
145161 HelpMessage = "Secret name. Cmdlet constructs the FQDN of a secret from vault name, currently selected environment and secret name." ) ]
146162 [ ValidateNotNullOrEmpty ]
147163 [ Alias ( Constants . SecretName ) ]
@@ -160,7 +176,7 @@ public class GetAzureKeyVaultSecret : KeyVaultCmdletBase
160176 Position = 2 ,
161177 HelpMessage = "Secret version. Cmdlet constructs the FQDN of a secret from vault name, currently selected environment, secret name and secret version." ) ]
162178 [ Parameter ( Mandatory = true ,
163- ParameterSetName = ResourceIdBySecretNameParameterSet ,
179+ ParameterSetName = ParentResourceIdBySecretNameParameterSet ,
164180 Position = 2 ,
165181 HelpMessage = "Secret version. Cmdlet constructs the FQDN of a secret from vault name, currently selected environment, secret name and secret version." ) ]
166182 [ Alias ( "SecretVersion" ) ]
@@ -173,7 +189,7 @@ public class GetAzureKeyVaultSecret : KeyVaultCmdletBase
173189 ParameterSetName = InputObjectBySecretVersionsParameterSet ,
174190 HelpMessage = "Specifies whether to include the versions of the secret in the output." ) ]
175191 [ Parameter ( Mandatory = true ,
176- ParameterSetName = ResourceIdBySecretVersionsParameterSet ,
192+ ParameterSetName = ParentResourceIdBySecretVersionsParameterSet ,
177193 HelpMessage = "Specifies whether to include the versions of the secret in the output." ) ]
178194 public SwitchParameter IncludeVersions { get ; set ; }
179195
@@ -184,33 +200,49 @@ public class GetAzureKeyVaultSecret : KeyVaultCmdletBase
184200 ParameterSetName = InputObjectByVaultNameParameterSet ,
185201 HelpMessage = "Specifies whether to show the previously deleted secrets in the output." ) ]
186202 [ Parameter ( Mandatory = false ,
187- ParameterSetName = ResourceIdByVaultNameParameterSet ,
203+ ParameterSetName = ParentResourceIdByVaultNameParameterSet ,
204+ HelpMessage = "Specifies whether to show the previously deleted secrets in the output." ) ]
205+ [ Parameter ( Mandatory = false ,
206+ ParameterSetName = BySecretUriParameterSet ,
188207 HelpMessage = "Specifies whether to show the previously deleted secrets in the output." ) ]
189208 public SwitchParameter InRemovedState { get ; set ; }
190209
191210 [ Parameter ( Mandatory = false , ParameterSetName = BySecretNameParameterSet , HelpMessage = "When set, the cmdlet will convert secret in secure string to the decrypted plaintext string as output." ) ]
192211 [ Parameter ( Mandatory = false , ParameterSetName = ByVaultNameParameterSet ) ]
212+ [ Parameter ( Mandatory = false , ParameterSetName = BySecretUriParameterSet ) ]
193213 [ Parameter ( Mandatory = false , ParameterSetName = InputObjectBySecretNameParameterSet ) ]
194214 [ Parameter ( Mandatory = false , ParameterSetName = InputObjectByVaultNameParameterSet ) ]
195- [ Parameter ( Mandatory = false , ParameterSetName = ResourceIdBySecretNameParameterSet ) ]
196- [ Parameter ( Mandatory = false , ParameterSetName = ResourceIdByVaultNameParameterSet ) ]
215+ [ Parameter ( Mandatory = false , ParameterSetName = ParentResourceIdBySecretNameParameterSet ) ]
216+ [ Parameter ( Mandatory = false , ParameterSetName = ParentResourceIdByVaultNameParameterSet ) ]
197217 public SwitchParameter AsPlainText { get ; set ; }
198218 #endregion
199219
200220 public override void ExecuteCmdlet ( )
201221 {
202222 PSKeyVaultSecret secret ;
203223
224+ // Check input object
204225 if ( InputObject != null )
205226 {
206227 VaultName = InputObject . VaultName . ToString ( ) ;
207228 }
208- else if ( ! string . IsNullOrEmpty ( ResourceId ) )
229+ else if ( ! string . IsNullOrEmpty ( ParentResourceId ) )
230+ {
231+ var parsedParentResourceId = new ResourceIdentifier ( ParentResourceId ) ;
232+ VaultName = parsedParentResourceId . ResourceName ;
233+ }
234+
235+ // Handle SecretId (uri) parameter
236+ if ( ParameterSetName == BySecretUriParameterSet )
209237 {
210- var parsedResourceId = new ResourceIdentifier ( ResourceId ) ;
211- VaultName = parsedResourceId . ResourceName ;
238+ SecretUriComponents splitUri = new SecretUriComponents ( Id ) ;
239+
240+ VaultName = splitUri . VaultName ;
241+ Name = splitUri . SecretName ;
242+ Version = splitUri . SecretVersion ;
212243 }
213244
245+ // Check Version/s of Sceret to get.
214246 if ( ! string . IsNullOrEmpty ( Version ) )
215247 {
216248 secret = DataServiceClient . GetSecret ( VaultName , Name , Version ) ;
0 commit comments