Articles

SAPIEN Technologies (Čeština)

Po mnoha letech psaní skriptů pro prostředí Windows PowerShell konzoli, teď jsem učení na další úroveň automatizace — psaní GUI aplikací, které běží v prostředí Windows PowerShell příkazy. Formuláře studia PowerShell poskytují jemný a dobře vedený úvod do aplikací GUI, ale stále mi trvalo nějaký čas, než jsem porušil staré návyky.

neustále si musím připomínat, že věci, které“ jen fungují “ v konzole, nemají v GUI žádný smysl. Psaní výstup je jedním z nich.,

Psaní Výstup do Konzole

Při generování výstupu v konzole prostředí Windows PowerShell, zobrazí se výstup jako textové řetězce v okně konzoly.

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

v zákulisí, Windows PowerShell tiše připojí Out-String příkaz potrubí a odešle výsledky na „standardní výstup“ („stdout“). Proces, který hostuje Windows PowerShell, zpracovává standardní výstup, téměř vždy zápisem výstupu do konzoly (chování hostitele se může lišit).,

Pokud tedy spustíte cmdlet, který vrací objekty, jako je cmdlet Get-Process, (reprezentace řetězců), objekty se objeví v konzole.

Pokud formátujete objekty, například pomocí Format-List nebo Format-Table, (reprezentace řetězců), formátované objekty se objeví v konzole.

Pokud spustíte Write-Host nebo Write-out, out-Host nebo Out-String, zobrazí se v konzole výstupní řetězce.

a i když odešlete výstup do alternativního výstupního proudu pomocí Write-Warning, write-Verbose nebo write-Error, ve výchozím nastavení se výstup zobrazí v konzole.,

ale GUI aplikace nemají konzolu. Co se stane s výstupem, který by jinak šel do konzoly, když není konzola? A co je důležitější, jak mohu spravovat výstup bez konzoly?

kde je můj výstup?

GUI aplikace, stejně jako ty skvělé, které píšete v PowerShell Studio, nemají konzolu. Neexistuje žádný standardní výstup. Neexistuje žádný automaticky připojený řetězec.

takže když vygenerujete výstup a neukládáte jej do souboru nebo proměnné, výstup se právě ztratí.,

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

je to jako džbán házející baseball, když na hřišti není žádný chytač. Míč prostě spadne na zem a zastaví se.. brát.

takže v aplikaci GUI nemůžete jen psát výstup a doufat v to nejlepší. Pokud chcete zobrazit výstup cmdlet nebo jej uložit, musíte to udělat explicitně.

výstup displeje v textovém poli

aplikace GUI je soubor ovládacích prvků. Chcete-li zobrazit výstup, musíte přiřadit výstup ovládacímu prvku, jako je textové pole, Rich textové pole nebo datová mřížka.,

například pro zobrazení názvu místního počítače v konzole spustíte příkaz $env:ComputerName.

PS C:> $env:ComputerNameJUNEB-TESTBOX

když zkusím totéž v aplikaci GUI, kde není konzola, nevidím vůbec žádný výsledek. V tomto příkladu jsem vytvořil formulář s tlačítkem, které po kliknutí spustí výraz $env:ComputerName.,

$buttonComputerName_Click = { <b>$prost:Název_počítače</b>}

Ale, když jsem klepněte na tlačítko, nic se nestane, i když mám konzoly otevřené okno.

Na displeji název počítače v GUI aplikaci, přidat ovládací displej k mé formě a přiřadit výstupu příkazu na způsob zobrazení control.,

například mohu do formuláře přidat ovládací prvek textového pole a pomocí operátoru přiřazení ( = ) přiřadit výsledek výrazu textové Vlastnosti textového pole. Nyní, když kliknete na tlačítko, uvidíte výstup v textovém poli.

$buttonComputerName_Click = { $textboxResults.Text = $prost:Název_počítače}

Zde je výsledek:

Výstup Zobrazení v jiném Programu

můžete také zobrazit výstup z příkazů v objektech, které nejsou součástí vašeho programu., GUI profesionálové si myslí, že tento přístup je nedbalý a není nejlepší praxe, ale možná zjistíte, že je užitečné pro testování nebo ladění.

