Kaip naudoti „ArgumentCompleter“ ir „Register-ArgumentCompleter“ „PowerShell“ programoje

Paskutiniai pakeitimai: 17/12/2025
Autorius: Izaokas
  • „Register-ArgumentCompleter“ leidžia kurti dinaminius cmdlet parametrų užpildus ir komandos gimtoji naudojant „ScriptBlock“ ir „CompletionResult“ objektus.
  • Atributai „ValidateSet“, „ArgumentCompletions“ ir „ArgumentCompleter“ suteikia didesnį lankstumą apibrėžiant siūlomų arba patvirtintų reikšmių sąrašus.
  • PowerShell " 7.2 versijoje pristatomi klasėmis ir gamyklomis pagrįsti užbaigimo įrankiai, kurie palengvina sudėtingos automatinio užbaigimo logikos pakartotinį naudojimą ir parametravimą.
  • PSReadLine, pasirinktinių užpildų ir išorinių komandų eilutės sąsajų bei API palaikymo derinys priartina „PowerShell“ automatinio užbaigimo patirtį prie pažangių apvalkalų, tokių kaip „zsh“.

Kaip peržiūrėti komandų istoriją „PowerShell“ ir CMD

Šiose eilutėse ramiai ir su aiškiais pavyzdžiais pamatysime, kaip naudoti „Register-ArgumentCompleter“, atributai „ArgumentCompletion“, „ArgumentCompletions“ ir „ValidateSet“ bei pasirinktinės klasės kad pasiektumėte labai pažangią automatinio užbaigimo patirtį „PowerShell“. Pamatysite tiek paprastus atvejus, tiek daug sudėtingesnius scenarijus, įskaitant tai, kaip integruoti jį į savo „PowerShell“ profilis kaip jį visada išlaikyti aktyvų ir kaip jį naudoti su vietinėmis komandomis, tokiomis kaip dotnet arba trečiųjų šalių komandų eilutės sąsajos (CLI).

Kas yra „Register-ArgumentCompleter“ ir kokią problemą jis išsprendžia?

PowerShell
Susijęs straipsnis:
Kaip įvaldyti patikimumo istoriją „PowerShell“: valdymas, auditas ir analizė

cmdlet Register-ArgumentCompleter tarnauja užregistruoti pasirinktinį argumentų užbaigėjąKitaip tariant, jūs nurodote „PowerShell“, ką pasiūlyti vartotojui paspaudus klavišą. Kortelė pildant parametro arba vietinės komandos reikšmę.

Šis užbaigėjas veikia vykdymo laikasTaigi, galite dinamiškai apskaičiuoti pasiūlymus: ieškokite cmdlet'ų, tokių kaip Get-TimeZonefiltravimo paslaugos su Get-Service, iškvieskite CLI kaip dotnet completeREST API skaitymas, failų sistemos tikrinimas ir kt. atliekami per... Scenarijų blokas kuri grąžina galimas automatinio užbaigimo reikšmes.

Svarbi detalė yra tai, kaip elgiasi parametras. Komandos pavadinimas: jei naudojate jį nenurodydami ParametrasName ni Gimtasis„PowerShell“ iškvietimą traktuoja taip, lyg būtumėte pridėję - GimtojiTai reiškia, kad užbaigimo programa neveiks su „PowerShell“ cmdlet parametrais, o tik kaip užbaigimo programa su vietinėmis komandomis. Todėl, jei jūsų tikslas yra užbaigti „PowerShell“ cmdlet arba funkcijos parametrus, turite visada nurodykite parametro pavadinimą.

Pagrindinė „Register-ArgumentCompleter“ sintaksė

Vietinių komandų parametrų rinkinys (NativeSet)

Norint užregistruoti argumentų užbaigėją vietinei komandai, naudojama ši sintaksė, kur raktas yra modifikatoriuje - Gimtoji:

Tipinė sintaksė: Register-ArgumentCompleter -CommandName <String[]> -ScriptBlock <ScriptBlock> -Native

Šiuo atveju Komandos pavadinimas privalomasnes „PowerShell“ reikia žinoti, su kuria vietine komanda susieti užbaigėją. Scenarijų blokas Kaip matysime vėliau, jis gaus kitokį parametrų rinkinį nei „PowerShell“ cmdlet užbaigėjai ir bus orientuotas į visos eilutės ir žymeklio pozicijos interpretavimą.

„PowerShell“ cmdlet parametrų rinkinys („PowerShellSet“)

Jei norite pridėti automatinį užbaigimą prie vieno ar kelių „PowerShell“ cmdlet arba funkcijų parametrų, dažniausiai naudojama sintaksė yra:

Tipinė sintaksė: Register-ArgumentCompleter -ParameterName <String> -ScriptBlock <ScriptBlock> >]

Čia Parametro pavadinimas yra privalomas ir apibrėžia, kuriam parametrui bus taikomas užbaigimas. Parametras Komandos pavadinimas yra neprivalomasGalite apriboti užbaigėją viena ar keliomis konkrečiomis komandomis arba, jei ją praleisite, „PowerShell“ užregistruos tą užbaigėją su tuo parametro pavadinimu visose komandose, kuriose jis yra.

Pagrindiniai „Register-ArgumentCompleter“ parametrai

Parametras -KomandosName

Parametras -KomandosPavadinimas Nurodo, kuriai komandai ar komandoms užbaigėjas bus užregistruotas. Priima vieną. eilučių masyvasTodėl tą patį „ScriptBlock“ galite susieti su keliomis cmdlet arba vietinėmis priemonėmis vienu metu.

Kai naudojamas parametrų rinkinyje NativeSetAr privalomasnes vietinių užbaigėjų negalima registruoti bendrai, nenurodant į konkretų dvejetainį failą ar komandą. Rinkinyje PowerShellSet Tai neprivaloma, bet, kaip minėta anksčiau, jei naudojate be ParametrasName ni Gimtasis„PowerShell“ interpretuos, kad kuriate vietinį užbaigėją.

Parametras -Native

Modifikatorius - Gimtoji nurodo „PowerShell“, kad užbaigėjas turėtų būti pritaikytas gimtosios komandosTai yra, išoriniai vykdomieji failai, kurių „PowerShell“ nekontroliuoja ir negali užbaigti parametrų pavadinimų. Panagrinėkime... dotnet, winget, aws arba bet kuri kita .NET pagrindu sukurta CLI, Pitonas ar panašiai.

Šiuo režimu „ScriptBlock“ gauna mažiau parametrų ir skirti kitam tikslui: parašytas tekstas, komandos AST ir žymeklio padėtisIš ten, paprastai, scenarijus Jis iškviečia pačią CLI, kad pateiktų pasiūlymus, kaip ir su dotnet complete.

Parametras -ParametroName

Parametras -ParametroPavadinimas Nurodo parametro, kuriam bus taikomas argumento užbaigimas, pavadinimą. Yra vienas svarbus apribojimas: to parametro tipas. Tai negali būti sąrašasPavyzdžiui, jei parametras naudoja tokį tipą kaip Priekinio plano spalva de Write-HostNegalite naudoti „Register-ArgumentCompleter“, kad jį užbaigtumėte.

  Ištaisyta: „Windows 43“ klaidos kodas 10, skirtas USB įrenginiams

Registruojant cmdlet arba PowerShell funkcijų užbaigėjus, labai rekomenduojama, kad visada naudokite parametro pavadinimąJei pamiršite ir naudosite tik „CommandName“, netyčia užregistruosite vietinį užbaigėją ir nematysite jus dominančio parametro pasiūlymų.

Parametras -ScriptBlock

Bet kurio užbaigėjo širdis yra Scenarijų blokasŠis scenarijaus blokas apibrėžia logiką, kuri generuoja reikšmes, kurios bus siūlomos vartotojui paspaudus KortelėSvarbiausia, kad „ScriptBlock“ privalo grąžinti elementus per vamzdynąPavyzdžiui, su ForEach-Object o Where-Object, užuot grąžinęs vieną masyvą, nes jei grąžinamas nevamzdyninis masyvas, „PowerShell“ jį interpretuos kaip viena automatinio užbaigimo reikšmė.

Be to, „ScriptBlock“ gali tiesiogiai grąžinti eilutes arba System.Management.Automation.CompletionResult tipo objektaiTai suteikia daug daugiau lankstumo, nes leidžia apibrėžti užbaigiamą tekstą, sąraše rodomą tekstą, rezultato tipą ir aprašymą arba patarimą.

„ScriptBlock“ parametrai „PowerShell“ užbaigėjams

Įprastuose (ne vietiniuose) užpilduose „ScriptBlock“ turėtų priimti penki parametrai tokia tvarka, nepriklausomai nuo jų pavadinimų:

  • $komandosName: eilutė su komandos, kuriai skaičiuojamas užbaigimas, pavadinimu.
  • $parametroName: eilutė su pildomo parametro pavadinimu.
  • Užbaigti žodį: eilutė, kurioje yra tai, ką vartotojas įvedė prieš pat paspausdamas Kortelė.
  • $komandaAst„CommandAst“ objektas, kuris vaizduoja abstraktus sintaksės medis dabartinės linijos.
  • $fakeBoundParametersžodyno tipas IDžodynas kuris atkartoja turinį $PSBoundParameters spaudimo momentu. Kortelė.

