Articles

SAPIEN Technologies (Magyar)

sokéves írás szkriptek a Windows PowerShell konzol, én most a tanulás a következő szintre az automatizálás-írás GUI alkalmazásokat futtató Windows PowerShell parancsokat. A PowerShell Studio forms gyengéd és jól irányított bevezetést nyújt a GUI alkalmazásokhoz, de még mindig időbe telt, hogy megtörjem a régi szokásokat.

folyamatosan emlékeztetnem kell magam arra, hogy a konzolban “csak” működő dolgoknak nincs értelme a GUI-ban. Írás kimenet az egyik közülük.,

kimenet írása a konzolra

amikor kimenetet generál a Windows PowerShell konzolban, a kimenet Szöveges karakterláncként jelenik meg a konzolablakban.

PS C:> Get-DateWednesday, December 3, 2014 7:16:38 AM

A Színfalak Mögött a Windows PowerShell csendesen csatol egy Out-String parancsot a csővezetékhez, majd elküldi az eredményeket” standard output “(“stdout”). A folyamat, amely a Windows PowerShell kezeli a szabványos kimenet, szinte mindig írásban a kimenet a konzol (host viselkedés változhat).,

tehát, ha olyan parancsmagot futtat, amely objektumokat ad vissza, mint például a Get-Process parancsmag, (string ábrázolások) az objektumok megjelennek a konzolon.

ha objektumokat formáz, például Format-List vagy Format-Table használatával, (a formázott objektumok karakterlánc-ábrázolása) megjelenik a konzolon.

ha írási-Host vagy írási-Output, out-Host vagy out-String parancsot futtat, a kimeneti karakterláncok megjelennek a konzolon.

és még akkor is, ha a kimenetet egy alternatív kimeneti adatfolyamra küldi írási figyelmeztetés, írás-Verbóz vagy írás-hiba használatával, alapértelmezés szerint a kimenet megjelenik a konzolon.,

de a GUI alkalmazásnak nincs konzolja. Mi történik a kimenettel, amely egyébként a konzolra megy, ha nincs konzol? És ami még fontosabb, hogyan tudom kezelni a kimenetet konzol nélkül?

hol van a kimenetem?

GUI alkalmazások, mint a cool is, hogy írsz PowerShell Studio, nincs konzol. Nincs szabványos kimenet. Nincs automatikus csatolt Out-String.

tehát, amikor kimenetet generál, és nem menti fájlba vagy változóba, a kimenet csak elvész.,

Get-Process | ... <Nowhere> ...

olyan, mint egy dobó, aki baseballot dob, amikor nincs elkapó a pályán. A labda a földre esik, és megáll .. figyelmen kívül hagyva.

tehát egy GUI alkalmazásban nem lehet csak a kimenetet írni, és a legjobbat remélni. Ha meg szeretné jeleníteni a cmdlet kimenetét, vagy el szeretné menteni, akkor azt kifejezetten meg kell tennie.

kijelző kimenet egy szövegmezőbe

a GUI alkalmazás gyűjteménye ellenőrzések. A kimenet megjelenítéséhez hozzá kell rendelnie a kimenetet egy vezérlőhöz, például szövegmezőhöz, gazdag szövegdobozhoz vagy adatrácshoz.,

például a helyi számítógép nevének megjelenítéséhez a konzolon egy $env:ComputerName parancsot futtat.

PS C:> $env:ComputerNameJUNEB-TESTBOX

amikor ugyanazt megpróbálom egy GUI alkalmazásban, ahol nincs konzol, egyáltalán nem látok eredményt. Ebben a példában létrehoztam egy űrlapot egy gombbal, amely kattintáskor a $env:ComputerName kifejezést futtatja.,

$buttonComputerName_Click = { <b>$env:ComputerName</B>}

de amikor rákattintok a gombra, semmi sem történik, még akkor sem, ha konzol ablakom van nyitva.

a számítógép nevének GUI Alkalmazásban történő megjelenítéséhez megjelenítésvezérlőt adok az űrlapomhoz, és a parancs kimenetét hozzárendelem a kijelző vezérlésének módszeréhez.,

például hozzáadhatok egy szövegdoboz vezérlőt az űrlaphoz, majd a hozzárendelés operátor (=) segítségével hozzárendelhetem a kifejezés eredményét a szövegdoboz szöveg tulajdonságához. Most, amikor rákattint a gombra, megjelenik a kimenet a szövegmezőben.

 $buttonComputerName_Click = { $textboxResults.Text = $env: ComputerName}

itt van az eredmény:

kimenet megjelenítése egy másik programban

megjelenítheti a parancsok kimenetét olyan objektumokban is, amelyek nem részei a programnak., GUI szakemberek úgy vélik, hogy ez a megközelítés hanyag, nem a legjobb gyakorlat, de lehet, hogy hasznos a tesztelés vagy hibakeresés.

például, akkor a cső a kimenet A Out-GridView cmdlet.

$buttonComputerName_Click = { $env:ComputerName | Out-GridView}

itt az eredmény:

