Register-ArgumentCompleter

Özel bir bağımsız değişken tamlayıcı kaydeder.

Syntax

Register-ArgumentCompleter
        -CommandName <String[]>
        -ScriptBlock <ScriptBlock>
        [-Native]
        [<CommonParameters>]
Register-ArgumentCompleter
        [-CommandName <String[]>]
        -ParameterName <String>
        -ScriptBlock <ScriptBlock>
        [<CommonParameters>]

Description

cmdlet'i Register-ArgumentCompleter özel bir bağımsız değişken tamlayıcı kaydeder. Bağımsız değişken tamamlayıcı, belirttiğiniz herhangi bir komut için çalışma zamanında dinamik sekme tamamlama sağlamanıza olanak tanır.

Örnekler

Örnek 1: Özel bağımsız değişken tamlayıcı kaydetme

Aşağıdaki örnek, cmdlet'in Id parametresi için bir bağımsız değişken tamamlayıcı kaydederSet-TimeZone.

$scriptBlock = {
    param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)

    (Get-TimeZone -ListAvailable).Id | Where-Object {
        $_ -like "$wordToComplete*"
    } | ForEach-Object {
          "'$_'"
    }
}
Register-ArgumentCompleter -CommandName Set-TimeZone -ParameterName Id -ScriptBlock $scriptBlock

İlk komut, kullanıcı Sekme tuşuna bastığında geçirilen gerekli parametreleri alan bir betik bloğu oluşturur. Daha fazla bilgi için ScriptBlock parametre açıklamasına bakın.

Betik bloğunda, id için kullanılabilir değerler cmdlet'i Get-TimeZone kullanılarak alınır. Her Saat Dilimi için Id özelliği cmdlet'ine Where-Object aktarılır. Cmdlet, Where-Object tarafından $wordToCompletesağlanan değerle başlamayan kimlikleri filtreler. Bu, kullanıcının Sekme tuşuna basmadan önce yazdığı metni temsil eder. Filtrelenen kimlikler, değer boşluk içeriyorsa her değeri tırnak içine alan cmdlet'ine yönlendirilirForEach-Object.

İkinci komut scriptblock, ParameterName Id ve CommandNameSet-TimeZone değerlerini geçirerek bağımsız değişken tamlayıcısını kaydeder.

Örnek 2: Sekme tamamlama değerlerinize ayrıntı ekleme

Aşağıdaki örnek, cmdlet'in Name parametresi için sekme tamamlamanın Stop-Service üzerine yazar ve yalnızca çalışan hizmetleri döndürür.

$s = {
    param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
    $services = Get-Service | Where-Object {$_.Status -eq "Running" -and $_.Name -like "$wordToComplete*"}
    $services | ForEach-Object {
        New-Object -Type System.Management.Automation.CompletionResult -ArgumentList $_.Name,
            $_.Name,
            "ParameterValue",
            $_.Name
    }
}
Register-ArgumentCompleter -CommandName Stop-Service -ParameterName Name -ScriptBlock $s

İlk komut, kullanıcı Sekme tuşuna bastığında geçirilen gerekli parametreleri alan bir betik bloğu oluşturur. Daha fazla bilgi için ScriptBlock parametre açıklamasına bakın.

Betik bloğunda, ilk komut cmdlet'ini Where-Object kullanarak çalışan tüm hizmetleri alır. Hizmetler cmdlet'ine ForEach-Object geçirilir. ForEach-Object cmdlet'i yeni bir System.Management.Automation.CompletionResult nesnesi oluşturur ve bunu geçerli hizmetin adıyla doldurur (işlem hattı değişkeniyle $_.Nametemsil edilir).

CompletionResult nesnesi, döndürülen her değere ek ayrıntılar sağlamanıza olanak tanır:

  • completionText (Dize) - Otomatik tamamlama sonucu olarak kullanılacak metin. Bu, komuta gönderilen değerdir.
  • listItemText (Dize) - Kullanıcının Ctrl+Ara Çubuğu'na basması gibi bir listede görüntülenecek metin. Bu yalnızca görüntüleme için kullanılır ve seçildiğinde komuta geçirılmaz.
  • resultType (CompletionResultType) - Tamamlanma sonucunun türü.
  • toolTip (Dize) - Nesne hakkında görüntülenecek ayrıntıları içeren araç ipucu metni. Bu, kullanıcı Ctrl+Ara Çubuğu'na bastıktan sonra bir öğe seçtiğinde görünür.

Son komut, durdurulan hizmetlerin cmdlet'e Stop-Service el ile geçirilebileceğini gösterir. Etkilenen tek yön sekme tamamlamadır.

Örnek 3: Özel yerel bağımsız değişken tamlayıcıyı kaydetme

