Created
April 19, 2017 21:42
-
-
Save davegreen/02487224a8371918520db05235033de7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Register-ArgumentCompleter -CommandName Set-MsolUser -ParameterName UsageLocation -ScriptBlock { | |
Param( | |
$commandName, #The command calling this argument completer. | |
$parameterName, #The parameter currently active for the argument completer. | |
$currentContent, #The current data in the prompt for the parameter specified above. | |
$commandAst, #The full AST for the current command. | |
$fakeBoundParameters #A hashtable of the current parameters on the prompt. | |
) | |
$UsageLocations = @{ | |
'Afghanistan' = 'AF' | |
'Aland Islands' = 'AX' | |
'Albania' = 'AL' | |
'Algeria' = 'DZ' | |
'American Samoa' = 'AS' | |
'Andorra' = 'AD' | |
'Angola' = 'AO' | |
'Anguilla' = 'AI' | |
'Antarctica' = 'AQ' | |
'Antigua and Barbuda' = 'AG' | |
'Argentina' = 'AR' | |
'Armenia' = 'AM' | |
'Aruba' = 'AW' | |
'Australia' = 'AU' | |
'Austria' = 'AT' | |
'Azerbaijan' = 'AZ' | |
'Bahamas' = 'BS' | |
'Bahrain' = 'BH' | |
'Bangladesh' = 'BD' | |
'Barbados' = 'BB' | |
'Belarus' = 'BY' | |
'Belgium' = 'BE' | |
'Belize' = 'BZ' | |
'Benin' = 'BJ' | |
'Bermuda' = 'BM' | |
'Bhutan' = 'BT' | |
'Bolivia' = 'BO' | |
'Bonaire, Sint Eustatius and Saba' = 'BQ' | |
'Bosnia and Herzegovina' = 'BA' | |
'Botswana' = 'BW' | |
'Bouvet Island' = 'BV' | |
'Brazil' = 'BR' | |
'British Indian Ocean Territory' = 'IO' | |
'Brunei Darussalam' = 'BN' | |
'Bulgaria' = 'BG' | |
'Burkina Faso' = 'BF' | |
'Burundi' = 'BI' | |
'Cabo Verde' = 'CV' | |
'Cambodia' = 'KH' | |
'Cameroon' = 'CM' | |
'Canada' = 'CA' | |
'Cayman Islands' = 'KY' | |
'Central African Republic' = 'CF' | |
'Chad' = 'TD' | |
'Chile' = 'CL' | |
'China' = 'CN' | |
'Christmas Island' = 'CX' | |
'Cocos (Keeling) Islands' = 'CC' | |
'Colombia' = 'CO' | |
'Comoros' = 'KM' | |
'Congo' = 'CG' | |
'Congo (DRC)' = 'CD' | |
'Cook Islands' = 'CK' | |
'Costa Rica' = 'CR' | |
"Cote d'Ivoire" = 'CI' | |
'Croatia' = 'HR' | |
'Cuba' = 'CU' | |
'Curacao' = 'CW' | |
'Cyprus' = 'CY' | |
'Czech Republic' = 'CZ' | |
'Denmark' = 'DK' | |
'Djibouti' = 'DJ' | |
'Dominica' = 'DM' | |
'Dominican Republic' = 'DO' | |
'Ecuador' = 'EC' | |
'Egypt' = 'EG' | |
'El Salvador' = 'SV' | |
'Equatorial Guinea' = 'GQ' | |
'Eritrea' = 'ER' | |
'Estonia' = 'EE' | |
'Ethiopia' = 'ET' | |
'Falkland Islands (Malvinas)' = 'FK' | |
'Faroe Islands' = 'FO' | |
'Fiji' = 'FJ' | |
'Finland' = 'FI' | |
'France' = 'FR' | |
'French Guiana' = 'GF' | |
'French Polynesia' = 'PF' | |
'French Southern Territories' = 'TF' | |
'Gabon' = 'GA' | |
'Gambia' = 'GM' | |
'Georgia' = 'GE' | |
'Germany' = 'DE' | |
'Ghana' = 'GH' | |
'Gibraltar' = 'GI' | |
'Greece' = 'GR' | |
'Greenland' = 'GL' | |
'Grenada' = 'GD' | |
'Guadeloupe' = 'GP' | |
'Guam' = 'GU' | |
'Guatemala' = 'GT' | |
'Guernsey' = 'GG' | |
'Guinea' = 'GN' | |
'Guinea-Bissau' = 'GW' | |
'Guyana' = 'GY' | |
'Haiti' = 'HT' | |
'Heard Island and McDonald Islands' = 'HM' | |
'Holy See (Vatican City State)' = 'VA' | |
'Honduras' = 'HN' | |
'Hong Kong' = 'HK' | |
'Hungary' = 'HU' | |
'Iceland' = 'IS' | |
'India' = 'IN' | |
'Indonesia' = 'ID' | |
# Not currently available as a usage location in Office 365 # 'Iran (the Islamic Republic of)' = 'IR' | |
'Iraq' = 'IQ' | |
'Ireland' = 'IE' | |
'Isle of Man' = 'IM' | |
'Israel' = 'IL' | |
'Italy' = 'IT' | |
'Jamaica' = 'JM' | |
'Japan' = 'JP' | |
'Jersey' = 'JE' | |
'Jordan' = 'JO' | |
'Kazakhstan' = 'KZ' | |
'Kenya' = 'KE' | |
'Kiribati' = 'KI' | |
# Not currently available as a usage location in Office 365 # "Korea (the Democratic People's Republic of)" = 'KP' | |
'Korea, Republic of' = 'KR' | |
'Kuwait' = 'KW' | |
'Kyrgyzstan' = 'KG' | |
"Lao People's Democratic Republic" = 'LA' | |
'Latvia' = 'LV' | |
'Lebanon' = 'LB' | |
'Lesotho' = 'LS' | |
'Liberia' = 'LR' | |
'Libya' = 'LY' | |
'Liechtenstein' = 'LI' | |
'Lithuania' = 'LT' | |
'Luxembourg' = 'LU' | |
'Macao' = 'MO' | |
'Macedonia, the former Yugoslav Republic of' = 'MK' | |
'Madagascar' = 'MG' | |
'Malawi' = 'MW' | |
'Malaysia' = 'MY' | |
'Maldives' = 'MV' | |
'Mali' = 'ML' | |
'Malta' = 'MT' | |
'Marshall Islands' = 'MH' | |
'Martinique' = 'MQ' | |
'Mauritania' = 'MR' | |
'Mauritius' = 'MU' | |
'Mayotte' = 'YT' | |
'Mexico' = 'MX' | |
'Micronesia' = 'FM' | |
'Moldova' = 'MD' | |
'Monaco' = 'MC' | |
'Mongolia' = 'MN' | |
'Montenegro' = 'ME' | |
'Montserrat' = 'MS' | |
'Morocco' = 'MA' | |
'Mozambique' = 'MZ' | |
# Not currently available as a usage location in Office 365 # 'Myanmar' = 'MM' | |
'Namibia' = 'NA' | |
'Nauru' = 'NR' | |
'Nepal' = 'NP' | |
'Netherlands' = 'NL' | |
'New Caledonia' = 'NC' | |
'New Zealand' = 'NZ' | |
'Nicaragua' = 'NI' | |
'Niger' = 'NE' | |
'Nigeria' = 'NG' | |
'Niue' = 'NU' | |
'Norfolk Island' = 'NF' | |
'Northern Mariana Islands' = 'MP' | |
'Norway' = 'NO' | |
'Oman' = 'OM' | |
'Pakistan' = 'PK' | |
'Palau' = 'PW' | |
'Palestine, State of' = 'PS' | |
'Panama' = 'PA' | |
'Papua New Guinea' = 'PG' | |
'Paraguay' = 'PY' | |
'Peru' = 'PE' | |
'Philippines' = 'PH' | |
'Pitcairn' = 'PN' | |
'Poland' = 'PL' | |
'Portugal' = 'PT' | |
'Puerto Rico' = 'PR' | |
'Qatar' = 'QA' | |
'Reunion' = 'RE' | |
'Romania' = 'RO' | |
'Russian Federation' = 'RU' | |
'Rwanda' = 'RW' | |
'Saint Barthelemy' = 'BL' | |
'Saint Helena, Ascension and Tristan da Cunha' = 'SH' | |
'Saint Kitts and Nevis' = 'KN' | |
'Saint Lucia' = 'LC' | |
'Saint Martin' = 'MF' | |
'Saint Pierre and Miquelon' = 'PM' | |
'Saint Vincent and the Grenadines' = 'VC' | |
'Samoa' = 'WS' | |
'San Marino' = 'SM' | |
'Sao Tome and Principe' = 'ST' | |
'Saudi Arabia' = 'SA' | |
'Senegal' = 'SN' | |
'Serbia' = 'RS' | |
'Seychelles' = 'SC' | |
'Sierra Leone' = 'SL' | |
'Singapore' = 'SG' | |
'Sint Maarten' = 'SX' | |
'Slovakia' = 'SK' | |
'Slovenia' = 'SI' | |
'Solomon Islands' = 'SB' | |
'Somalia' = 'SO' | |
'South Africa' = 'ZA' | |
'South Georgia and the South Sandwich Islands' = 'GS' | |
'South Sudan ' = 'SS' | |
'Spain' = 'ES' | |
'Sri Lanka' = 'LK' | |
'Sudan' = 'SD' | |
'Suriname' = 'SR' | |
'Svalbard and Jan Mayen' = 'SJ' | |
'Swaziland' = 'SZ' | |
'Sweden' = 'SE' | |
'Switzerland' = 'CH' | |
'Syrian Arab Republic' = 'SY' | |
'Taiwan' = 'TW' | |
'Tajikistan' = 'TJ' | |
'Tanzania' = 'TZ' | |
'Thailand' = 'TH' | |
'Timor-Leste' = 'TL' | |
'Togo' = 'TG' | |
'Tokelau' = 'TK' | |
'Tonga' = 'TO' | |
'Trinidad and Tobago' = 'TT' | |
'Tunisia' = 'TN' | |
'Turkey' = 'TR' | |
'Turkmenistan' = 'TM' | |
'Turks and Caicos Islands' = 'TC' | |
'Tuvalu' = 'TV' | |
'Uganda' = 'UG' | |
'Ukraine' = 'UA' | |
'United Arab Emirates' = 'AE' | |
'United Kingdom' = 'GB' | |
'United States' = 'US' | |
'United States Minor Outlying Islands' = 'UM' | |
'Uruguay' = 'UY' | |
'Uzbekistan' = 'UZ' | |
'Vanuatu' = 'VU' | |
'Venezuela, Bolivarian Republic of' = 'VE' | |
'Viet Nam' = 'VN' | |
'Virgin Islands, British' = 'VG' | |
'Virgin Islands, U.S.' = 'VI' | |
'Wallis and Futuna' = 'WF' | |
'Western Sahara*' = 'EH' | |
'Yemen' = 'YE' | |
'Zambia' = 'ZM' | |
'Zimbabwe' = 'ZW' | |
} | |
$PartialMatches = $UsageLocations.Values.Where({ ($_ -like "$($currentContent)*") }) | |
$PartialMatches | ForEach-Object { | |
$CompletionText = $_ | |
#Expensive... Causes intellisense to time out sometimes on first use for a full search. I will make this completer more efficient at some point. | |
$Item = $UsageLocations.Keys | Where-Object { $UsageLocations[$_] -eq $CompletionText } | |
if ($_ -match '\s') { | |
$CompletionText = "'$_'" | |
} | |
New-Object System.Management.Automation.CompletionResult ( | |
$CompletionText, #Completion text that will show up on the command line. | |
"$($_) ($Item)", #List item text that will show up in intellisense. | |
'ParameterValue', #The type of the completion result. | |
"$($_) ($Item)" #The tooltip info that will show up additionally in intellisense. | |
) | |
} | |
} | |
Register-ArgumentCompleter -CommandName Get-MsolUser, Set-MsolUser -ParameterName UserPrincipalName -ScriptBlock { | |
Param( | |
$commandName, #The command calling this argument completer. | |
$parameterName, #The parameter currently active for the argument completer. | |
$currentContent, #The current data in the prompt for the parameter specified above. | |
$commandAst, #The full AST for the current command. | |
$fakeBoundParameters #A hashtable of the current parameters on the prompt. | |
) | |
if (TestMsolConnection) { | |
$UserData = @{ | |
SearchString = $currentContent | |
EnabledFilter = 'All' | |
} | |
if ($($fakeBoundParameters.Keys) -contains 'TenantId') { | |
$UserData.Add('TenantId', $($fakeBoundParameters.TenantId)) | |
} | |
$Users = Get-MsolUser @UserData | |
$Users | ForEach-Object { | |
$CompletionText = $_.UserPrincipalName | |
if ($_.UserPrincipalName -match '\s') { | |
$CompletionText = "'$($_.UserPrincipalName)'" | |
} | |
New-Object System.Management.Automation.CompletionResult ( | |
$CompletionText, #Completion text that will show up on the command line. | |
"$($_.UserPrincipalName) ($($_.DisplayName)) ($($Tenant.Name))", #List item text that will show up in intellisense. | |
'ParameterValue', #The type of the completion result. | |
"$($_.UserPrincipalName) ($($_.DisplayName)) ($($Tenant.Name))" #The tooltip info that will show up additionally in intellisense. | |
) | |
} | |
} | |
} | |
Register-ArgumentCompleter -CommandName Get-MsolUser, Set-MsolUser -ParameterName TenantId -ScriptBlock { | |
Param( | |
$commandName, #The command calling this argument completer. | |
$parameterName, #The parameter currently active for the argument completer. | |
$currentContent, #The current data in the prompt for the parameter specified above. | |
$commandAst, #The full AST for the current command. | |
$fakeBoundParameters #A hashtable of the current parameters on the prompt. | |
) | |
if (TestMsolConnection) { | |
$Customers = Get-MsolPartnerContract | Where-Object TenantId -Like "$currentContent*" | |
$Customers | ForEach-Object { | |
$CompletionText = $_.TenantId | |
if ($_.TenantId -match '\s') { | |
$CompletionText = "'$($_.TenantId)'" | |
} | |
New-Object System.Management.Automation.CompletionResult ( | |
$CompletionText, #Completion text that will show up on the command line. | |
"$($_.TenantId) ($($_.Name)) ($($_.DefaultDomainName))", #List item text that will show up in intellisense. | |
'ParameterValue', #The type of the completion result. | |
"$($_.TenantId) ($($_.Name)) ($($_.DefaultDomainName))" #The tooltip info that will show up additionally in intellisense. | |
) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment