completers/groupSam.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
$groupSam = {
    param(
        $commandName,
        $parameterName,
        $wordToComplete,
        $commandAst,
        $fakeBoundParameter
    )

    $fakeBoundParameter.remove('identity')
    $filter = "{0}*" -f $wordToComplete
    
    Get-ADGroup @fakeBoundParameter -filter { samaccountname -like $filter } |
      ForEach-Object {
          $_ | Return-GroupObject
      }
}

function Return-GroupObject {
    [CMDLetBinding()]
    param(
        [Parameter(ValueFromPipeline)]
        $group
    )

    BEGIN {
        $completers = $script:config.FancyCompleters.group
    }

    PROCESS {
        if ($script:config.UseFancyCompleters) {
            $ListText = & $completers.ListText
            $ToolTip  = & $completers.ToolTip
            New-Object System.Management.Automation.CompletionResult(
                $_.samaccountname,
                $ListText,
                'ParameterValue',
                $ToolTip
            )
        } else {
            New-Object System.Management.Automation.Completionresult(
                $_.samaccountname
            )
        }
    }
}

# Enable for *-ADGroup*
Get-Command *-ADGroup* | ForEach-Object {
    Register-ArgumentCompleter -CommandName $_ -Parameter Identity -ScriptBlock $groupSam
}