ArgumentCompleterin ja Register-ArgumentCompleterin käyttö PowerShellissä

Viimeisin päivitys: 17/12/2025
Kirjoittaja: Isaac
  • Register-ArgumentCompleterin avulla voit luoda dynaamisia täyteaineita cmdlet-parametreille ja komennot natiivi käyttäen ScriptBlock- ja CompletionResult-objekteja.
  • ValidateSet-, ArgumentCompletions- ja ArgumentCompleter-attribuutit tarjoavat lisää joustavuutta ehdotettujen tai validoitujen arvojen luetteloiden määrittelyyn.
  • PowerShell Versiossa 7.2 esitellään luokkapohjaiset ja tehdaspohjaiset täydentäjät, jotka helpottavat monimutkaisen automaattisen täydennyksen logiikan uudelleenkäyttöä ja parametrisointia.
  • PSReadLinen, mukautettujen täyteaineiden ja ulkoisten komentorivien ja API-rajapintojen tuen yhdistelmä tuo PowerShellin automaattisen täydennyksen kokemuksen lähemmäksi edistyneiden komentotulkkien, kuten zsh:n, kokemusta.

Komentohistorian tarkasteleminen PowerShellissä ja CMD:ssä

Seuraavilla riveillä näemme rauhallisesti ja selkeiden esimerkkien avulla, miten sitä käytetään Register-ArgumentCompleter, ArgumentCompletion-, ArgumentCompletions- ja ValidateSet-attribuutit sekä mukautetut luokat saavuttaaksesi erittäin edistyneen automaattisen täydennyksen kokemuksen PowerShellissä. Näet sekä yksinkertaisia ​​tapauksia että paljon monimutkaisempia skenaarioita, mukaan lukien sen integroinnin omaan PowerShell-profiili pitää se aina aktiivisena ja miten sitä käytetään myös natiivien komentojen, kuten dotnet tai kolmannen osapuolen komentorivikäyttöliittymiä.

Mikä on Register-ArgumentCompleter ja minkä ongelman se ratkaisee?

PowerShellin
Aiheeseen liittyvä artikkeli:
PowerShellin luotettavuushistorian hallinta: hallinta, auditointi ja analyysi

cmdlet Register-ArgumentCompleter palvelee rekisteröi mukautettu argumentin täydentäjäToisin sanoen, kerrot PowerShellille, mitä ehdottaa, kun käyttäjä painaa näppäintä. Kieleke kun täytetään parametrin tai natiivin komennon arvo.

Tämä täydentäjä toimii suoritusaikaVoit siis laskea ehdotuksia dynaamisesti: etsi cmdlettejä, kuten Get-TimeZonesuodata palveluita Get-Service, kutsu CLI:tä nimellä dotnet completeREST-rajapinnan lukeminen, tiedostojärjestelmän tarkistaminen jne. tehdään kaikki... ScriptBlock joka palauttaa mahdolliset automaattisen täydennyksen arvot.

Tärkeä yksityiskohta on se, miten parametri käyttäytyy CommandName: jos käytät sitä ilmoittamatta Parametrin nimi ni SyntyperäinenPowerShell käsittelee kutsua ikään kuin olisit lisännyt -NatiiviTämä tarkoittaa, että täydentäjä ei toimi PowerShell-cmdlet-parametrien kanssa, vaan ainoastaan ​​natiivien komentojen täydentäjänä. Jos siis tavoitteena on täydentää PowerShell-cmdlet-komennon tai -funktion parametreja, sinun on määritä aina ParameterName.

Register-ArgumentCompleterin perussyntaksi

Natiivikomentojen parametrijoukko (NativeSet)

Natiivikomennon argumentin täydentäjän rekisteröimiseksi käytetään seuraavaa syntaksia, jossa avain on muokkaajassa -Natiivi:

Tyypillinen syntaksi: Register-ArgumentCompleter -CommandName <String[]> -ScriptBlock <ScriptBlock> -Native

