@@ -21,7 +21,7 @@ internal class PSVersionInfo
21
21
internal const string PSVersionName = "PSVersion" ;
22
22
internal const string SerializationVersionName = "SerializationVersion" ;
23
23
internal const string WSManStackVersionName = "WSManStackVersion" ;
24
- private static Hashtable s_psVersionTable = null ;
24
+ private static PSVersionHashTable s_psVersionTable = null ;
25
25
26
26
/// <summary>
27
27
/// A constant to track current PowerShell Version.
@@ -54,7 +54,7 @@ internal class PSVersionInfo
54
54
// Static Constructor.
55
55
static PSVersionInfo ( )
56
56
{
57
- s_psVersionTable = new Hashtable ( StringComparer . OrdinalIgnoreCase ) ;
57
+ s_psVersionTable = new PSVersionHashTable ( StringComparer . OrdinalIgnoreCase ) ;
58
58
59
59
s_psVersionTable [ PSVersionInfo . PSVersionName ] = s_psV6Version ;
60
60
s_psVersionTable [ "PSEdition" ] = PSEditionValue ;
@@ -71,7 +71,7 @@ static PSVersionInfo()
71
71
#endif
72
72
}
73
73
74
- internal static Hashtable GetPSVersionTable ( )
74
+ internal static PSVersionHashTable GetPSVersionTable ( )
75
75
{
76
76
return s_psVersionTable ;
77
77
}
@@ -315,6 +315,43 @@ internal static SemanticVersion PSV6Version
315
315
#endregion
316
316
}
317
317
318
+ /// <summary>
319
+ /// Represents an implementation of '$PSVersionTable' variable.
320
+ /// The implementation contains ordered 'Keys' and 'GetEnumerator' to get user-friendly output.
321
+ /// </summary>
322
+ public sealed class PSVersionHashTable : Hashtable , IEnumerable
323
+ {
324
+ internal PSVersionHashTable ( IEqualityComparer equalityComparer ) : base ( equalityComparer )
325
+ {
326
+ }
327
+
328
+ /// <summary>
329
+ /// Returns ordered collection with Keys of 'PSVersionHashTable'
330
+ /// </summary>
331
+ public override ICollection Keys
332
+ {
333
+ get
334
+ {
335
+ Array arr = new string [ base . Keys . Count ] ;
336
+ base . Keys . CopyTo ( arr , 0 ) ;
337
+ Array . Sort ( arr , StringComparer . OrdinalIgnoreCase ) ;
338
+ return arr ;
339
+ }
340
+ }
341
+
342
+ /// <summary>
343
+ /// Returns an enumerator for 'PSVersionHashTable'.
344
+ /// The enumeration is ordered (based on ordered version of 'Keys').
345
+ /// </summary>
346
+ IEnumerator IEnumerable . GetEnumerator ( )
347
+ {
348
+ foreach ( string key in Keys )
349
+ {
350
+ yield return new System . Collections . DictionaryEntry ( key , this [ key ] ) ;
351
+ }
352
+ }
353
+ }
354
+
318
355
/// <summary>
319
356
/// An implementation of semantic versioning (http://semver.org)
320
357
/// that can be converted to/from <see cref="System.Version"/>.
0 commit comments