například můžete výstup potrubí do out-GridView cmdlet.

$buttonComputerName_Click = { $prost:Název_počítače | Out-GridView}

Zde je výsledek:

můžete také napsat do souboru a otevřete soubor. Tyto ukázkové příkazy vytvářejí dočasný soubor, zapisují do souboru a poté pomocí programu Poznámkový blok zobrazují soubor., Opět to dělá skutečné programátory krčit, ale funguje to, alespoň pro testování.

Zde je výsledek:

Převést na Řetězce

Další úkol, který budete potřebovat pro správu v GUI aplikace je převod objektů na textové řetězce. Obvykle, to prostě znamená potrubí výstup na out cmdlet, jako je Out-String. Out cmdlets, včetně Out-GridView, převést objekty na řetězec dat.

když napíšete výstup do konzoly, Windows PowerShell automaticky připojí příkaz Out-String k potrubí., V aplikaci GUI však není žádná konzola a žádný automatický out-String.

Když přiřadíte non-řetězce objektů na řetězec objekt nebo ovládací prvek, který bere string objekty, jako jsou Textové pole, prostředí Windows PowerShell volá metodu toString() objektu. (V jiných jazycích by zadání prostě selhalo, ale snaží se pomoci.) S některými objekty, jako je datetime a ErrorRecord objects, toString() funguje dobře, ale v mnoha případech vytváří liché výsledky.

například tento příkaz přiřadí výsledky příkazu get-Process textovému poli., Windows PowerShell uznává, že potřebujete text a volá metodu toString() procesních objektů, ale výsledek není užitečný.

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

získat řetězec reprezentace default proces stůl, potrubí výstup do Out-String rutiny a pak přiřadit jej do textového pole.

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

TIP: Chcete-li výstup, snadno čitelný, nastavte textové pole (nebo rich text box) pro použití monospace písmo. V PowerShell Studio klepněte pravým tlačítkem myši na textové pole, klepněte na tlačítko použít sadu vlastností a potom klepněte na tlačítko Použít písmo konzoly.

nevyhýbejte se tostringu () úplně. Existuje několik objektů, kde metoda toString() vytváří užitečný výsledek. Objekty DateTime jsou klasickým příkladem. Metoda toString () objektu DateTime vrací řetězec formátu „short-date/long-time“. Out-String vrací formát“ long-date/long-time“.,

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

#Používá toString()$buttonGetDate_Click = { $textboxDate.Text = Get-Data}

#Používá toString()$buttonGetDate_Click = { $textboxDate.Text = Get-Date | Out-String}

můžete také použít Formát a UFormat parametry Get-Date rutiny získat formátované datum řetězec v téměř jakékoliv konfiguraci., Chcete-li například získat datum ve formátu RFC1123, použijte formát R (nebo „r“). Není třeba potrubí Out-String při použití formátu nebo UFormat, protože tyto parametry nutí cmdlet vrátit řetězec.

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

Převod Formátované Objekty

V konzoli, Formát rutiny, jako je například Formát-Tabulka, jsou obvykle poslední prvek v potrubí. Výstup vypadá skvěle v konzole, protože Windows PowerShell před odesláním do konzoly připojí k potrubí příkaz Out-String.,

ve výchozím nastavení však v aplikaci GUI získáte výsledek volání metody toString() format objects, kterou Formát cmdlets vrací.

$buttonGetHotfix_Click = { $textboxHotFix.Text = Get-HotFix | Format-Table -Property HotFixID, Nainstalovaný -AutoSize}

Chcete-li získat více použitelné zobrazení v GUI aplikace, potrubí formát objektů-String rutiny před přiřazením do vlastnosti Text textového pole.,

to je lepší!

Po chvíli, úkolem řídící výstup zobrazení v GUI aplikací stejně přirozené jako psaní rutiny jméno, ale když jste učení, být jisti, že to vyzkoušet, a ujistěte se, že všechny vaše produkce je zachycena a zobrazena v použitelné podobě.

June Blender je technologickým evangelistou společnosti SAPIEN Technologies, Inc. Můžete se k ní dostat na [email protected] nebo ji sledujte na Twitteru na @juneb_get_help.