Tässä tapauksessa KomennonNimi on pakollinenkoska PowerShellin on tiedettävä, mihin natiivikomentoon täydentäjä liitetään. ScriptBlock Se vastaanottaa erilaisen parametrijoukon kuin PowerShell-cmdlet-täydentäjät, kuten myöhemmin näemme, ja se on suunnattu tulkitsemaan koko riviä ja kohdistimen sijaintia.

PowerShell-cmdlet-parametrijoukko (PowerShellSet)

Jos haluat lisätä automaattisen täydennyksen yhteen tai useampaan PowerShell-cmdlet- tai funktioparametriin, yleisin syntaksi on:

Tyypillinen syntaksi: Register-ArgumentCompleter -ParameterName <String> -ScriptBlock <ScriptBlock> >]

Täällä ParametrinNimi on pakollinen ja määrittää, mihin parametriin täydennystä sovelletaan. Parametri KomennonNimi on valinnainenVoit rajoittaa täydentäjän yhteen tai useampaan tiettyyn komentoon, tai jos jätät sen pois, PowerShell rekisteröi kyseisen täydentäjän kyseiselle parametrinimelle kaikkiin komentoihin, joissa se on.

Register-ArgumentCompleterin keskeiset parametrit

Parametri -KomennonNimi

Parametri -KomennonNimi Ilmaisee, mille komennolle tai komennoille suorittaja rekisteröidään. Hyväksyy yhden. merkkijonojen taulukkoSiksi voit liittää saman ScriptBlockin useisiin cmdletteihin tai natiiveihin työkaluihin samanaikaisesti.

Kun sitä käytetään parametrijoukossa NativeSetOnko pakollinenkoska natiiveja täydentäjiä ei voida rekisteröidä yleisesti osoittamatta tiettyyn binääritiedostoon tai komentoon. Joukossa PowerShellSet Se on valinnainen, mutta kuten aiemmin mainittiin, jos käytät sitä ilman Parametrin nimi ni SyntyperäinenPowerShell tulkitsee, että olet luomassa natiivia täydentäjää.

Parametri -Natiivi

Muuntaja -Natiivi kertoo PowerShellille, että täydentäjää tulisi käyttää natiivikomennotEli ulkoiset suoritettavat tiedostot, joissa PowerShell ei hallitse eikä voi täydentää parametrien nimiä. Tarkastellaanpa dotnet, winget, aws tai mikä tahansa muu .NET-pohjainen komentorivi (CLI), Python tai samankaltainen.

Tässä tilassa ScriptBlock vastaanottaa vähemmän parametreja ja eri tarkoitukseen: kirjoitettu teksti, komennon AST ja kohdistimen sijaintiSieltä, normaalisti, käsikirjoitus Se kutsuu itse CLI:tä palauttamaan ehdotuksia, kuten tapahtuu dotnet complete.

Parametri -ParametrinNimi

Parametri -ParametriNimi Määrittää sen parametrin nimen, johon argumentin täydennystä sovelletaan. Yksi tärkeä rajoitus on kyseisen parametrin tyyppi. Se ei voi olla lista.Jos esimerkiksi parametri käyttää tyyppiä, kuten Etualan väri de Write-HostEt voi käyttää Register-ArgumentCompleter-funktiota sen täydentämiseen.

  Korjattu: Windows 43 -virhekoodi 10 USB-laitteille

Kun rekisteröit suorittajia cmdlet-komennoille tai PowerShell-funktioille, on erittäin suositeltavaa, että käytä aina ParameterName-arvoaJos unohdat ja käytät vain CommandName-parametria, rekisteröit vahingossa natiivin täydentäjän etkä näe ehdotuksia sinua kiinnostavalle parametrille.

Parametri -ScriptBlock