Yerel komut için sekme tamamlama sağlamak için Native parametresini kullanabilirsiniz. Aşağıdaki örnek, Komut Satırı Arabirimi (CLI) için dotnet sekme tamamlama ekler.

Not

Komut dotnet complete yalnızca dotnet cli 2.0 ve üzeri sürümlerde kullanılabilir.

$scriptblock = {
    param($wordToComplete, $commandAst, $cursorPosition)
        dotnet complete --position $cursorPosition $commandAst.ToString() | ForEach-Object {
            [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
        }
}
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock $scriptblock

İlk komut, kullanıcı Sekme tuşuna bastığında geçirilen gerekli parametreleri alan bir betik bloğu oluşturur. Daha fazla bilgi için ScriptBlock parametre açıklamasına bakın.

Komut dosyası bloğunda dotnet complete , sekme tamamlama işlemini gerçekleştirmek için komutu kullanılır. Sonuçlar, her değer için ForEach-Object yeni bir CompletionResult nesnesi oluşturmak üzere System.Management.Automation.CompletionResult sınıfının yenistatik yöntemini kullanan cmdlet'ine aktarılır.

Parametreler

-CommandName

Komutların adını dizi olarak belirtir.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Native

Bağımsız değişken tamamlayıcının, PowerShell'in parametre adlarını tamamlayamadığı yerel bir komut için olduğunu gösterir.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ParameterName

Bağımsız değişkeni tamamlanan parametrenin adını belirtir. Belirtilen parametre adı, cmdlet'in ForegroundColor parametresi Write-Host gibi numaralandırılmış bir değer olamaz.

Sabit listeleri hakkında daha fazla bilgi için bkz . about_Enum.

Type:String
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-ScriptBlock

Sekme tamamlama gerçekleştirmek için çalıştırılacak komutları belirtir. Sağladığınız betik bloğu, girişi tamamlayan değerleri döndürmelidir. Betik bloğunun işlem hattı (ForEach-Object, Where-Objectvb.) veya başka bir uygun yöntem kullanarak değerlerin kaydını kaldırması gerekir. Bir değer dizisi döndürmek, PowerShell'in tüm diziyi tek sekme tamamlama değeri olarak ele almasına neden olur.

Betik bloğu aşağıdaki parametreleri aşağıda belirtilen sırayla kabul etmelidir. PowerShell değerleri konuma göre geçirdiğinden parametrelerin adları önemli değildir.

  • $commandName (Konum 0) - Bu parametre, betik bloğunun sekme tamamlama sağladığı komutun adına ayarlanır.
  • $parameterName (Konum 1) - Bu parametre, değeri sekme tamamlama gerektiren parametreye ayarlanır.
  • $wordToComplete(Konum 2) - Bu parametre, kullanıcının Sekme tuşuna basmadan önce sağladığı değere ayarlanır. Betik bloğunuz sekme tamamlama değerlerini belirlemek için bu değeri kullanmalıdır.
  • $commandAst (Konum 3) - Bu parametre, geçerli giriş satırı için Soyut Söz Dizimi Ağacı 'na (AST) ayarlanır. Daha fazla bilgi için bkz . Ast Sınıfı.
  • $fakeBoundParameters(Konum 4) - Bu parametre, kullanıcı Sekme tuşuna basmadan önce cmdlet'ini içeren $PSBoundParameters bir karma tabloya ayarlanır. Daha fazla bilgi için bkz. about_Automatic_Variables.

Native parametresini belirttiğinizde, betik bloğu aşağıdaki parametreleri belirtilen sırada almalıdır. PowerShell değerleri konuma göre geçirdiğinden parametrelerin adları önemli değildir.

  • $wordToComplete(Konum 0) - Bu parametre, kullanıcının Sekme tuşuna basmadan önce sağladığı değere ayarlanır. Betik bloğunuz sekme tamamlama değerlerini belirlemek için bu değeri kullanmalıdır.
  • $commandAst (Konum 1) - Bu parametre, geçerli giriş satırı için Soyut Söz Dizimi Ağacı'na (AST) ayarlanır. Daha fazla bilgi için bkz . Ast Sınıfı.
  • $cursorPosition(Konum 2) - Kullanıcı Sekme tuşuna bastığında bu parametre imlecin konumuna ayarlanır.

Parametre özniteliği olarak bir ArgumentCompleter da sağlayabilirsiniz. Daha fazla bilgi için bkz . about_Functions_Advanced_Parameters.

Type:ScriptBlock
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

Girişler

None

Nesneleri bu cmdlet'e yöneltemezsiniz.

Çıkışlar

None

Bu cmdlet çıkış döndürmez.