55using System ;
66using System . Collections ;
77using System . Collections . Generic ;
8+ using System . Linq ;
89using System . Management . Automation ;
910
1011using Dbg = System . Diagnostics . Debug ;
@@ -23,7 +24,7 @@ namespace Microsoft.PowerShell.PSResourceGet.Cmdlets
2324 SupportsShouldProcess = true ,
2425 ConfirmImpact = ConfirmImpact . Low ) ]
2526 public sealed
26- class RegisterPSResourceRepository : PSCmdlet
27+ class RegisterPSResourceRepository : PSCmdlet , IDynamicParameters
2728 {
2829 #region Members
2930
@@ -35,6 +36,7 @@ class RegisterPSResourceRepository : PSCmdlet
3536 private const string PSGalleryParameterSet = "PSGalleryParameterSet" ;
3637 private const string RepositoriesParameterSet = "RepositoriesParameterSet" ;
3738 private Uri _uri ;
39+ private CredentialProviderDynamicParameters _credentialProvider ;
3840
3941 #endregion
4042
@@ -97,12 +99,6 @@ class RegisterPSResourceRepository : PSCmdlet
9799 [ Parameter ( ParameterSetName = NameParameterSet ) ]
98100 public PSCredentialInfo CredentialInfo { get ; set ; }
99101
100- /// <summary>
101- /// Specifies which credential provider to use.
102- /// </summary>
103- [ Parameter ( ParameterSetName = NameParameterSet ) ]
104- public PSRepositoryInfo . CredentialProviderType CredentialProvider { get ; set ; }
105-
106102 /// <summary>
107103 /// When specified, displays the succcessfully registered repository and its information.
108104 /// </summary>
@@ -117,6 +113,21 @@ class RegisterPSResourceRepository : PSCmdlet
117113
118114 #endregion
119115
116+ #region DynamicParameters
117+
118+ public object GetDynamicParameters ( )
119+ {
120+ if ( Uri . Contains ( "pkgs.dev.azure.com" ) || Uri . Contains ( "pkgs.visualstudio.com" ) )
121+ {
122+ _credentialProvider = new CredentialProviderDynamicParameters ( ) ;
123+ return _credentialProvider ;
124+ }
125+
126+ return null ;
127+ }
128+
129+ #endregion
130+
120131 #region Methods
121132
122133 protected override void BeginProcessing ( )
@@ -133,12 +144,7 @@ protected override void ProcessRecord()
133144 repoApiVersion = ApiVersion ;
134145 }
135146
136- PSRepositoryInfo . CredentialProviderType ? repoCredentialProvider = null ;
137- if ( MyInvocation . BoundParameters . ContainsKey ( nameof ( CredentialProvider ) ) )
138- {
139- repoCredentialProvider = CredentialProvider ;
140- }
141-
147+ PSRepositoryInfo . CredentialProviderType credentialProvider = _credentialProvider . CredentialProvider ;
142148
143149 switch ( ParameterSetName )
144150 {
@@ -153,7 +159,7 @@ protected override void ProcessRecord()
153159
154160 try
155161 {
156- items . Add ( RepositorySettings . AddRepository ( Name , _uri , Priority , Trusted , repoApiVersion , CredentialInfo , repoCredentialProvider , Force , this , out string errorMsg ) ) ;
162+ items . Add ( RepositorySettings . AddRepository ( Name , _uri , Priority , Trusted , repoApiVersion , CredentialInfo , credentialProvider , Force , this , out string errorMsg ) ) ;
157163
158164 if ( ! string . IsNullOrEmpty ( errorMsg ) )
159165 {
@@ -367,7 +373,7 @@ private PSRepositoryInfo RepoValidationHelper(Hashtable repo)
367373 }
368374
369375 if ( repo . ContainsKey ( "CredentialProvider" ) &&
370- ( repo [ "CredentialProvider" ] == null || String . IsNullOrEmpty ( repo [ "CredentialProvider" ] . ToString ( ) ) ||
376+ ( String . IsNullOrEmpty ( repo [ "CredentialProvider" ] . ToString ( ) ) ||
371377 ! ( repo [ "CredentialProvider" ] . ToString ( ) . Equals ( "None" , StringComparison . OrdinalIgnoreCase ) ||
372378 repo [ "CredentialProvider" ] . ToString ( ) . Equals ( "AzArtifacts" , StringComparison . OrdinalIgnoreCase ) ) ) )
373379 {
@@ -429,4 +435,13 @@ private PSRepositoryInfo RepoValidationHelper(Hashtable repo)
429435
430436 #endregion
431437 }
438+
439+ public class CredentialProviderDynamicParameters
440+ {
441+ /// <summary>
442+ /// Specifies which credential provider to use.
443+ /// </summary>
444+ [ Parameter ]
445+ public PSRepositoryInfo . CredentialProviderType CredentialProvider { get ; set ; }
446+ }
432447}
0 commit comments