Parametras Užbaigti žodį Jis dažnai naudojamas reikšmėms filtruoti naudojant tokius operatorius kaip -likekad būtų siūlomi tik elementai, prasidedantys tuo, ką vartotojas jau įvedė. Tuo tarpu $fakeBoundParameters Tai leidžia kurti užpildus, kurie priklauso nuo kitų parametrų, kaip matysime su vaisių ir daržovių pavyzdžiais.

„ScriptBlock“ parametrai vietiniams užpildams

Kada jis naudojamas - Gimtoji„ScriptBlock“ gauna tris parametrus, taip pat pagal poziciją:

  • Užbaigti žodį (0 pozicija): tekstas, kurį vartotojas įvedė prieš klavišą Kortelė.
  • $komandaAst (1 pozicija): visos komandos sintaksės medis, o ne tik dabartinio argumento.
  • $žymeklio_pozicija (2 pozicija): žymeklio pozicijos eilutėje indeksas.

Šis formatas labai gerai tinka komandų eilutės sąsajoms (CLI), kurios jau turi savo automatinio užbaigimo sistemą. Tipinis atvejis yra toks: dotnet complete, kuris gauna eilutės ir žymeklio poziciją ir grąžina paprasto teksto pasiūlymus, kurie vėliau transformuojami į Užbaigimo rezultatas.

Praktiniai pavyzdžiai su Register-ArgumentCompleter

1 pavyzdys: Dinamiškai užpildomos laiko juostos

Įsivaizduokite, kad norite kuo paprasčiau naudoti cmdlet. Set-TimeZone leidžia vartotojui užpildyti parametrą Id su Tab klavišu. Galite sukurti „ScriptBlock“, kuris nuskaito visas laiko juostas su Get-TimeZone -ListAvailableFiltruokite pagal tai, ką vartotojas įvedė, ir kiekvieną reikšmę rašykite kabutėse, jei yra tarpų:

1 scenarijaus pavyzdys: $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

Su tuo, kai rašai Set-TimeZone -Id ir pradėkite rašyti, kai paspausite Kortelė turėsite vieną Filtruotų laiko juostų ID sąrašas Remiantis tuo, ką parašėte. Viengubos kabutės pridėtos siekiant išvengti problemų su identifikatoriais, kuriuose yra tarpų.

2 pavyzdys: Praturtinti pasiūlymai su „CompletionResult“

Antruoju atveju norite, kad tai darytumėte naudodami Stop-Service -Name tik pasirodo teikiamos paslaugosir jūs taip pat norite, kad pasiūlymų sąraše būtų rodoma papildoma informacija, kai vartotojas paspaudžia "Ctrl"+erdvė.

2 scenarijaus pavyzdys (Užbaigimo rezultatas): $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

Atkreipkite dėmesį į šiuos laukus: Kiekviename „CompletionResult“ objekte galite valdyti šiuos pagrindinius laukus, kad patirtis būtų dar geresnė:

  • užbaigimo tekstas: tekstas, kuris iš tikrųjų įterpiamas į komandą, kai pasirenkate pasiūlymą.
  • sąrašo elemento tekstas: tekstas, rodomas pasiūlymų sąraše; gali skirtis nuo įterptos eilutės.
  • rezultato tipasrezultato tipas (pavyzdžiui, ParameterValue).
  • patarimas: aprašymas, rodomas pasirinkus elementą iš užbaigto sąrašo, ypač naudingas su "Ctrl"+erdvė.
  Kaip paleisti ir išnaudoti visas „Unigine Superposition“ etalono galimybes

3 pavyzdys: vietinis „dotnet“ komandinės eilutės užbaigimo įrankis

Taip pat galite naudoti „Register-ArgumentCompleter“, kad išplėstumėte automatinį užbaigimą. vietiniai įrankiaiKlasikinis pavyzdys yra „dotnet“, kuriame yra subkomanda dotnet complete grąžinti užbaigtus elementus pagal dabartinę eilutę.

Gimtosios kalbos scenarijaus pavyzdys: $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

Šiame pavyzdyje pati komanda dotnet complete Tai tas, kuris atlieka pasiūlymų skaičiavimą. „ScriptBlock“ tiesiog transformuoja išvestį į „CompletionResult“ objektus. Tokiu būdu jūs gaunate Labai sklandi „PowerShell“ ir išorinės CLI integracija, su skirtukais, kuriuose žinomos visos vietinės „dotnet“ parinktys.