Minkä tahansa täydentäjän sydän on ScriptBlockTämä komentosarjalohko määrittää logiikan, joka luo ehdotettavat arvot, kun käyttäjä painaa KielekeTärkeintä on, että ScriptBlockin on palauttaa elementit putkilinjan kauttaEsimerkiksi, kanssa ForEach-Object o Where-Object, yhden taulukon palauttamisen sijaan, koska jos palautetaan liukuohjaamaton taulukko, PowerShell tulkitsee sen seuraavasti yksittäinen automaattisesti täydennettävä arvo.

Lisäksi ScriptBlock voi palauttaa suoraan merkkijonoja tai System.Management.Automation.CompletionResult-tyypin objektitTämä tarjoaa paljon enemmän joustavuutta, koska voit määrittää täytettävän tekstin, luettelossa näytettävän tekstin, tuloksen tyypin sekä kuvauksen tai työkaluvihjeen.

ScriptBlock-parametrit PowerShell-täydentäjille

Normaaleissa (ei-natiiveissa) täyteaineissa ScriptBlockin pitäisi hyväksyä viisi parametria tässä järjestyksessä, nimistä riippumatta:

  • $komennonNimi: merkkijono, jossa on sen komennon nimi, jonka valmistumista lasketaan.
  • $parametrinNimi: merkkijono, jossa on täytettävän parametrin nimi.
  • $sanaTäydellinen: merkkijono, joka sisältää käyttäjän kirjoittaman tekstin juuri ennen painamista Kieleke.
  • $komentoAstCommandAst-objekti, joka edustaa abstrakti syntaksipuu nykyisestä linjasta.
  • $fakeBoundParameterssanakirjatyyppi IDisakirja joka toistaa sisällön $PSBoundParameters painamisen hetkellä Kieleke.

Parametri $sanaTäydellinen Sitä käytetään usein arvojen suodattamiseen operaattoreilla, kuten -likejotta ehdotetaan vain merkkejä, jotka alkavat käyttäjän jo kirjoittamalla hakusanalla. Samaan aikaan $fakeBoundParameters Sen avulla voit luoda täyteaineita, jotka riippuvat muista parametreista, kuten näemme hedelmien ja vihannesten esimerkeissä.

ScriptBlock-parametrit natiiveille täyteaineille

Milloin sitä käytetään -NatiiviScriptBlock vastaanottaa kolme parametria, myös sijainnin mukaan:

  • $sanaTäydellinen (sijainti 0): teksti, jonka käyttäjä on kirjoittanut ennen näppäintä Kieleke.
  • $komentoAst (kohta 1): koko komennon syntaksipuu, ei vain nykyisen argumentin.
  • $kursorinSijainti (sijainti 2): kohdistimen sijainnin indeksi rivillä.

Tämä muoto sopii erittäin hyvin komentoriviliittymiin, jotka jo näyttävät oman automaattisen täydennyksen järjestelmänsä. Tyypillinen tapaus on dotnet complete, joka vastaanottaa rivin ja kohdistimen sijainnin ja palauttaa pelkkää tekstiä sisältäviä ehdotuksia, jotka sitten muunnetaan muotoon Valmistumistulos.

Käytännön esimerkkejä Register-ArgumentCompleterin kanssa

Esimerkki 1: Aikavyöhykkeiden dynaaminen täyttö

Kuvittele, että haluat tehdä cmdlet-komennon käytöstä mahdollisimman helppoa. Set-TimeZone antaa käyttäjän täydentää parametrin Id Tab-näppäimellä. Voit luoda ScriptBlock-lohkon, joka hakee kaikki aikavyöhykkeet, Get-TimeZone -ListAvailableSuodata käyttäjän kirjoittaman mukaan ja laita jokainen arvo lainausmerkkeihin, jos siinä on välilyöntejä:

