completers/userSam.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
53
54
55
56
57
58
59
60
61
62
63
$userSam = {
    param(
        $commandName,
        $parameterName,
        $wordToComplete,
        $commandAst,
        $fakeBoundParameter
    )

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

function Return-UserObject {
    [CMDLetBinding()]
    param(
        [Parameter(ValueFromPipeline)]
        $user
    )

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

    PROCESS {
        $_ | Where-Object {
            if ($script:config.ShowDisabled) {
                $_
            } else {
                $_.enabled
            }
        } | ForEach-Object {
            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 *-ADAccount and *-ADUser
Get-Command *-ADAccount | ForEach-Object {
    Register-ArgumentCompleter -CommandName $_ -Parameter Identity -ScriptBlock $userSam
}
Get-Command *-ADUser | ForEach-Object {
    Register-ArgumentCompleter -CommandName $_ -Parameter Identity -ScriptBlock $userSam
}