Bármely billentyű megnyomásával folytathatja a PowerShellben [6 Ways]
Megoldások a PowerShell Integrated Scripting Environment (ISE) és a Command Line Console számára
Read-Host parancsmag használatával
Használja a Read-Host parancsot a tetszőleges gomb megnyomásával a folytatáshoz engedélyezéséhez a PowerShellben.
Használja a Read-Host parancsmagot:
Read-Host -Prompt "Press any key to continue..."KIMENET:
Press any key to continue...: pressed
pressedA Read-Host parancsmag a leggyakrabban használt és könnyen érthető. A végrehajtás szüneteltetésére használtuk, és felszólítottuk a felhasználót, hogy kérje le a beviteli sort a PowerShell-konzolról. Ne feledje, meg kell nyomnunk az Enter billentyűt a szünet módból való kilépéshez.
Itt a -Prompt paramétert használták a prompt szövegének megadására, lehetővé téve a felhasználó számára egy karakterlánc beírását. Ha a karakterlánc szóközt tartalmaz, akkor tegye idézőjelek közé.
A Read-Host parancsmag segítségével biztonságos adatok, például jelszavak beszerzésére kérhetjük a felhasználókat, mivel a kapott bemeneti karakterláncot biztonságos karakterláncként menthetjük a -AsSecureString használatával. paramétert a következőképpen:
A Read-Host használata az -AsSecureString mellett:
Read-Host "Enter a Password" -AsSecureStringKIMENET:
Enter a Password: ****Ne feledje, hogy a Read-Host csak 1022 karaktert tud elfogadni a felhasználó által megadott bemenetként.
Message Box UI használata
Ez a megközelítés praktikus, ha csak egy kulcsot szeretnénk engedélyezni a PowerShellben való folytatáshoz. Tehát ennek megengedéséhez:
- Használja a
New-Objectparamétert a-ComObjectparaméterrel aCOMobjektum programozott azonosítójának megadásához. - A
.Popup()függvény segítségével szöveget jeleníthet meg egy felugró ablakban.
Az Message Box felhasználói felület használata:
$Shell = New-Object -ComObject "WScript.Shell"
$Button = $Shell.Popup("Press OK to continue.", 0, "Hi", 0)A New-Object parancsmag segítségével létrehozhatunk egy COM objektumot vagy .NET-keretrendszert. Megírhatjuk a COM objektum ProgID-ját vagy egy .NET keretrendszer osztályának típusát.
A fenti kódkerítéshez a New-Object segítségével létrehoztuk a COM objektum példányát. Ezután megadtuk a -ComObject paramétert a New-Object parancsmaggal a COM< programozott azonosítójának ( változóba mentette.ProgID) írásához. /code> objektum, amely a WScript.shell volt, és a hivatkozást a $Shell
Ezután a Popup() metódussal jelenítettük meg a szöveget a felugró üzenetmezőben. A Popup() metódust csak úgy használhatjuk, ha a WshShell objektummal láncoljuk, ami esetünkben a $Shell. A .Popup() metódus négy értéket vett fel; értsük meg őket az alábbiakban:
strText- Karakterlánc típusú értéket tartalmaz, amely a felugró üzenetmezőben megjelenő szöveges üzenet. AzstrTextparaméter értékeként anyomja meg az OK gombot a folytatáshoz.nSecondsToWait- Ez egy opcionális paraméter, amely egy számértéket tartalmaz, amely a felugró üzenetablak megjelenítéséhez szükséges maximális időt (másodpercben) jelöli. Ha ez a paraméter0-ra van állítva, ami az alapértelmezett értéke, akkor az üzenetablak mindaddig látható lesz, amíg a felhasználó meg nem nyomja azOKvagy azXgombot. Az üzenetmező akkor is bezárul, ha a felhasználók Enter billentyűt nyomnak le a billentyűzetükről.strTitle- Egy karakterlánc típusú értéket is tartalmaz, amelyet az előugró üzenetablak címeként használnak.nType- Opcionális paraméter, amely egy számértéket tartalmaz, amely az előugró üzenetmezőben használni kívánt ikonok/gombok típusát jelzi. Például a0-t használtuk azOKgomb megjelenítéséhez. Itt különböző tizedesjegyeket találhat a különböző típusú vezérlőkhöz (gombokhoz) és ikonokhoz.
Végül a $Button-t használtuk egy számérték megtartására, amelyet a .Popup() metódus ad vissza. Ez a számérték a gombok számát jelöli, amelyekre a felhasználó kattint az előugró üzenetdoboz bezárásához.
Megjegyzés: Az nType paraméterhez hexa decimális értékeket is megadhatunk.
Eddig a pontig különböző megközelítéseket tanultunk meg, amelyek a PS-ISE-ben (PowerShell Integrated Scripting Environment), egy grafikus felhasználói felületen és a front-end hostingban működnek. Az alábbiakban azonban bemutatunk néhány olyan módszert, amelyek csak a PowerShell parancssori konzolon működnek.
Megoldások a PowerShell parancssori konzolhoz
A ReadKey() metódus használata [void]-vel vagy anélkül
Használja a ReadKey() metódust a tetszőleges gomb megnyomásával a folytatáshoz engedélyezéséhez a PowerShellben.
Használja a ReadKey()-t érvénytelen értékkel:
[void][System.Console]::ReadKey($true)A fenti parancs megvárja, amíg a felhasználó megnyom egy gombot a folytatáshoz. Vegye figyelembe, hogy ez a parancs nem fogadja el az egyes módosító billentyűket (Alt, Ctrl és Shift).
Bontsuk ezt a parancsot részekre, hogy tisztábban megtanuljuk. Először a ReadKey($true) vár, ami azt jelenti, hogy blokkolva van egy ReadKey metódust kibocsátó szálon, és a felhasználó megnyomta a függvény- vagy karakterbillentyűt.
Itt a funkció- vagy karakterbillentyű lehet egy vagy módosító billentyűkkel kombinálva (Alt, Ctrl és Shift). Ha azonban csak bármilyen módosító billentyűt nyom meg, az nem eredményezi a ReadKey metódus visszatérését.
A $true argumentumot átadtuk a ReadKey() metódusnak, mert nem akartuk megjeleníteni a lenyomott billentyűt a konzol ablakában. De ez nem kötelező; kihagyhatjuk ezt az argumentumot, vagy átadhatjuk a $false parancsot, ha a lenyomott billentyűt a konzolablakban akarjuk megjeleníteni. Lásd a következő példát.
A ReadKey() használata $false argumentummal:
[void][System.Console]::ReadKey($false)
A ReadKey() használata argumentum nélkül:
[void][System.Console]::ReadKey()A statikus tagoperátort (::) használtuk a .NET-keretrendszer System.Console nevű statikus osztályának meghívására. A :: operátort is használhatjuk a .NET keretrendszer statikus tulajdonságainak meghívására. Most pedig mi az a System.Console?
A .NET keretrendszerben van egy Console nevű osztályunk, amely a System névtérben található. A System.Console osztály lehetővé teszi számunkra, hogy programozottan hozzáférjünk az stdin, stderr és stdout értékekhez a konzolalkalmazásban. Itt az stdin, stderr és stdout a konzolalkalmazás bemeneti, hiba- és kimeneti adatfolyamait jelenti.
A kérdés az, hogy miért használjuk a [void]-t? Mielőtt válaszolna erre a kérdésre, használja a következő parancsot a [void] nélkül, és tekintse meg a kimenetét.
A ReadKey() használata void nélkül:
[System.Console]::ReadKey($true)KIMENET:
KeyChar Key Modifiers
------- --- ---------
5 NumPad5 0Nézd, megkapjuk az információt a lenyomott billentyűről. Most próbálja meg felidézni, hol tanultuk meg, hogy a $true argumentum átadásra kerül a ReadKey() metódusnak, amikor nem akarjuk megjeleníteni a lenyomott billentyűvel kapcsolatos adatokat. a konzolt, de a fenti példa teljesen más módon viselkedik; Miért?
Ennek az az oka, hogy minden olyan kifejezés vagy parancs, amely bizonyos adatokat ad ki vagy ad vissza, implicit módon megjelenik a kimeneti adatfolyamban (más néven sikerfolyamban), amely alapértelmezés szerint a gazdagéphez kerül, egy terminálhoz (konzolablak), amelyben a PowerShell-munkamenet fut.
El kell tiltanunk, ha nem akarjuk kiadni az adatokat. Az elnyomáshoz számos lehetőségünk van, köztük a ... | Out-Null, ... > $null, [void] (...) és $null=... kód>. Tehát a [void] segítségével letiltottuk a [System.Console]::ReadKey($true) által visszaadott adatokat. Ne feledje, hogy a [void] a kimenet előzetes elnyomásának szándékát jelzi.
Most gondoljunk egy olyan helyzetre, amikor meg kell jelenítenünk a lenyomott billentyűt és a releváns adatokat, amelyek egy System.ConsoleKeyInfo objektum formájában vannak tárolva. Ebben az esetben a következő parancsot használjuk.
ReadKey() metódus használata:
[Console]::ReadKey()KIMENET:
g
KeyChar Key Modifiers
------- --- ---------
g G 0A RawUI.ReadKey() módszer használata
A tetszőleges billentyű megnyomásával a folytatáshoz engedélyezéséhez a PowerShellben:
- A
Write-Hosthasználatával felhasználóbarát üzenetet írhat. - A
RawUI.ReadKey()használatával olvassa be a billentyűleütést a billentyűzetről.
Használja a RawUI.ReadKey() metódust:
Write-Host -NoNewLine 'Press any key to continue...';
$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown');KIMENET:
Press any key to continue...
VirtualKeyCode Character ControlKeyState KeyDown
-------------- --------- --------------- -------
104 8 NumLockOn TrueItt a Write-Host parancsmagot használtuk, hogy felhasználóbarát üzenetet jelenítsen meg a PowerShell-konzolon, és eligazítsa a felhasználót, hogy mit kell tennie.
Ezután a -NoNewLine paramétert használtuk a bemeneti objektum összefűzésére, így kimenetet alkotva. A kimeneti karakterláncok közé nem lesz új sor vagy szóköz. Hasonlóképpen, az utolsó kimeneti karakterlánc után nem lesz új sor.
Ezt követően a $Host.UI.RawUI.ReadKey() metódust használtuk, amely hasonló a [Console]::ReadKey()-hoz, amelyet a előző szakasz. Bármilyen billentyűt el tud fogadni, még a módosító billentyűket is, beleértve a Ctrl, Shift, Alt és egyéb módosító billentyűket.
Ne feledje, hogy a RawUI.ReadKey()-t használhatjuk ReadKeyOptions-okkal és anélkül is, amely magában foglalja az IncludeKeyDown, IncludeKeyUp, NoEcho és AllowCtrlC. Tehát a fenti kódpéldához a ReadKey()-t használtuk a ReadKeyOptions-val, és kimenetként adatokat kaptunk, amelyeket KeyInfo objektum formájában mentünk el.
Ha további technikai részletekre kíváncsi, hadd mondjam el, hogy a $Host.UI egy System.Management.Automation.Internal.Host.InternalHostRawUserInterface objektum. Ezzel szemben a $Host egy automatikus változó, amelynek típusa System.Management.Automation.Internal.Host.InternalHost. Ezért a $Host.GetType().FullName paranccsal tudjuk megtudni a $Host változó típusát.
A cmd /c pause parancs használatával
Használja a cmd /c pause parancsot a tetszőleges gomb megnyomásával a folytatáshoz engedélyezéséhez a PowerShellben.
Használja a cmd /c pause parancsot:
cmd /c pauseKIMENET:
Press any key to ContinueA fenti parancs engedélyezte és megjelenítette: Nyomjon meg egy gombot a folytatáshoz..., és várja meg, amíg a felhasználó megnyom egy gombot. Visszatér, ha a felhasználó bármelyik billentyűt megnyomja, kivéve a módosító billentyűket.
Az timeout /t parancs használata
Használja az timeout /t parancsot a tetszőleges gomb megnyomásával a folytatáshoz engedélyezéséhez, és várja meg a megadott számú másodpercet vagy a felhasználó bevitelét a PowerShellben.
Időtúllépés /t parancs használata:
timeout /t 10KIMENET:
Waiting for 10 seconds, press a key to continue ...A fenti timeout parancs egy időkeretre vagy végtelen időre szünetelteti a végrehajtást. Itt a /t segítségével határoztuk meg az időt másodpercben. Ne feledje, hogy a megadott időnek a -1 és a 99999 tartományban kell lennie. Így például a fenti parancs 10 másodpercig vár, ha nem nyomnak le gombot.
A következő paranccsal várhatunk végtelen ideig, amíg a felhasználó meg nem nyom egy billentyűt, kivéve az Fn, a Ctrl és az Alt stb. billentyűket.
Időtúllépés /t parancs használata:
timeout /t -1Ez minden arról szól, hogyan kell megnyomni bármely gombot a PowerShellben való folytatáshoz.