Esimerkkiskripti 1: $script = {<br> param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)<br> (Get-TimeZone -ListAvailable).Id |<br> Where-Object { $_ -like "$wordToComplete*" } |<br> ForEach-Object { "'$_'" }<br>}<br>Register-ArgumentCompleter -CommandName Set-TimeZone -ParameterName Id -ScriptBlock $script

Tämän kanssa, kun kirjoitat Set-TimeZone -Id ja aloita kirjoittaminen, kun painat Kieleke sinulla on yksi Suodatettujen aikavyöhyketunnusten luettelo Kirjoittamasi perusteella. Yksittäiset lainausmerkit on lisätty ongelmien välttämiseksi välilyöntejä sisältävien tunnisteiden kanssa.

Esimerkki 2: Rikastetut ehdotukset CompletionResult-funktiolla

Toisessa skenaariossa haluat, että käytettäessä Stop-Service -Name vain näkyvät käynnissä olevat palvelutja haluat myös näyttää lisätietoja ehdotusluettelossa, kun käyttäjä painaa Ctrl+Espacio.

Esimerkkiskripti 2 (CompletionResult): $script = {<br> param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)<br> $services = Get-Service | Where-Object {<br> $_.Status -eq 'Running' -and $_.Name -like "$wordToComplete*"<br> }<br> $services | ForEach-Object {<br> New-Object -TypeName System.Management.Automation.CompletionResult -ArgumentList @(<br> $_.Name, # completionText<br> $_.Name, # listItemText<br> 'ParameterValue', # resultType<br> $_.Name # toolTip<br> )<br> }<br>}<br>Register-ArgumentCompleter -CommandName Stop-Service -ParameterName Name -ScriptBlock $script

Kiinnitä huomiota näihin kenttiin: Voit hallita näitä avainkenttiä jokaisessa CompletionResult-objektissa viimeistellymmän käyttökokemuksen saavuttamiseksi:

  • valmistumisteksti: teksti, joka lisätään komentoon, kun valitset ehdotuksen.
  • listanKohdeTeksti: ehdotusluettelossa näkyvä teksti; voi poiketa lisätystä merkkijonosta.
  • tulostyyppituloksen tyyppi (esimerkiksi ParameterValue).
  • työkaluvihje: kuvaus, joka tulee näkyviin, kun valitset kohteen valmiista luettelosta, erityisen hyödyllinen seuraavien kanssa: Ctrl+Espacio.
  Kuinka ajaa ja saada kaikki irti Unigine Superposition -vertailuarvosta

Esimerkki 3: Natiivi täydentäjä dotnet-komentoliittymälle

Voit myös laajentaa automaattista täydennystä Register-ArgumentCompleter-funktiolla. natiivityökalutKlassinen esimerkki on dotnet, joka sisältää alikomennon dotnet complete palauttaaksesi valmiit kohteet nykyisen rivin perusteella.

Esimerkki natiivista skriptistä: $scriptblock = {<br> param($wordToComplete, $commandAst, $cursorPosition)<br> dotnet complete --position $cursorPosition $commandAst.ToString() | ForEach-Object {<br> ::new(<br> $_, # completionText<br> $_, # listItemText<br> 'ParameterValue', # resultType<br> $_ # toolTip<br> )<br> }<br>}<br>Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock $scriptblock

Tässä esimerkissä itse komento dotnet complete Se suorittaa ehdotusten laskennan. ScriptBlock yksinkertaisesti muuntaa tulosteen CompletionResult-objekteiksi. Tällä tavoin saat aikaan Erittäin saumaton integrointi PowerShellin ja ulkoisen komentorivikäyttöliittymän välillä, välilehdillä, jotka tuntevat kaikki natiivit dotnet-asetukset.

Muita tapoja toteuttaa argumenttien täydentäjiä

ValidateSet: kiinteät arvot tiukalla validoinnilla

Attribuutti ValidateSet Se tarjoaa yksinkertaisen tavan rajoittaa parametrin tai muuttujan suljettuun arvojoukkoon ja samalla ottaa käyttöön Tab-täydennyksen ilman mukautetun ScriptBlockin kirjoittamista.

Kuvittele parametri Hedelmät joka hyväksyy vain sanat "Omena", "Banaani" tai "Päärynä". Voit määritellä sen näin:

Esimerkkimääritelmä: param (<br> <br> <br> ]$Fruit<br>)

Jos käyttäjä syöttää arvon, jota ei ole joukossa, PowerShell heittää virheen validointivirheSama pätee nykyisiin muuttujiin, ei pelkästään parametreihin, esimerkiksi:

Muuttujan deklarointi: <br>$Flavor = 'Strawberry'

Joka kerta, kun jokin asia määrätään $FlavorSkripti tarkistaa, kuuluuko arvo joukkoon. Jos teet niin missä tahansa vaiheessa skriptiä:

param(<br> <br> $Message<br>)<br>$Message = 'bye'

PowerShell palauttaa virheen tyyppiä MetadataError, mikä osoittaa, että muuttuja lakkaisi olemasta voimassa, jos kyseistä arvoa sovellettaisiin, mikä auttaa ylläpitämään tiukat sopimukset skripteissäsi.

Dynaaminen ValidateSet luokilla

Staattisten joukkojen lisäksi PowerShell mahdollistaa arvojen luomisen seuraavista lähteistä: ValidateSet dynaamisesti luokkien avulla jotka toteuttavat käyttöliittymän System.Management.Automation.IValidateSetValuesGeneratorTässä mallissa luokka paljastaa metodin GetValidValues() joka palauttaa mahdolliset vaihtoehdot.

Tyypillinen esimerkki on luokka Ääninimet, joka etsii äänitiedostoja useista järjestelmäkansioista ja palauttaa niiden perusnimet kelvollisina arvoina:

Esimerkkiluokka (SoundNames): class SoundNames : System.Management.Automation.IValidateSetValuesGenerator {<br> ] GetValidValues() {<br> $SoundPaths = '/System/Library/Sounds/', '/Library/Sounds', '~/Library/Sounds'<br> $SoundNames = foreach ($SoundPath in $SoundPaths) {<br> if (Test-Path $SoundPath) {<br> (Get-ChildItem $SoundPath).BaseName<br> }<br> }<br> return ] $SoundNames<br> }<br>}

Myöhemmin toteutat luokan muodossa Dynaaminen ValidateSet parametrissa tai muuttujassa:

Dynaamisen ValidateSet-ominaisuuden käyttäminen: param (<br> )]<br> $Sound<br>)

