src/completers.ps1
function doComplete ($completerArgs, $endPoint, $type, $clusterParam) { $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters = $completerArgs $session, $cluster = defineSessionAndCluster switch ($type) { 'name' { completeName } 'prop' { completeProp } 'filter' { completeFilter } default { Write-Host "`nWrong type $type of completer in $commandName - $parameterName" -ForegroundColor Red } } } function fillFunc ($funcStr, $completerArgs, $fakeArg) { $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters = $completerArgs # invoke given function # & (Get-ChildItem ('Function:' + $funcStr)) try { if($fakeArg){ &($funcStr) ($fakeBoundParameters."$fakeArg") }else{ &($funcStr) } } catch { Write-Host "`nWrong function $funcStr of completer in $commandName - $parameterName" -ForegroundColor Red } } function completeRSnapSets ($RPsessionName) { $extraProps = 'protection-session-id='+$RPsessionName $endPoint = 'r-snapshot-sets' $session, $cluster = defineSessionAndCluster completeName } function completeEntityName ($completerArgs, $paramName) { $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters = $completerArgs $selectedEntity = $fakeBoundParameters."$paramName" $endPoint = switch ($selectedEntity) { 'Volume' { 'volumes' } 'ConsistencyGroup' { 'consistency-groups' } 'Snapshot' { 'snapshots' } 'SnapshotSet' { 'snapshot-sets' } 'SnapSet' { 'snapshot-sets' } 'InitiatorGroup' { 'initiator-groups' } 'Initiator' { 'initiators' } default { Write-Host "`nWrong type $paramName of completer in $commandName - $parameterName" -ForegroundColor Red } } $session, $cluster = defineSessionAndCluster completeName } # xmsInitiatorGroupCreate function completeName() { $props = 'prop=name' if ($extraProps){ $props = 'prop=name'+'&'+$extraProps } if ($wordToComplete) { $filter = "name:like:" + $wordToComplete # $vals = (Invoke-XtremGetRequest "/types/$endPoint" name -filter $filter).name $vals = (NewXtremRequest -Method GET -Session $session -XtremClusterName $cluster -Endpoint "/types/$endPoint" -Properties name -GetProperty $extraProps -Filters $filter).name } else { $vals = getCachedResourse ("/types/$endPoint") $props 7 } if (!$vals) { return '' } $vals = ($vals | where { $_ -ne '' }) $vals = removeEntredVals $commandAst $vals if (!$vals) { return '' } [array]::Reverse($vals) $vals = sortLastUsedFirst $vals $vals | Where-Object { $_ -like "$wordToComplete*" } } function completeProp() { $aVol = getCachedResourse ("/types/$endPoint/1") 'full=1' 999 if (!$aVol) { return '' } $vals = [System.Collections.ArrayList]@() $currValueArr = ($commandAst -replace ".+ ", '') -split ',' foreach ($p in $aVol.PSObject.Properties) { if ($currValueArr -contains $p.Name) { continue } [void]$vals.Add($p.Name) } if (!$vals) { return '' } $vals = sortLastUsedFirst $vals $vals | Where-Object { $_ -like "$wordToComplete*" } } function completeFilter() { $wtc1, $wtc2, $wtc3 = $wordToComplete -split ':' $vals = [System.Collections.ArrayList]@() if ($wtc3 -or $wordToComplete -match ".+:.+:.*") { return $wordToComplete } elseif ($wordToComplete -notlike "*:*") { # first part of filter "first:second:third" $aVol = getCachedResourse ("/types/$endPoint/1") 'full=1' 999 if (!$aVol) { return '' } foreach ($p in $aVol.PSObject.Properties) { [void]$vals.Add($p.Name) } if (!$vals) { return '' } $vals = addLastUsedPropsAndFilters $vals $vals += '*:like:*', '*:eq:*' , '*:lt:*', '*:le:*', '*:gt:*', '*:ge:*' } elseif ($wtc1 -and $wordToComplete -like "*:*") { # second part of filter $vals = "$wtc1`:like", "$wtc1`:eq", "$wtc1`:lt", "$wtc1`:le", "$wtc1`:gt", "$wtc1`:ge" $vals = addLastUsedPropsAndFilters $vals 'second' } $vals | Where-Object { $_ -like "$wordToComplete*" } } function completeClusterName{ $vals = getAllClustersList if (!$vals) { return '' } $vals = removeEntredVals $commandAst $vals if (!$vals) { return '' } $vals = sortLastUsedFirst $vals $vals | Where-Object { $_ -like "$wordToComplete*" } } function completeSessionClusters { if ($XtremDefaultSessionObject) { $vals = $XtremDefaultSessionObject._XtremClustersTable.psobject.properties.value $vals = removeCurrentClusterName($vals) if ($vals) { $vals | Where-Object { $_ -like "$wordToComplete*" } } } else { '' } } # function invokeCompleter () { # ' '; (New-Object -ComObject wscript.shell).SendKeys('{backspace}{tab}') # } function completeSessions { $vals = readSessionsTo('keys') if ($vals -and ($commandName -eq 'Select-XtremSession')) { $vals = removeCurrentSessionName($vals) } if (!$vals) { return "`nNo sessions. Please call New-XtremSession command to create one." } else { $vals | Where-Object { $_ -like "$wordToComplete*" } } } |