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.