Näin saat aikaan täydellisen ilmeen välilehdillä, jotka heijastavat tiedostojärjestelmän todellinen tila joka kerta, kun skripti suoritetaan.

Argumenttien täydennykset: ehdotuksia ilman arvon validointia

Attribuutti Argumenttien täydennykset Sen avulla voit lisätä parametriin luettelon ehdotetuista arvoista, mutta toisin kuin ValidateSet, Tiukkaa validointia ei suoritetaTämä tarkoittaa, että käyttäjä voi valita jonkin ehdotuksista tai kirjoittaa mitä tahansa muuta, vaikka sitä ei olisikaan listalla.

Sen syntaksi on hyvin suoraviivainen. Voit esimerkiksi määritellä funktion yhdellä parametrilla. Tyyppi joka ehdottaa "Hedelmiä" ja "Vihanneksia" sekä parametreja Hedelmät y vihannes mahdollisten arvojen luetteloilla:

Funktion määritelmä: function Test-ArgumentCompletions {<br> <br> param (<br> <br> <br> $Type,<br;<br> <br> <br> $Fruit,<br;<br> <br> <br> $Vegetable<br> )<br>}

Tämä ominaisuus on täydellinen silloin, kun haluat opastaa käyttäjää esimerkkien avulla tavallisista arvoista, mutta et halua estää häntä syöttämästä muita arvoja liiketoiminnan vaatimusten tai erikoistapausten yhteensopivuuden vuoksi.

