Private/Get-OneNoteNotebookNameCompletion.ps1

#
# .SYNOPSIS
# Provides argument completion for OneNote notebook names.
#
# .DESCRIPTION
# Internal function used by Register-ArgumentCompleter to provide tab completion
# for notebook name parameters.
#
function Get-OneNoteNotebookNameCompletion {
    param(
        $CommandName,
        $ParameterName,
        $WordToComplete,
        $CommandAst,
        $FakeBoundParameters
    )

    $hsNotebooks = 2 # HierarchyScope.hsNotebooks

    Use-ComObject -ProgId OneNote.Application -Script {
        param($app)

        (Get-OneNoteHierarchy -Scope $hsNotebooks -App $app).Notebooks.Notebook |
        Where-Object -FilterScript {
            $toMatch = $WordToComplete -replace "'", ''
            $_.Name -like $toMatch -or
            $_.Name.StartsWith($toMatch, [StringComparison]::OrdinalIgnoreCase)
        } |
        New-OneNoteCompletion
    }
}