Private/SDPRequestCompleters.ps1
|
$script:SDPCompletionCache = @{} $sdpCompleters = @( @{ Parameter = 'StatusName'; Endpoint = 'statuses'; Key = 'statuses'; Commands = @('New-SDPRequest', 'Set-SDPRequest', 'New-SDPRequestTask', 'Set-SDPRequestTask') } @{ Parameter = 'PriorityName'; Endpoint = 'priorities'; Key = 'priorities'; Commands = @('New-SDPRequest', 'Set-SDPRequest', 'New-SDPRequestTask', 'Set-SDPRequestTask') } @{ Parameter = 'UrgencyName'; Endpoint = 'urgencies'; Key = 'urgencies'; Commands = @('New-SDPRequest', 'Set-SDPRequest') } @{ Parameter = 'ImpactName'; Endpoint = 'impacts'; Key = 'impacts'; Commands = @('New-SDPRequest', 'Set-SDPRequest') } @{ Parameter = 'CategoryName'; Endpoint = 'categories'; Key = 'categories'; Commands = @('New-SDPRequest', 'Set-SDPRequest') } @{ Parameter = 'SiteName'; Endpoint = 'sites'; Key = 'sites'; Commands = @('New-SDPRequest', 'Set-SDPRequest') } @{ Parameter = 'ModeName'; Endpoint = 'modes'; Key = 'modes'; Commands = @('New-SDPRequest') } @{ Parameter = 'LevelName'; Endpoint = 'levels'; Key = 'levels'; Commands = @('New-SDPRequest') } @{ Parameter = 'RequestTypeName'; Endpoint = 'request_types'; Key = 'request_types'; Commands = @('New-SDPRequest') } @{ Parameter = 'GroupName'; Endpoint = 'support_groups'; Key = 'support_groups'; Commands = @('New-SDPRequest', 'Set-SDPRequest', 'New-SDPRequestTask', 'Set-SDPRequestTask') } @{ Parameter = 'TechnicianName'; Endpoint = 'technicians'; Key = 'technicians'; Commands = @('New-SDPRequest', 'Set-SDPRequest') } @{ Parameter = 'OwnerName'; Endpoint = 'technicians'; Key = 'technicians'; Commands = @('New-SDPRequestTask', 'Set-SDPRequestTask', 'New-SDPRequestWorklog', 'Set-SDPRequestWorklog') } ) foreach ($completer in $sdpCompleters) { $sdpEndpoint = $completer.Endpoint $sdpKey = $completer.Key $sdpCache = $script:SDPCompletionCache $sb = { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) if (-not $sdpCache.ContainsKey($sdpEndpoint)) { try { $r = Invoke-SDPRestMethod -Endpoint $sdpEndpoint $sdpCache[$sdpEndpoint] = @($r.$sdpKey | ForEach-Object { $_.name } | Where-Object { $_ }) } catch { $sdpCache[$sdpEndpoint] = @() } } $sdpCache[$sdpEndpoint] | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object { $completionText = if ($_ -match '\s') { "'$_'" } else { $_ } [System.Management.Automation.CompletionResult]::new($completionText, $_, 'ParameterValue', $_) } }.GetNewClosure() Register-ArgumentCompleter -CommandName $completer.Commands -ParameterName $completer.Parameter -ScriptBlock $sb } |