Weboldal keresés

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
pressed

A 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" -AsSecureString

KIMENET:

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-Object paramétert a -ComObject paraméterrel a COM objektum 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 (ProgID) írásához. /code> objektum, amely a WScript.shell volt, és a hivatkozást a $Shell változóba mentette.

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. Az strText paraméter értékeként a nyomja 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éter 0-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 az OK vagy az X gombot. 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 a 0-t használtuk az OK gomb 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         0

Né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         0

A RawUI.ReadKey() módszer használata

A tetszőleges billentyű megnyomásával a folytatáshoz engedélyezéséhez a PowerShellben:

  • A Write-Host haszná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    True

Itt 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 pause

KIMENET:

Press any key to Continue

A 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 10

KIMENET:

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 -1

Ez minden arról szól, hogyan kell megnyomni bármely gombot a PowerShellben való folytatáshoz.

Kapcsolódó cikkek