Script directory for a PowerShell profile. https://blog.lksz.me/keeping-track-of-everything/#-mypsscriptroot
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

38 lines
1.9 KiB

  1. class SystemName { #: System.Management.Automation.IValidateSetValuesGenerator {
  2. static [string[]] _GetValidValues([string]$wordToComplete,[bool]$CurrentOnly,[bool]$Strict) {
  3. $MyPSScriptRoot = "$global:MyPSScriptRoot";
  4. $local:possibleValues = [ordered]@{}
  5. $possibleValues.out = @()
  6. $possibleValues.Current = @(
  7. $($global:PSVersionTable.OS -split ' '|Select-Object -First 1).Replace('Microsoft','Windows'),
  8. $global:PSVersionTable.Platform,
  9. $global:PSVersionTable.PSEdition
  10. );
  11. $possibleValues.out = $possibleValues.Current
  12. if( -not $CurrentOnly ) {
  13. $possibleValues.Platform = @( 'Windows','Linux','Unix' );
  14. $possibleValues.Edition = @( 'Desktop', 'Core' );
  15. $possibleValues.Exist = Get-ChildItem (Join-Path $MyPSScriptRoot "sys.*") | ForEach-Object { $_.Name -replace 'sys\.','' };
  16. $possibleValues.out += $possibleValues.Platform + $possibleValues.Edition + $possibleValues.Exist
  17. }
  18. $possibleValues.out = $possibleValues.out |
  19. Select-Object -Unique |
  20. Sort-Object {
  21. $local:sortName = "zz_$_";
  22. if( $_ -in $possibleValues.Exist -and $_ -in $possibleValues.Current ) { $sortName[0] = "a" }
  23. elseif( $_ -in $possibleValues.Exist ) { $sortName[0] = "b" }
  24. elseif( $_ -in $possibleValues.Current ) { $sortName[0] = "c" }
  25. if( $_ -in $possibleValues.Platform ) { $sortName[1] = "a" }
  26. if( $_ -in $possibleValues.Edition ) { $sortName[1] = "b" }
  27. $sortName;
  28. }
  29. return $(Get-PossibleArguments -WordToComplete $wordToComplete -FullValueSet $possibleValues.out -Strict:$Strict );
  30. }
  31. [String[]] GetValidValues() {
  32. return [SystemName]::_GetValidValues('',$false,$true)
  33. }
  34. }