egy fájlba is írhat, majd megnyithatja a fájlt. Ezek a minta parancsok ideiglenes fájlt hoznak létre, írnak a fájlba, majd a Jegyzettömb segítségével jelenítik meg a fájlt., Ismét ez teszi a valódi programozókat, de működik, legalábbis tesztelésre.

itt van az eredmény:

konvertálás karakterláncokra

egy másik feladat, amelyet egy GUI alkalmazásban kell kezelnie, az objektumok szöveges karakterláncokká konvertálása. Általában, ez csak azt jelenti, csővezeték a kimenet egy Out cmdlet, mint például Out-String. A parancsmagok, beleértve az Out-GridView-t is, konvertálják az objektumokat karakterlánc-adatokká.

amikor kimenetet ír a konzolra, a Windows PowerShell automatikusan hozzárendel egy Out-String parancsot a csővezetékhez., A GUI alkalmazásban azonban nincs konzol és nincs automatikus Out-String.

ha nem karakterlánc objektumokat rendel egy karakterlánc objektumhoz vagy olyan vezérlőhöz, amely karakterlánc objektumokat, például szövegdobozt vesz igénybe, a Windows PowerShell felhívja az objektum toString() metódusát. (Más nyelveken a feladat csak kudarcot vall, de segíteni próbál.) Néhány objektummal, mint például a DateTime és az ErrorRecord objektumok, a toString() jól működik, de sok esetben furcsa kinézetű eredményeket produkál.

például ez a parancs hozzárendeli a Get-Process parancs eredményeit egy szövegmezőhöz., A Windows PowerShell felismeri, hogy szövegre van szüksége, és felhívja a Folyamatobjektumok toString () módszerét, de az eredmény nem hasznos.

 $buttonGetProcess_Click = { $textboxResults.Text = Get-Process}

Az alapértelmezett folyamattábla karakterlánc-ábrázolásához pipálja a kimenetet az Out-String parancsmagra, majd rendelje hozzá a szövegmezőhöz.

 $buttonGetProcess_Click = { $textboxResults.,Text = Get-Process/Out-String}

tipp: ahhoz, hogy a kimenet könnyen olvasható, állítsa be a szövegdoboz (vagy rich text box), hogy egy monospace betűtípus. A PowerShell Studio alkalmazásban kattintson a jobb gombbal a szövegmezőre, kattintson a tulajdonságkészlet alkalmazása elemre, majd kattintson a konzol betűtípus alkalmazása elemre.

ne kerüld el teljesen a toString() szót. Van néhány objektum, ahol a toString() módszer hasznos eredményt hoz. A DateTime objektumok a klasszikus példa. A DateTime objektum toString () metódusa “rövid Dátum/hosszú idő” formátumú karakterláncot ad vissza. Az Out-String “hosszú Dátum/hosszú idő” formátumot ad vissza.,

PS C:> (Get-Date).ToString()12/6/2014 10:42:24 AMPS C:> Get-Date | Out-StringSaturday, December 6, 2014 10:42:37 AM

 #Uses toString()$buttonGetDate_Click = { $textboxDate.Text=Get-Date}

#Uses toString()$buttonGetDate_Click = { $textboxDate.Text = get-Date | out-String}

a Get-Date cmdlet formátumát és UFormat paramétereit is használhatja, hogy formázott dátumláncot kapjon szinte bármilyen konfigurációban., Például, ha dátumot szeretne kapni RFC1123 formátumban, használja az R (vagy “r”) formátumot. A formátum vagy az UFormat használatakor nem kell a karakterláncot kicsavarni, mert ezek a paraméterek arra kényszerítik a parancsmagot, hogy visszaadja a karakterláncot.

PS C:> Get-Date -Format RTue, 09 Dec 2014 10:46:41 GMT

formázott objektumok konvertálása

a konzolban a cmdlet formátumú formátum, például a Formátum-táblázat általában az utolsó elem a csővezetékben. A kimenet jól néz ki a konzolon, mert a Windows PowerShell egy Out-String parancsot csatol a csővezetékhez, mielőtt elküldi a konzolra.,

de egy GUI alkalmazásban alapértelmezés szerint megkapja a formátumobjektumok toString() metódusának hívását, amelyet a Formátum parancsmagok visszaadnak.

 $buttonGetHotfix_Click = { $textboxHotFix.Text = Get-Gyorsjavítás | Format-Table -Ingatlan HotFixID, InstalledOn -AutoSize}

ahhoz, Hogy egy jobban használható a kijelző a GUI alkalmazás, cső a formátum tárgyakat, hogy az Out-String parancsmagot, mielőtt rendelne őket, hogy a Szöveg ingatlan a Szövegmezőbe.,

ez jobb!

egy idő után a GUI alkalmazásokban a kimeneti kijelző kezelésének feladata olyan természetes lesz, mint a parancsmag nevének beírása, de tanulás közben győződjön meg róla, hogy tesztelje, és győződjön meg róla, hogy az összes kimenetet rögzített és használható formátumban jeleníti meg.

June Blender a SAPIEN Technologies, Inc. Elérheti őt a [email protected] vagy kövesse őt a Twitteren a @juneb_get_help címen.