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