Kiti argumentų užbaigimo būdų įgyvendinimo būdai

ValidateSet: fiksuotos vertės su griežtu patvirtinimu

Atributas ValidateSet Tai siūlo paprastą būdą apriboti parametrą arba kintamąjį iki uždaro reikšmių rinkinio ir tuo pačiu metu įgalinti Tab užbaigimą nerašant pasirinktinio „ScriptBlock“.

Įsivaizduokite parametrą Vaisiai kuris priima tik „obuolys“, „bananas“ arba „kriaušė“. Galite jį apibrėžti taip:

Apibrėžimo pavyzdys: param (<br> <br> <br> ]$Fruit<br>)

Jei vartotojas įveda reikšmę, kurios nėra rinkinyje, „PowerShell“ išmes klaidą patvirtinimo klaidaTas pats pasakytina ir apie dabartinius kintamuosius, ne tik apie parametrus, pavyzdžiui:

Kintamųjų deklaracija: <br>$Flavor = 'Strawberry'

Kiekvieną kartą, kai kažkas yra priskirta $FlavorScenarijus patikrins, ar reikšmė priklauso rinkiniui. Jei bet kuriuo scenarijaus metu tai padarysite:

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

„PowerShell“ grąžins klaidą, kurios tipas Metaduomenų klaida, nurodant, kad kintamasis nebegaliotų, jei būtų taikoma ta reikšmė, o tai padeda išlaikyti griežtos sutartys savo scenarijuose.

Dinaminis ValidateSet su klasėmis

Be statinių rinkinių, „PowerShell“ leidžia generuoti reikšmes iš Dinamiškai naudojant klases kurie įgyvendina sąsają System.Management.Automation.IValidateSetValuesGeneratorŠiame modelyje klasė pateikia metodą GetValidValues() kuris grąžina galimus variantus.

Tipiškas pavyzdys yra klasė SoundNames, kuris nuskaito kelis sistemos aplankus, ieškodamas garso failų, ir grąžina jų bazinius pavadinimus kaip galiojančias reikšmes:

Pavyzdinė klasė (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>}

Vėliau klasę įdiegsite kaip Dinaminis validavimo rinkinys parametre arba kintamajame:

Naudojant dinaminį ValidateSet: param (<br> )]<br> $Sound<br>)

Štai kaip galite pasiekti išbaigtą įvaizdį su skirtukais, kurie atspindi tikroji failų sistemos būsena kiekvieną kartą, kai vykdomas scenarijus.

Argumentų papildymai: pasiūlymai nepatvirtinus reikšmės

Atributas Argumentų užbaigimas Tai leidžia prie parametro pridėti siūlomų reikšmių sąrašą, tačiau, skirtingai nei „ValidateSet“, Griežtas patvirtinimas neatliekamasTai reiškia, kad vartotojas gali pasirinkti vieną iš pasiūlymų arba parašyti bet ką kita, net jei to nėra sąraše.

Jos sintaksė labai paprasta. Pavyzdžiui, funkciją galima apibrėžti vienu parametru. Tipas kuris siūlo „Vaisius“ ir „Daržoves“ bei parametrus Vaisiai y Daržovių su galimų reikšmių sąrašais:

Funkcijos apibrėžimas: function Test-ArgumentCompletions {<br> <br> param (<br> <br> <br> $Type,<br;<br> <br> <br> $Fruit,<br;<br> <br> <br> $Vegetable<br> )<br>}

Šis atributas puikiai tinka, kai norite nukreipti vartotoją pavyzdžiais įprastų reikšmių, bet nenorite jam užkirsti kelio įvesti kitas skirtingas reikšmes dėl verslo reikalavimų ar suderinamumo su specialiais atvejais.

ArgumentCompleter: parametro atributo lygio užbaigėjai

Atributas Argumentų užbaigėjas Jis naudojamas norint pridėti „ScriptBlock“ prie parametro, turinčio tą patį parašą, kaip ir užregistruotų užbaigėjų. Register-ArgumentCompleterbet nereikia iškviesti šios cmdlet. Tai elegantiškas būdas apibendrinti sudėtinga automatinio užbaigimo logika tiesiai funkcijos apibrėžime.

Pagrindinis pavyzdys: Naudojimo pavyzdys galėtų būti:

Atributo pavyzdys: function MyArgumentCompleter {<br> param (<br> <br> <br> $ParamName<br> )<br>}