ArgumentCompleter: parametrien attribuuttitason täydentäjät

Attribuutti Argumenttien Täydentäjä Sitä käytetään liittämään ScriptBlock-lohko parametriin, jolla on sama allekirjoitus kuin rekisteröityneillä täydentäjillä. Register-ArgumentCompletermutta ilman, että tätä cmdlet-komentoa tarvitsee kutsua. Se on tyylikäs tapa kapseloida monimutkainen automaattisen täydennyksen logiikka suoraan funktion määritelmässä.

Perusesimerkki: Käyttöesimerkki voisi olla:

Esimerkki attribuutista: function MyArgumentCompleter {<br> param (<br> <br> <br> $ParamName<br> )<br>}

Aivan kuten Register-ArgumentCompleterin kanssa, ScriptBlockin on palautettava arvoja prosessin kautta, ja se voi hyödyntää molempia. $sanaTäydellinen kuten $fakeBoundParameters tai edes analysoida AST ottaakseen huomioon komennon koko kontekstin.

  Voicemeeter Banana Aloitusopas: Täydellinen opas

Edistynyt esimerkki ArgumentCompleter-funktiosta, joka on riippuvainen toisesta parametrista

Hyvin hyödyllinen malli sisältää täydellisten funktioiden luomisen, jotka riippuvat muiden parametrien arvoista. Kuvittele funktio, jolla on parametri Tyyppi joka voi olla "Hedelmät" tai "Vihannekset", ja parametri Arvo jonka ehdotusjoukko muuttuu valitun tyypin mukaan.

Moottorin toteutus: function MyArgumentCompleter {<br> param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)<br><br> $possibleValues = @{<br> Fruits = @('Apple','Orange','Banana')<br> Vegetables = @('Onion','Carrot','Lettuce')<br> }<br><br>> if ($fakeBoundParameters.ContainsKey('Type')) {<br> $possibleValues |<br> Where-Object { $_ -like "$wordToComplete*" }<br> } else {<br> $possibleValues.Values | ForEach-Object { $_ }<br> }<br>}

Valmistuksen kulutus: function Test-ArgumentCompleter {<br> <br> param (<br> <br> <br> $Type,<br;<br> <br> <br> $Value<br> )<br>}

Tässä tilanteessa, jos kirjoitat esim. Test-ArgumentCompleter -Type Fruits -Value A ja painat Tab-näppäintä, kiitos käytön -Like ja sanakirjasta $fakeBoundParametersTäyteaine palauttaa vain hedelmäarvot, jotka alkavat kirjaimella "A", eli omenaSe on erittäin tehokas tekniikka rakentamiseen käyttäjäystävälliset komentorivikäyttöliittymät jopa silloin, kun kyseessä on ei-triviaali data.

Luokkapohjaiset argumenttien täydentäjät (alkaen PowerShell 7.2:sta)

PowerShell 7.2:sta alkaen on lisätty ominaisuus, jonka avulla voit määrittää luokkapohjaisia ​​uudelleenkäytettäviä täyteaineitaTämä helpottaa huomattavasti parametroitavien ja geneeristen täyteaineiden luomista.

Ajatuksena on johtua siitä, Argumentin Täydennysominaisuus ja toteuta käyttöliittymä IArgumentCompleterFactoryJohdetulla luokalla voi olla konfiguroitavia ominaisuuksia (esim. numeeriset alueet, hakemiston syvyys, päivämäärät, Git-haarat jne.), joita käytetään varsinaisen täydentäjän rakentamiseen.

