Aracılığıyla paylaş


Register-ArgumentCompleter

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

Sözdizimi

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.

Bu komutu CommandName parametresiyle ve ParameterName veya Native parametreleri olmadan çağırdığınızda, komut Native parametresini belirttiğiniz gibi çalışır. Bu, bağımsız değişken tamlayıcının PowerShell komut parametreleri için çalışmasını engeller. PowerShell komutları için bir bağımsız değişken tamlayıcı kaydetmek istediğinizde her zaman ParameterName parametresini belirtin.

Ö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.

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

    (Get-TimeZone -ListAvailable).Id | Where-Object {
        $_ -like "$wordToComplete*"
    } | ForEach-Object {
        "'$_'"
    }
}

Register-ArgumentCompleter -CommandName Set-TimeZone -ParameterName Id -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, 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, boşluk içeren değerleri işlemek için ForEach-Object her değeri tırnak içine alan cmdlet'ine yönlendirilir.

İkinci komut scriptblock, ParameterName Id ve CommandName Set-TimeZonedeğ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          # completionText
            $_.Name          # listItemText
            'ParameterValue' # resultType
            $_.Name          # toolTip
        )
    }
}

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. PowerShell bunu yalnızca görüntüleme için kullanır. Seçildiğinde komuta geçirilmiyor.
  • 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.

Ö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(
            $_,               # completionText
            $_,               # listItemText
            'ParameterValue', # resultType
            $_                # toolTip
        )
    }
}

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ğunun dotnet complete içinde, komut sekme tamamlama işlemini gerçekleştirir. Sonuçlar, her değer için ForEach-Object bir CompletionResult nesnesi oluşturmak üzere System.Management.Automation.CompletionResult sınıfının yeni statik yöntemini kullanan cmdlet'ine aktarılır.

Parametreler

-CommandName

Bağımsız değişken tamlayıcısını kaydetmek için bir veya daha fazla komutun adını belirtir. Bu parametre yerel komutlar için zorunludur.

Bu parametreyi ParameterName veya Native parametreleri olmadan belirttiğinizde, komut Native parametresini belirtmiş gibi davranır. PowerShell komutları için bağımsız değişken tamamlayıcıları kaydederken her zaman ParameterName parametresini belirtin.

Bu parametreyi belirtmezseniz, PowerShell belirtilen ParameterName için bağımsız değişken tamlayıcısını tüm PowerShell komutlarına kaydeder.

Tür:String[]
Position:Named
Default value:None
Gerekli:False
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-Native

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

Tür:SwitchParameter
Position:Named
Default value:None
Gerekli:False
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-ParameterName

Bağımsız değişken tamlayıcının uygulandığı parametrenin adını belirtir. Belirtilen parametrelerin türü, cmdlet'in ForegroundColor parametresi Write-Host gibi bir numaralandırma olamaz.

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

PowerShell komutları için bir bağımsız değişken tamlayıcı kaydederken her zaman bu parametreyi belirtin. ParameterName veya Native parametreleri olmadan CommandName parametresini belirttiğinizde, komut Native parametresini belirttiğiniz gibi davranır.

Tür:String
Position:Named
Default value:None
Gerekli:True
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et: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, kullanıcı deneyimini geliştirmek için her değer için System.Management.Automation.CompletionResult nesnelerini de döndürebilir. CompletionResult nesnelerini döndürmek, kullanıcılar kullanılabilir tamamlamaların listesini göstermek için Ctrl+Space tuşuna bastığında görüntülenen araç ipuçlarını ve özel liste girdilerini tanımlamanızı sağlar.

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, Dize) - Bu parametre, betik bloğunun sekme tamamlama sağladığı komutun adına ayarlanır.
  • $parameterName (Konum 1, Dize) - Bu parametre, değerinin sekmeyle tamamlanması gereken parametresine ayarlanır.
  • $wordToComplete(Konum 2, Dize) - 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, CommandAst) - 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 . CommandAst Sınıfı.
  • $fakeBoundParameters(Konum 4 IDictionary) - 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, Dize) - 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, CommandAst) - 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 . CommandAst Sınıfı.
  • $cursorPosition(Konum 2, Int32) - 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.

Tür:ScriptBlock
Position:Named
Default value:None
Gerekli:True
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

Girişler

None

Nesneleri bu cmdlet'e yöneltemezsiniz.

Çıkışlar

None

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