Kaip ir naudojant „Register-ArgumentCompleter“, „ScriptBlock“ turi grąžinti reikšmes per konvejerį ir gali panaudoti abu. Užbaigti žodį kaip $fakeBoundParameters ar net analizuoti AST atsižvelgti į visą komandos kontekstą.

  „Voicemeeter Banana“ darbo pradžios vadovas: išsamus vadovas

Išplėstinis ArgumentCompleter, priklausančio nuo kito parametro, pavyzdys

Labai naudingas modelis apima pilnų funkcijų, kurios priklauso nuo kitų parametrų reikšmių, kūrimą. Įsivaizduokite funkciją su parametru Tipas kuris gali būti „Vaisiai“ arba „Daržovės“, ir parametras Vertė kurių pasiūlymų rinkinys keičiasi priklausomai nuo pasirinkto tipo.

Variklio įgyvendinimas: 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>}

Užpildo sunaudojimas: function Test-ArgumentCompleter {<br> <br> param (<br> <br> <br> $Type,<br;<br> <br> <br> $Value<br> )<br>}

Tokiu atveju, jei rašysite pvz. Test-ArgumentCompleter -Type Fruits -Value A ir paspaudžiate Tab, dėka naudojimo -Kaip ir iš žodyno $fakeBoundParametersUžpildas grąžins tik vaisių reikšmes, kurios prasideda raide „A“, tai yra, AppleTai labai galinga statybos technika patogios naudoti komandinės eilutės sąsajos net ir susidūrus su nereikšmingais duomenimis.

Klasėmis pagrįsti argumentų užbaigėjai (pradedant nuo „PowerShell 7.2“)

Nuo „PowerShell 7.2“ versijos buvo pridėta funkcija, leidžianti apibrėžti klasės pagrindu naudojami daugkartinio naudojimo užpildaiTai labai palengvina parametruojamų ir bendrinių užpildų kūrimą.

Idėja yra kilti iš Argumentų užbaigimo atributas ir įdiegti sąsają IArgumentCompleterFactoryIšvestinė klasė gali turėti konfigūruojamas savybes (pvz., skaitinius diapazonus, katalogo gylį, datas, „Git“ šakas ir kt.), kurios naudojamos kuriant tikrąjį užbaigėją.

Kurso kodas (pavyzdys): 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>}

Atributų naudojimas: function Add {<br> param(<br> <br> $X,<br;<br> <br> $Y<br> )<br> $X + $Y<br>}

Rašant funkciją ir pradedant pildyti parametrus, Tab pasiūlys Skaitinės vertės nuo 0 iki 100, didinamos po 5nereikalaujant kartoti automatinio užbaigimo logikos kiekvienoje funkcijoje. Ta pati technika gali būti taikoma katalogų keliams, apskaičiuotoms datoms, „Git“ pakeitimų įrašams tam tikrai šakai ir apskritai bet kokiam scenarijui, kai jums reikia daugkartinio naudojimo ir konfigūruojami užpildai.

„Linux“ stiliaus automatinis užbaigimas „PowerShell“ programoje naudojant PSReadLine ir Register-ArgumentCompleter

Jei esate iš GNU/Linux pasaulio, tikriausiai esate įpratę prie pažangios automatinio užbaigimo patirties, kurią siūlo tokie apvalkalai kaip zshsu interaktyviais meniu ir labai išmaniais pasiūlymais. „PowerShell“, nors ir kitokia, taip pat leidžia jums priartėti prie tos pačios patirties, derindama PSReadLine ir registro argumentų užbaigimo funkcija.

Viena vertus, su Set-PSReadlineKeyHandler Galite pakeisti Tab klavišo veikimą. Labai patogus triukas yra sukonfigūruoti Tab klavišą taip, kad būtų rodomas naršomas parinkčių meniu užuot tiesiog atlikę kitą elementą:

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

Jei įterpsite šią eilutę į savo profilio failas iš „PowerShell“, pavyzdžiui, redaguojant jį su notepad $profileTai užtikrins, kad kiekvienas naujas „PowerShell“ seansas prasidės su tuo skirtuko veikimu, todėl bus daug maloniau tyrinėti galimas parinktis. Tačiau gali tekti... pakoreguoti vykdymo politiką jūsų sistemoje, kad profilis veiktų be pernelyg didelių apribojimų.

Kita vertus, derinant šią PSReadLine funkciją su užpildais, užregistruotais per Registrų argumentų užbaigėjas (pavyzdžiui, dėl winget, dotnet arba savo modulius), galite priartėti prie automatinio užbaigimo sklandumo LinuxDaugelis komandų savo saugyklose dalijasi užbaigtais „ScriptBlocks“, todėl visa organizacija gali turėti nuosekli ir labai produktyvi komandinės eilutės aplinka.