Articles

SAPIENS-Teknologiaa

monien vuosien Jälkeen kirjallisesti skriptejä Windows PowerShell-konsoliin, olen nyt oppimisen seuraavalle tasolle automaatio — kirjoittaminen GUI sovelluksia, jotka toimivat Windows PowerShell-komentoja. PowerShell Studio lomakkeet tarjoavat lempeä ja hyvin opastettuja johdatus GUI-sovelluksia, mutta se on silti vienyt minua jonkin aikaa murtaa vanhoja tapoja.

minun täytyy jatkuvasti muistuttaa itseäni siitä, että konsolin ”vain toimii” asiat eivät ole mitään järkeä GUI: ssa. Kirjoittaminen lähtö on yksi niistä.,

Kirjoittaminen Lähtö Konsoliin

Kun voit luoda tuotos Windows PowerShell-konsoliin, lähtö näkyy teksti jouset konsoli-ikkuna.

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

kulissien Takana, Windows PowerShell hiljaa liittää Out-String komento putki ja lähettää tulokset ”standard output” (”stdout”). Prosessi, joka isännöi Windows PowerShell käsittelee standardin lähtö, lähes aina kirjoittamalla lähtö konsoli (isäntä käyttäytyminen voi vaihdella).,

niin, jos suoritat objekteja palauttavan cmdlet: n, kuten Get-Process cmdlet: n, (string representations of), objektit näkyvät konsolissa.

Jos et muodossa esineitä, kuten käyttämällä Format-List-tai Muotoile-Taulukko, (string edustustot) muotoiltu objektit näkyvät konsolin.

Jos suoritat Write-Host tai Write-out, Out-Host tai out-String, lähtökielet näkyvät konsolissa.

– Ja vaikka lähettää lähtö vaihtoehtoinen output stream käyttämällä Write-Varoitus -, Kirjoitus-Verbose, tai Kirjoittaa Virhe, oletuksena, lähtö näkyy konsolin.,

mutta GUI-sovelluksessa ei ole konsolia. Mitä tapahtuu tuotoksen, joka muuten menisi konsoliin, kun ei ole konsolia? Ja mikä tärkeintä, miten hallita tuotos ilman konsolia?

Where is my output?

GUI-sovelluksissa, kuten PowerShell-studioon kirjoittamissasi cooleissa, ei ole konsolia. Vakiotuotosta ei ole. Ei ole auto-liitteenä Out-String.

joten, kun tuotat tuotoksen etkä tallenna sitä tiedostoon tai muuttujaan, lähtö on vain menetetty.,

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

Se on kuin syöttäjä heittää baseball kun ei ole catcher kentällä. Pallo vain putoaa maahan ja rullaa pysähdykseen .. ohittaa.

Joten, GUI sovellus, et voi vain kirjoittaa lähtö ja toivoa parasta. Jos haluat näyttää cmdlet ulostulo tai tallentaa sen, sinun täytyy tehdä se nimenomaisesti.

Näyttö lähtö tekstikenttään

GUI sovellus on kokoelma valvontaa. Näyttääksesi tulosteen, sinun täytyy määrittää tuloste ohjaukseen, kuten tekstiruutuun, rikkaaseen tekstiruutuun tai dataverkkoon.,

esimerkiksi konsolin paikallisen tietokoneen nimen näyttämiseksi suoritetaan $env:ComputerName-komento.

PS C:> $env:ComputerNameJUNEB-TESTBOX

Kun yritän samaa GUI sovellus, jossa ei ole konsolia, en näe mitään tulosta ollenkaan. Tässä esimerkissä, olen luonut lomakkeen painiketta, joka, kun napsautetaan, toimii $env: ComputerName lauseke.,

$buttonComputerName_Click = { <b>$env:Tietokoneennimi</b>}

Mutta, kun klikkaa painiketta, mitään ei tapahdu, vaikka minulla on konsoli-ikkuna auki.

näyttää tietokoneen nimi-GUI-sovellus, voin lisätä näytön hallinta-minun muodossa ja määrittää lähtö-käskyn menetelmä näytön ohjaus.,

voin esimerkiksi lisätä Tekstiruutu ohjaus muodostaa ja käyttää sijoitusoperaattori (=) määritä lausekkeen tulos Tekstiin omaisuutta Oppikirja. Nyt, kun napsautat painiketta, näet tulosteen tekstiruudussa.

$buttonComputerName_Click = { $textboxResults.Teksti = $env:Tietokoneennimi}

Tässä on tulos:

Näyttö Lähtö Eri Ohjelma

Voit myös näyttää tuotos komentoja esineitä, jotka eivät ole osa ohjelmaa., GUI ammattilaiset ajattelevat, että tämä lähestymistapa on huolimaton eikä paras käytäntö, mutta saatat löytää sen hyödyllinen testaus tai virheenkorjaus.

esimerkiksi ulostulon voi putkella Out-GridView cmdletiin.

$buttonComputerName_Click = { $env:Tietokoneennimi | Pois-GridView}

Tässä on tulos:

Voit myös kirjoittaa tiedoston ja avata tiedoston. Nämä näytekomennot luovat tilapäisen tiedoston, kirjoittavat tiedostoon ja käyttävät sitten Muistilehtiötä tiedoston näyttämiseen., Jälleen, tämä saa oikeat ohjelmoijat ärtymään, mutta se toimii, ainakin testaukseen.

Tässä on tulos:

Muuntaa Jousille

Toinen tehtävä, sinun täytyy hallita GUI sovellus on muuntaa esineitä merkkijonoja. Yleensä tämä tarkoittaa vain tuotannon putkittamista ulos cmdlet, kuten Out-String. Out cmdlets, mukaan lukien Out-GridView, muuntaa esineitä merkkijono tietoja.

kun kirjoitat tulosteen konsoliin, Windows PowerShell liittää automaattisesti Out-String-komennon putkistoon., Mutta, ei ole konsolia eikä automaattista Out-String GUI sovellus.

Kun liität non-string esineitä merkkijono esine tai ohjaus, joka vie merkkijono esineitä, kuten Oppikirja, Windows PowerShell kutsuu toString() metodia objektin. (Muilla kielillä tehtävä vain epäonnistuisi,mutta se yrittää auttaa.) Joidenkin objektien, kuten Datetimen ja Errorrecordin objektien kanssa toString () toimii ihan hyvin, mutta monissa tapauksissa se tuottaa parittomannäköisiä tuloksia.

esimerkiksi tämä komento määrittää Get-Process-komennon tulokset tekstiruutuun., Windows PowerShell tunnustaa, että tarvitset tekstiä ja kutsuu toString() menetelmä Prosessi esineitä, mutta tulos ei ole hyödyllinen.

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

saada merkkijono edustus default prosessi, pöytä, putki lähtö Ulos-String-cmdlet-komentoa ja sitten liitä se tekstikenttään.

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

VIHJE: Voit tehdä lähtö on helppo lukea, asettaa text box (tai rich text box) käyttää monospace fontti. Valitse PowerShell Studio, Napsauta tekstiruutua hiiren kakkospainikkeella, valitse Apply Property Set ja valitse sitten Apply Console Font.

älä vältä tossuttelua() kokonaan. On olemassa muutamia esineitä, joissa toString () – menetelmä tuottaa hyödyllisen tuloksen. DateTime-objektit ovat klassinen esimerkki. DateTime-objektin toString ()-menetelmä palauttaa ”lyhyt-date/long-time” – formaattijonon. Out-String palauttaa ”Long-date/long-time” – formaatin.,

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

#Käyttää toString()$buttonGetDate_Click = { $textboxDate.Text = Get-Date}

#Käyttää toString()$buttonGetDate_Click = { $textboxDate.Text = Get-Date | Pois-String}

Voit myös käyttää Muodossa ja UFormat parametrit Get-Date-cmdlet saada alustettu päivämäärä, string lähes mitään asetuksia., Esimerkiksi saada päivämäärä RFC1123 muodossa, käyttö-formaatti R (tai”r”). Ei tarvitse putki Out-String kun käytät muotoa tai UFormat, koska nämä parametrit pakottaa cmdlet palauttaa merkkijono.

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

Muuntaa Muotoiltuja Esineitä

konsoli -, Muoto-cmdlets, kuten Muotoilu-Taulukko, ovat yleensä viimeinen osa putken. Lähtö näyttää hyvältä konsolissa, sillä Windows PowerShell liittää putkistoon Out-String-komennon ennen sen lähettämistä konsolille.,

Mutta, GUI sovellus, oletuksena, voit saada tulos kutsuu toString() menetelmä, muodossa esineitä, jotka Muodossa cmdlets palata.

$buttonGetHotfix_Click = { $textboxHotFix.Text = Get-HotFix-korjaus | Muotoilu-Taulukko -Ominaisuus HotFixID, InstalledOn -automaattinen koko}

saada enemmän käyttökelpoista näyttö GUI sovellus, putken muoto esineitä Out-String-cmdlet-komentoa ennen kuin määrität ne Tekstin omaisuutta Oppikirja.,

– Se on parempi!

sen Jälkeen, kun tehtävä toimitusjohtaja lähtö näyttää teidän GUI sovelluksia tulee yhtä luonnollista kuin kirjoittaminen-cmdlet-komennon nimi, mutta kun olet oppimisen, testaa ja varmista, että kaikki tuotanto on kiinni ja näytetään käyttökelpoisessa muodossa.

June Blender on TEKNOLOGIAEVANKELISTA SAPIEN Technologies, Inc. Voit tavoittaa hänet osoitteessa [email protected] tai seuraa häntä Twitterissä osoitteessa @ juneb_get_help.