Kurssin koodi (esimerkki): using namespace System.Collections<br>using namespace System.Collections.Generic<br>using namespace System.Management.Automation<br>using namespace System.Management.Automation.Language<br><br>class NumberCompleter : IArgumentCompleter {<br> $From<br> $To<br> $Step<br><br> NumberCompleter( $from, $to, $step) {<br> if ($from -gt $to) {<br> throw ::new("from")<br> }<br> $this.From = $from<br> $this.To = $to<br> $this.Step = $step -lt 1 ? 1 : $step<br> }<br><br> ] CompleteArgument(<br> $CommandName,<br> $parameterName,<br> $wordToComplete,<br> $commandAst,<br;> $fakeBoundParameters<br> ) {<br> $resultList = ]::new()<br> $Local:to = $this.To<br> $Local:step = $this.Step<br><br> for ($i = $this.From; $i -lt $to; $i += $step) {<br> $resultList.Add(::new($i.ToString()))<br> }<br><br> return $resultList<br> }<br>}<br><br>class NumberCompletionsAttribute : ArgumentCompleterAttribute, IArgumentCompleterFactory {<br> $From<br> $To<br> $Step<br><br> NumberCompletionsAttribute( $from, $to, $step) {<br> $this.From = $from<br> $this.To = $to<br> $this.Step = $step<br> }<br><br> Create() {<br> return ::new($this.From, $this.To, $this.Step)<br> }<br>}

Ominaisuuden käyttö: function Add {<br> param(<br> <br> $X,<br;<br> <br> $Y<br> )<br> $X + $Y<br>}

Kun kirjoitat funktiota ja alat täyttää parametreja, Tab-näppäin ehdottaa Numeeriset arvot välillä 0–100, 5 yksikön väleinilman, että automaattisen täydennyksen logiikkaa tarvitsee toistaa jokaisessa funktiossa. Samaa tekniikkaa voidaan soveltaa hakemistopolkuihin, laskettuihin päivämääriin, tietyn haaran Git-committeihin ja yleisesti ottaen mihin tahansa skenaarioon, jossa tarvitset uudelleenkäytettävät ja konfiguroitavat täyteaineet.

Linux-tyylinen automaattinen täydennys PowerShellissä käyttämällä PSReadLine- ja Register-ArgumentCompleter-komentoja

Jos olet kotoisin GNU/Linux-maailmasta, olet luultavasti tottunut komentotulkkien, kuten zshinteraktiivisilla valikoilla ja erittäin älykkäillä ehdotuksilla. PowerShell, vaikkakin erilainen, antaa sinulle myös mahdollisuuden päästä melko lähelle tätä kokemusta yhdistämällä PSReadLine ja Register-ArgumentCompleter.

Yhtäältä, Set-PSReadlineKeyHandler Voit muuttaa Tab-näppäimen toimintaa. Hyvin kätevä temppu on määrittää Tab näyttämään navigoitava valikkovaihtoehto sen sijaan, että vain suorittaisit seuraavan kohdan:

PSReadLine-komento: Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete

Jos lisäät tämän rivin omaan profiilitiedosto PowerShellistä, esimerkiksi muokkaamalla sitä notepad $profileTämä varmistaa, että jokainen uusi PowerShell-istunto alkaa kyseisellä välilehtitoiminnolla, mikä tekee käytettävissä olevien vaihtoehtojen tutkimisesta paljon miellyttävämpää. Saatat kuitenkin joutua... mukauta toteutuspolitiikkaa järjestelmässäsi, jotta profiili toimii ilman liiallisia rajoituksia.

Toisaalta tämän PSReadLine-ominaisuuden yhdistäminen täyteaineisiin, jotka on rekisteröity kautta Rekisteriargumentin täydentäjä (esimerkiksi winget, dotnet tai omia moduulejasi), voit päästä melko lähelle automaattisen täydennyksen sujuvuutta LinuxMonet tiimit jakavat valmiita ScriptBlock-lohkoja repositorioissaan, jolloin koko organisaatiolla voi olla käytössään yhtenäinen ja erittäin tuottava komentoriviympäristö.