af.abravanelhall.net
Nuwe resepte

Koekie -monster dek 'bel my miskien'

Koekie -monster dek 'bel my miskien'


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.


'Sesamstraat' het die poptreffer verander in 'Share It Maybe', miskien die beste voorblad

As u nog nie 'n enkele voorblad-/dansvideo van 'Call Me Maybe' gehoor het nie (klik hier, en hier, en hier), dan is dit die een waarop u moet klik. Sesame straat neem die virale treffer van Carly Rae Jepsen aan, skakel dit om en laat die Cookie Monster met sy sangtoppe pronk.

Die pragtige Koekie -monster kwyl oor 'n bak koekies wat altyd buite sy bereik blyk te wees. 'N Liefdesliedjie word 'n soeke na koekies, veral in die inleiding: "Jou koekie wat wys/ en ek word honger/ laat ons afgeroomde melk vloei/ ons begin met hierdie peuselhappie."

Wat die koor betref? "Hey, ek het jou pas ontmoet/ en dit is mal/ maar jy het 'n koekie/ so deel dit dalk?/ Is dit moeilik om na jou snack baba te kyk/ maar jy het 'n koekie/ so deel dit dalk?" Cue gesinchroniseerde dans en handeklap.

Jessica Chou is 'n mede -redakteur van The Daily Meal. Volg haar op Twitter @jesschou.


Bou 'n PowerShell -module

'N Ruk gelede het iemand genoem dat dit lekker kan wees om die PowerShell-module-skryfproses te dokumenteer. Dit is al voorheen gedoen, maar ek dink dit sal lekker wees om my eie proses te plaas, van die eerste idee tot die publikasie op die amptelike PowerShellGallery.com -webwerf.

Ek het onlangs die August Scripting Games -legkaart op PowerShell.org bespreek, waarby navraag gedoen is na 'n web -API. Dit blyk dat dit 'n baie algemene behoefte is, en baie van die modules wat ons skryf, onttrek hierdie API's in handige PowerShell -funksies en -modules.

Ons gaan die veronderstelling maak dat u weet wat 'n module is, en dat u ervaring het met die skryf van PowerShell -funksies. Indien nie, moet u tyd spandeer om PowerShell te leer voordat u hier voortgaan!

Hierdie pos dek my tipiese formule vir die skryf van 'n module, met die Stack Exchange API as voorbeeld. Blaai gerus op u eie deur die PSStackExchange -kode.

Waarom modules?

Gevorderde funksies bring u ver met PowerShell. As u nie vandag funksies skryf nie, moet u u kode in hierdie herbruikbare gereedskap begin omhul. Maar ... hulle het hul grense. Hier is 'n paar redes waarom u u gevorderde funksies in 'n module kan saamvoeg:

  • Vereenvoudig die organisasie van die kode
  • Groepverwante funksies saam
  • Deel toestand tussen funksies, maar nie met die gebruiker nie
  • Hergebruik 'helperfunksies' wat u nie aan die gebruiker wil blootstel nie
  • Verbeter die vindbaarheid: Find-Module MyModule of Get-Command -Module MyModule
  • Vereenvoudig verspreiding: Installeer-module MyModule

In ons voorbeeld sal ons 'n stel Stack Exchange -funksies in een module organiseer.

Dit lyk ingewikkeld!

Dit kan 'n rukkie neem om dit van nuuts af te doen. Gelukkig kan u, sodra u 'n module of twee geskryf het, vinnig begin deur dit te kopieer en 'n paar lêers aan te pas. Moenie bang wees vir die lengte van hierdie pos nie, maar dit is die moeite werd om 'n paar minute te skryf om die basiese beginsels op te neem!

Die bestanddele

Daar is baie maniere om 'n module te skep, van 'n .psm1 -uitbreiding op 'n lêer, tot die opstel van 'n volwaardige binêre module uit C#. Ons neem hier 'n gemeenskaplike middel en gebruik die volgende bestanddele:

  • 'N Modulmanifes. Dit is 'n .psd1 -lêer wat u module beskryf. PSStackExchange.psd1
  • 'N Wortelmodule. In ons geval, 'n script module .psm1 lêer. Dit is net 'n PowerShell -kode wat uitgevoer moet word tydens die invoer van die module. PSStackExchange.psm1
  • Uitgevoerde (openbare) funksies. Dit is die gevorderde funksies wat 'n eindgebruiker vanuit ons module kan gebruik. Byvoorbeeld, Get-SEQuestion.ps1 of Get-SEObject.ps1
  • Privaat funksies. Dit is opsionele 'helperfunksies' wat ons in ons uitgevoerde funksies wil gebruik, wat die eindgebruiker nie moet sien nie. Byvoorbeeld, Add-ObjectDetail.ps1 of Join-Parts.ps1
  • Formate. Dit is opsionele format.ps1xml -formate om u uitvoer te versier, wat dikwels gespesifiseer word in die module -manifes 'FormatsToProcess'. PSStackExchange.Format.ps1xml
  • Lees my. As u GitHub of 'n ander algemene kodebewaarplek gebruik, is die Readme.md 'n handige voorblad vir u projek, geskryf met eenvoudige Markdown eerder as HTML
  • AppVeyor -opset. As u 'n ondersteunde weergawe -beheeroplossing gebruik, maak AppVeyor eenvoudige en gratis deurlopende integrasie en aflewering vir open source -projekte moontlik. AppVeyor.yml

Ons het ons bestanddele, kom ons kyk na 'n resep vir 'n module!

Die resep

Ons gaan dit in 'n paar vinnige stappe doen:

  • Skep 'n GitHub -bewaarplek
  • Skep die module en steiers rondom dit
  • Sluit AppVeyor aan en publiseer die module

Dit kan 'n paar minute neem voordat u die eerste keer deurloop, maar u kan dieselfde steierwerk leen en aanpas vir elke module wat u skryf. U kan eintlik PowerShell -modules en -hulpmiddels vind of skryf wat hierdie proses vereenvoudig.

Na die resep

Daar is geen werklike bevel hieroor nie, afhangende van wat u doen of nie inkorporeer nie, voel nie dat u dit tot die letter moet volg nie.

Skep 'n GitHub -bewaarplek.

Dit behoort redelik eenvoudig te wees. As u nog nie GitHub gebruik het nie, kan die volgende help:

  • Skep 'n rekening op GitHub, laai GitHub af vir Windows
  • Skep 'n nuwe bewaarplek (ons noem dit PSStackExchange en kies die MIT -lisensie)
  • Kloon PSStackExchange met GitHub vir Windows

Kom ons gaan na die belangrikste deel, die module self.

Skep die module en steiers rondom dit

Hier is hoe ek gewoonlik my modules organiseer. Ons sal PSStackExchange as 'n voorbeeld gebruik, en vervang dit deur u eie module!

    • en-US (of plekke van keuse)
      • about_PSStackExchange.help.txt
      • Sluit aan-onderdele.ps1
      • Kry-SEData.ps1
      • Kry-SEObject.ps1
      • Soek-SEQuestion.ps1
      • Some.Library.dll
      • SomeDependency.exe

      As ons ons projek by GitHub of 'n soortgelyke kodebewaarplek wil voeg, voeg ons 'n bietjie meer steierwerk by:

        • PSStackExchange (Module -gids hierbo beskryf)
        • Toetse
          • PSStackExchange.Tests.ps1
          • Verskaffer.Pester.ps1

          Ek het deur die volgende kode gegaan om te begin. Gewoonlik sal ek die steierwerk van 'n ander module kopieer, 'n nuwe GUID in die psd1 skep en ander modulespesifieke verwysings aanpas.

          In ons geval het ons 'n paar gevorderde Stack Exchange -funksies wat hopelik 'n paar beste praktyke volg, 'n paar privaat helperfunksies wat ons nie wil hê die gebruiker moet sien nie, en 'n paar ander lêers om toetse en bruikbaarheid te dek.

          In PSStackExchange.psm1 laai ons ons openbare en private funksies. As 'n module aan die gang is, voer ek gewoonlik $ Public.Basename uit om te voorkom dat harde koderingsfunksies in die psd1 uitgevoer word. Sodra 'n module vrygestel is, probeer ek die openbare funksies by die psd1 voeg.

          As u 'n module skryf, moet u dit oorweeg om Pester -toetse daarvoor te skryf. Dit is baie gerusstellend om 'n reeks toetse te hê wat outomaties uitgevoer word na elke verandering wat u druk, eerder as om aan te neem dat die kode wat u skryf korrek was, of probeer om u kode na elke verandering handmatig te toets. Gee dit 'n kans! Ons sluit 'n paar oppervlakkige toetse in PSStackExchange.Tests.ps1 in.

          Laastens bevat ons 'n paar bruikbaarheidskenmerke. Ons voeg 'n about_PSStackExchange -hulponderwerp by, ons versier ons uitvoer met die PSStackExchange.Format.ps1xml -lêer en voeg 'n paar aantekeninge by oor die installering en gebruik van die module in README.md.

          Ons is gereed om te gaan! Kom ons kyk hoe ons hierdie module kan publiseer sodat ander dit kan gebruik en verbeter.

          Sluit AppVeyor aan en publiseer die module

          Die inhoud van ons module is gereed om te publiseer. Voordat ons dit publiseer, sal ons deurlopende integrasie moontlik maak met handige outomatiese toetse deur AppVeyor.

          Eerstens het ons ons projek in AppVeyor opgestel deur appveyor.yml by die bewaarplek te voeg en die GitHub -projek by ons AppVeyor -rekening te voeg. Ons haal die oproepe na Pester uit in AppVeyor.Pester.ps1 en gebruik hier 'n paar idees.

          Vervolgens stoot ons die veranderinge wat ons op ons rekenaar aangebring het na GitHub. Ons kode is nou gepubliseer, en AppVeyor sal begin bou.

          Laastens wil ons ons module in die PowerShell Gallery publiseer, sodat eindgebruikers met PowerShell 5 'n eenvoudige manier kan vind om u module te vind en te installeer. Ons kan dit aansluit om outomaties in AppVeyor te werk, maar dit is 'n onderwerp vir later.

          • Meld aan by PowerShellGallery.com met u Microsoft -rekening
          • Kry u API -sleutel (vind dit hier)
          • Publiseer u module!

          Ons module is nou beskikbaar op PowerShell Gallery!

          Hoe ek modules skryf, opgesom

          Sjoe! Dit was 'n lang berig. Gelukkig kan die meeste van hierdie dinge hergebruik word in elke module wat u skryf. Kom ons kyk na die stappe:

          • Skep 'n GitHub -bewaarplek
          • Skep die module en steiers rondom dit
          • Sluit AppVeyor aan en publiseer die module

          Die eerste en laaste stap neem 'n minuut of twee elk. Die module en steierwerk rondom dit kan gekopieer en aangepas word, wat slegs 'n paar minute moet neem. Die meeste van u tyd word bestee aan die skryf van die gevorderde funksies vir die module.

          PSStackExchange

          Die module is gepubliseer en gereed om te gebruik! Ek is op 'n ander rekenaar met PowerShell 5, ek kan aan die gang kom met 'n paar reëls kode:

          Hier is 'n paar uitsette uit die voorbeelde:

          Klaar maak

          Dit is omtrent dit! As u nog nie modules skryf nie, moet u dit beslis oorweeg. Op soek na verdere leeswerk? Hier is 'n paar verwysings wat handig kan wees:

            - Dit is afkomstig van die PowerShell -beraad van 2014, danksy Kirk Freiheit - Shameless -prop. Bevat 'n aantal verwysings. - Dit gee 'n goeie oorsig van die visie en doelwitte wat vir PowerShell uiteengesit is. As u modules vir openbare verbruik skryf, oorweeg dit om dit te lees, om te voorkom dat u iets so aaklig publiseer soos Citrix se PVS 'PowerShell' snapin.

          Kantnota vir verkopers

          Deur PSStackExchange te skryf, het ek my daaraan herinner hoe belangrik dit is vir verkopers van ondernemingsprodukte om PowerShell -modules te verskaf wat die produk se API omhul. Ondanks 'n goeie API en ordentlike dokumentasie, was dit net so pynlik om 'n funksie-arm PowerShell-module hiervoor te skryf as om die Infoblox API in te pak.

          Verskaffers: as u kompetisie 'n PowerShell -module bied en u dit nie doen nie, is die kans goed dat ek na die produk van u mededinger sal streef. Dit is 'n groot toegevoegde waarde as u dit reg doen en PowerShell-konvensies volg.

          WYSIG Julie 2016: Skakels na PSStackExchange opgedateer om na 'n spesifieke tydstip te skakel. Die huidige weergawe van hierdie projek sal moontlik opdaterings sien om dinge soos PSDeploy te illustreer.

          Deel op

          Bou 'n PowerShell -module is op 06 September 2015 gepubliseer en laas op 24 Julie 2016 gewysig.


          Bou 'n PowerShell -module

          'N Ruk gelede het iemand genoem dat dit lekker kan wees om die PowerShell-module-skryfproses te dokumenteer. Dit is al voorheen gedoen, maar ek dink dit sal lekker wees om my eie proses te plaas, van die eerste idee tot die publikasie op die amptelike PowerShellGallery.com -webwerf.

          Ek het onlangs die August Scripting Games -legkaart op PowerShell.org bespreek, waarby navraag gedoen is na 'n web -API. Dit blyk dat dit 'n baie algemene behoefte is, en baie van die modules wat ons skryf, onttrek hierdie API's in handige PowerShell -funksies en -modules.

          Ons gaan die veronderstelling maak dat u weet wat 'n module is, en dat u ervaring het met die skryf van PowerShell -funksies. Indien nie, moet u tyd spandeer om PowerShell te leer voordat u hier voortgaan!

          Hierdie pos dek my tipiese formule vir die skryf van 'n module, met die Stack Exchange API as voorbeeld. Blaai gerus op u eie deur die PSStackExchange -kode.

          Waarom modules?

          Gevorderde funksies bring u ver met PowerShell. As u nie vandag funksies skryf nie, moet u u kode in hierdie herbruikbare gereedskap begin omhul. Maar ... hulle het hul grense. Hier is 'n paar redes waarom u u gevorderde funksies in 'n module kan saamvoeg:

          • Vereenvoudig die organisasie van die kode
          • Groepverwante funksies saam
          • Deel toestand tussen funksies, maar nie met die gebruiker nie
          • Hergebruik 'helperfunksies' wat u nie aan die gebruiker wil blootstel nie
          • Verbeter die vindbaarheid: Find-Module MyModule of Get-Command -Module MyModule
          • Vereenvoudig verspreiding: Installeer-module MyModule

          In ons voorbeeld sal ons 'n stel Stack Exchange -funksies in een module organiseer.

          Dit lyk ingewikkeld!

          Dit kan 'n rukkie neem om dit van nuuts af te doen. Gelukkig kan u, sodra u 'n module of twee geskryf het, vinnig begin deur dit te kopieer en 'n paar lêers aan te pas. Moenie bang wees vir die lengte van hierdie pos nie, maar dit is die moeite werd om 'n paar minute te skryf om die basiese beginsels op te neem!

          Die bestanddele

          Daar is baie maniere om 'n module te skep, van 'n .psm1 -uitbreiding op 'n lêer, tot die opstel van 'n volwaardige binêre module uit C#. Ons neem hier 'n gemeenskaplike middel en gebruik die volgende bestanddele:

          • 'N Modulmanifes. Dit is 'n .psd1 -lêer wat u module beskryf. PSStackExchange.psd1
          • 'N Wortelmodule. In ons geval, 'n script module .psm1 lêer. Dit is net 'n PowerShell -kode wat uitgevoer moet word tydens die invoer van die module. PSStackExchange.psm1
          • Uitgevoerde (openbare) funksies. Dit is die gevorderde funksies wat 'n eindgebruiker vanuit ons module kan gebruik. Byvoorbeeld, Get-SEQuestion.ps1 of Get-SEObject.ps1
          • Privaat funksies. Dit is opsionele 'helperfunksies' wat ons in ons uitgevoerde funksies wil gebruik, wat die eindgebruiker nie moet sien nie. Byvoorbeeld, Add-ObjectDetail.ps1 of Join-Parts.ps1
          • Formate. Dit is opsionele format.ps1xml -formate om u uitvoer te versier, wat dikwels gespesifiseer word in die module -manifes 'FormatsToProcess'. PSStackExchange.Format.ps1xml
          • Lees my. As u GitHub of 'n ander algemene kodebewaarplek gebruik, is die Readme.md 'n handige voorblad vir u projek, geskryf met eenvoudige Markdown eerder as HTML
          • AppVeyor -opset. As u 'n ondersteunde weergawe -beheeroplossing gebruik, maak AppVeyor eenvoudige en gratis deurlopende integrasie en aflewering vir open source -projekte moontlik. AppVeyor.yml

          Ons het ons bestanddele, kom ons kyk na 'n resep vir 'n module!

          Die resep

          Ons gaan dit in 'n paar vinnige stappe doen:

          • Skep 'n GitHub -bewaarplek
          • Skep die module en steiers rondom dit
          • Sluit AppVeyor aan en publiseer die module

          Dit kan 'n paar minute neem voordat u die eerste keer deurloop, maar u kan dieselfde steierwerk leen en aanpas vir elke module wat u skryf. U kan eintlik PowerShell -modules en -hulpmiddels vind of skryf wat hierdie proses vereenvoudig.

          Na die resep

          Daar is geen werklike bevel hieroor nie, afhangende van wat u doen of nie inkorporeer nie, voel nie dat u dit tot die letter moet volg nie.

          Skep 'n GitHub -bewaarplek.

          Dit behoort redelik eenvoudig te wees. As u nog nie GitHub gebruik het nie, kan die volgende help:

          • Skep 'n rekening op GitHub, laai GitHub af vir Windows
          • Skep 'n nuwe bewaarplek (ons noem dit PSStackExchange en kies die MIT -lisensie)
          • Kloon PSStackExchange met GitHub vir Windows

          Kom ons gaan na die belangrikste deel, die module self.

          Skep die module en steiers rondom dit

          Hier is hoe ek gewoonlik my modules organiseer. Ons sal PSStackExchange as 'n voorbeeld gebruik, en vervang dit deur u eie module!

            • en-US (of plekke van keuse)
              • about_PSStackExchange.help.txt
              • Sluit aan-deels.ps1
              • Kry-SEData.ps1
              • Kry-SEObject.ps1
              • Soek-SEQuestion.ps1
              • Some.Library.dll
              • SomeDependency.exe

              As ons ons projek by GitHub of 'n soortgelyke kodebewaarplek wil voeg, voeg ons 'n bietjie meer steierwerk by:

                • PSStackExchange (Module -gids hierbo beskryf)
                • Toetse
                  • PSStackExchange.Tests.ps1
                  • Verskaffer.Pester.ps1

                  Ek het deur die volgende kode gegaan om te begin. Gewoonlik sal ek die steierwerk van 'n ander module kopieer, 'n nuwe GUID in die psd1 skep en ander modulespesifieke verwysings aanpas.

                  In ons geval het ons 'n paar gevorderde Stack Exchange -funksies wat hopelik 'n paar beste praktyke volg, 'n paar privaat helperfunksies wat ons nie wil hê die gebruiker moet sien nie, en 'n paar ander lêers om toetse en bruikbaarheid te dek.

                  In PSStackExchange.psm1 laai ons ons openbare en private funksies. As 'n module aan die gang is, voer ek gewoonlik $ Public.Basename uit om te voorkom dat harde koderingsfunksies in die psd1 uitgevoer word. Sodra 'n module vrygestel is, probeer ek die openbare funksies by die psd1 voeg.

                  As u 'n module skryf, moet u dit oorweeg om Pester -toetse daarvoor te skryf. Dit is baie gerusstellend om 'n reeks toetse te hê wat outomaties uitgevoer word na elke verandering wat u druk, eerder as om aan te neem dat die kode wat u skryf korrek was, of om u kode handmatig te toets na elke verandering. Gee dit 'n kans! Ons sluit 'n paar oppervlakkige toetse in PSStackExchange.Tests.ps1 in.

                  Laastens bevat ons 'n paar bruikbaarheidskenmerke. Ons voeg 'n about_PSStackExchange -hulponderwerp by, ons versier ons uitvoer met die PSStackExchange.Format.ps1xml -lêer en voeg 'n paar aantekeninge by oor die installering en gebruik van die module in README.md.

                  Ons is gereed om te gaan! Kom ons kyk hoe ons hierdie module kan publiseer sodat ander dit kan gebruik en verbeter.

                  Sluit AppVeyor aan en publiseer die module

                  Die inhoud van ons module is gereed om te publiseer. Voordat ons dit publiseer, sal ons deurlopende integrasie moontlik maak met handige outomatiese toetse deur AppVeyor.

                  Eerstens het ons ons projek in AppVeyor opgestel deur appveyor.yml by die bewaarplek te voeg en die GitHub -projek by ons AppVeyor -rekening te voeg. Ons haal die oproepe na Pester uit in AppVeyor.Pester.ps1 en gebruik hier 'n paar idees.

                  Vervolgens stoot ons die veranderinge wat ons op ons rekenaar aangebring het na GitHub. Ons kode is nou gepubliseer, en AppVeyor sal begin bou.

                  Laastens wil ons ons module in die PowerShell -galery publiseer, sodat eindgebruikers met PowerShell 5 'n eenvoudige manier kan kry om u module te vind en te installeer. Ons kan dit aansluit om outomaties in AppVeyor te werk, maar dit is 'n onderwerp vir later.

                  • Meld aan by PowerShellGallery.com met u Microsoft -rekening
                  • Kry u API -sleutel (vind dit hier)
                  • Publiseer u module!

                  Ons module is nou beskikbaar op PowerShell Gallery!

                  Hoe ek modules skryf, saamgevat

                  Sjoe! Dit was 'n lang berig. Gelukkig kan die meeste van hierdie dinge hergebruik word in elke module wat u skryf. Kom ons kyk na die stappe:

                  • Skep 'n GitHub -bewaarplek
                  • Skep die module en steiers rondom dit
                  • Sluit AppVeyor aan en publiseer die module

                  Die eerste en laaste stap neem 'n minuut of twee elk. Die module en steierwerk rondom dit kan gekopieer en aangepas word, wat slegs 'n paar minute moet neem. Die meeste van u tyd word bestee aan die skryf van die gevorderde funksies vir die module.

                  PSStackExchange

                  Die module is gepubliseer en gereed om te gebruik! Ek is op 'n ander rekenaar met PowerShell 5, ek kan aan die gang kom met 'n paar reëls kode:

                  Hier is 'n paar uitsette uit die voorbeelde:

                  Klaar maak

                  Dit is omtrent dit! As u nog nie modules skryf nie, moet u dit beslis oorweeg. Op soek na verdere leeswerk? Hier is 'n paar verwysings wat handig kan wees:

                    - Dit is afkomstig van die PowerShell -beraad van 2014, danksy Kirk Freiheit - Shameless -prop. Bevat 'n aantal verwysings. - Dit gee 'n goeie oorsig van die visie en doelwitte wat vir PowerShell uiteengesit is. As u modules vir openbare verbruik skryf, oorweeg dit om dit te lees, om te voorkom dat u iets so aaklig publiseer soos Citrix se PVS 'PowerShell' snapin.

                  Kantnota vir verkopers

                  Deur PSStackExchange te skryf, het ek my daaraan herinner hoe belangrik dit is vir verkopers van ondernemingsprodukte om PowerShell -modules te verskaf wat die produk se API omhul. Ondanks 'n goeie API en ordentlike dokumentasie, was dit net so pynlik om 'n funksie-arm PowerShell-module hiervoor te skryf as om die Infoblox API in te pak.

                  Verskaffers: as u kompetisie 'n PowerShell -module bied en u dit nie doen nie, is die kans goed dat ek na die produk van u mededinger sal streef. Dit is 'n groot toegevoegde waarde as u dit reg doen en PowerShell-konvensies volg.

                  WYSIG Julie 2016: Skakels na PSStackExchange opgedateer om na 'n spesifieke tydstip te skakel. Die huidige weergawe van hierdie projek sal moontlik opdaterings sien om dinge soos PSDeploy te illustreer.

                  Deel op

                  Bou 'n PowerShell -module is op 06 September 2015 gepubliseer en laas op 24 Julie 2016 gewysig.


                  Bou 'n PowerShell -module

                  'N Ruk gelede het iemand genoem dat dit lekker kan wees om die PowerShell-module-skryfproses te dokumenteer. Dit is al voorheen gedoen, maar ek dink dit sal lekker wees om my eie proses te plaas, van die eerste idee tot die publikasie op die amptelike PowerShellGallery.com -webwerf.

                  Ek het onlangs die August Scripting Games -legkaart op PowerShell.org bespreek, waarby navraag gedoen is na 'n web -API. Dit blyk dat dit 'n baie algemene behoefte is, en baie van die modules wat ons skryf, onttrek hierdie API's in handige PowerShell -funksies en -modules.

                  Ons gaan die veronderstelling maak dat u weet wat 'n module is, en dat u ervaring het met die skryf van PowerShell -funksies. Indien nie, moet u tyd spandeer om PowerShell te leer voordat u hier voortgaan!

                  Hierdie pos dek my tipiese formule vir die skryf van 'n module, met die Stack Exchange API as voorbeeld. Blaai gerus op u eie deur die PSStackExchange -kode.

                  Waarom modules?

                  Gevorderde funksies bring u ver met PowerShell. As u nie vandag funksies skryf nie, moet u u kode in hierdie herbruikbare gereedskap begin omhul. Maar ... hulle het hul grense. Hier is 'n paar redes waarom u u gevorderde funksies in 'n module kan saamvoeg:

                  • Vereenvoudig die organisasie van die kode
                  • Groepverwante funksies saam
                  • Deel toestand tussen funksies, maar nie met die gebruiker nie
                  • Hergebruik 'helperfunksies' wat u nie aan die gebruiker wil blootstel nie
                  • Verbeter die vindbaarheid: Find-Module MyModule of Get-Command -Module MyModule
                  • Vereenvoudig verspreiding: Installeer-module MyModule

                  In ons voorbeeld sal ons 'n stel Stack Exchange -funksies in een module organiseer.

                  Dit lyk ingewikkeld!

                  Dit kan 'n rukkie neem om dit van nuuts af te doen. Gelukkig kan u, sodra u 'n module of twee geskryf het, vinnig begin deur dit te kopieer en 'n paar lêers aan te pas. Moenie bang wees vir die lengte van hierdie pos nie, maar dit is die moeite werd om 'n paar minute te skryf om die basiese beginsels op te neem!

                  Die bestanddele

                  Daar is baie maniere om 'n module te skep, van 'n .psm1 -uitbreiding op 'n lêer, tot die opstel van 'n volwaardige binêre module uit C#. Ons neem hier 'n gemeenskaplike middel en gebruik die volgende bestanddele:

                  • 'N Modulmanifes. Dit is 'n .psd1 -lêer wat u module beskryf. PSStackExchange.psd1
                  • 'N Wortelmodule. In ons geval, 'n script module .psm1 lêer. Dit is net 'n PowerShell -kode wat uitgevoer moet word tydens die invoer van die module. PSStackExchange.psm1
                  • Uitgevoerde (openbare) funksies. Dit is die gevorderde funksies wat 'n eindgebruiker vanuit ons module kan gebruik. Byvoorbeeld, Get-SEQuestion.ps1 of Get-SEObject.ps1
                  • Privaat funksies. Dit is opsionele 'helperfunksies' wat ons in ons uitgevoerde funksies wil gebruik, wat die eindgebruiker nie moet sien nie. Byvoorbeeld, Add-ObjectDetail.ps1 of Join-Parts.ps1
                  • Formate. Dit is opsionele format.ps1xml -formate om u uitvoer te versier, wat dikwels gespesifiseer word in die module -manifes 'FormatsToProcess'. PSStackExchange.Format.ps1xml
                  • Lees my. As u GitHub of 'n ander algemene kodebewaarplek gebruik, is die Readme.md 'n handige voorblad vir u projek, geskryf met eenvoudige Markdown eerder as HTML
                  • AppVeyor -opset. As u 'n ondersteunde weergawe -beheeroplossing gebruik, maak AppVeyor eenvoudige en gratis deurlopende integrasie en aflewering vir open source -projekte moontlik. AppVeyor.yml

                  Ons het ons bestanddele, kom ons kyk na 'n resep vir 'n module!

                  Die resep

                  Ons gaan dit in 'n paar vinnige stappe doen:

                  • Skep 'n GitHub -bewaarplek
                  • Skep die module en steiers rondom dit
                  • Sluit AppVeyor aan en publiseer die module

                  Dit kan 'n paar minute neem voordat u die eerste keer deurloop, maar u kan dieselfde steierwerk leen en aanpas vir elke module wat u skryf. U kan eintlik PowerShell -modules en -hulpmiddels vind of skryf wat hierdie proses vereenvoudig.

                  Na die resep

                  Daar is geen werklike bevel hieroor nie, afhangende van wat u doen of nie inkorporeer nie, voel nie dat u dit tot die letter moet volg nie.

                  Skep 'n GitHub -bewaarplek.

                  Dit behoort redelik eenvoudig te wees. As u nog nie GitHub gebruik het nie, kan die volgende help:

                  • Skep 'n rekening op GitHub, laai GitHub af vir Windows
                  • Skep 'n nuwe bewaarplek (ons noem dit PSStackExchange en kies die MIT -lisensie)
                  • Kloon PSStackExchange met GitHub vir Windows

                  Kom ons gaan na die belangrikste deel, die module self.

                  Skep die module en steiers rondom dit

                  Hier is hoe ek gewoonlik my modules organiseer. Ons sal PSStackExchange as 'n voorbeeld gebruik, en vervang dit deur u eie module!

                    • en-US (of plekke van keuse)
                      • about_PSStackExchange.help.txt
                      • Sluit aan-deels.ps1
                      • Kry-SEData.ps1
                      • Kry-SEObject.ps1
                      • Soek-SEQuestion.ps1
                      • Some.Library.dll
                      • SomeDependency.exe

                      As ons ons projek by GitHub of 'n soortgelyke kodebewaarplek wil voeg, voeg ons 'n bietjie meer steierwerk by:

                        • PSStackExchange (Module -gids hierbo beskryf)
                        • Toetse
                          • PSStackExchange.Tests.ps1
                          • Verskaffer.Pester.ps1

                          Ek het deur die volgende kode gegaan om te begin. Gewoonlik sal ek die steierwerk van 'n ander module kopieer, 'n nuwe GUID in die psd1 skep en ander modulespesifieke verwysings aanpas.

                          In ons geval het ons 'n paar gevorderde Stack Exchange -funksies wat hopelik 'n paar beste praktyke volg, 'n paar privaat helperfunksies wat ons nie wil hê die gebruiker moet sien nie, en 'n paar ander lêers om toetse en bruikbaarheid te dek.

                          In PSStackExchange.psm1 laai ons ons openbare en private funksies. As 'n module aan die gang is, voer ek gewoonlik $ Public.Basename uit om te voorkom dat harde koderingsfunksies in die psd1 uitgevoer word. Sodra 'n module vrygestel is, probeer ek die openbare funksies by die psd1 voeg.

                          As u 'n module skryf, moet u dit oorweeg om Pester -toetse daarvoor te skryf. Dit is baie gerusstellend om 'n reeks toetse te hê wat outomaties uitgevoer word na elke verandering wat u druk, eerder as om aan te neem dat die kode wat u skryf korrek was, of om u kode handmatig te toets na elke verandering. Gee dit 'n kans! Ons sluit 'n paar oppervlakkige toetse in PSStackExchange.Tests.ps1 in.

                          Laastens bevat ons 'n paar bruikbaarheidskenmerke. Ons voeg 'n about_PSStackExchange -hulponderwerp by, ons versier ons uitvoer met die PSStackExchange.Format.ps1xml -lêer en voeg 'n paar aantekeninge by oor die installering en gebruik van die module in README.md.

                          Ons is gereed om te gaan! Kom ons kyk hoe ons hierdie module kan publiseer sodat ander dit kan gebruik en verbeter.

                          Sluit AppVeyor aan en publiseer die module

                          Die inhoud van ons module is gereed om te publiseer. Voordat ons dit publiseer, sal ons deurlopende integrasie moontlik maak met handige outomatiese toetse deur AppVeyor.

                          Eerstens het ons ons projek in AppVeyor opgestel deur appveyor.yml by die bewaarplek te voeg en die GitHub -projek by ons AppVeyor -rekening te voeg. Ons haal die oproepe na Pester uit in AppVeyor.Pester.ps1 en gebruik hier 'n paar idees.

                          Vervolgens stoot ons die veranderinge wat ons op ons rekenaar aangebring het na GitHub. Ons kode is nou gepubliseer, en AppVeyor sal begin bou.

                          Laastens wil ons ons module in die PowerShell -galery publiseer, sodat eindgebruikers met PowerShell 5 'n eenvoudige manier kan kry om u module te vind en te installeer. Ons kan dit aansluit om outomaties in AppVeyor te werk, maar dit is 'n onderwerp vir later.

                          • Meld aan by PowerShellGallery.com met u Microsoft -rekening
                          • Kry u API -sleutel (vind dit hier)
                          • Publiseer u module!

                          Ons module is nou beskikbaar op PowerShell Gallery!

                          Hoe ek modules skryf, saamgevat

                          Sjoe! Dit was 'n lang berig. Gelukkig kan die meeste van hierdie dinge hergebruik word in elke module wat u skryf. Kom ons kyk na die stappe:

                          • Skep 'n GitHub -bewaarplek
                          • Skep die module en steiers rondom dit
                          • Sluit AppVeyor aan en publiseer die module

                          Die eerste en laaste stap neem 'n minuut of twee elk. Die module en steierwerk rondom dit kan gekopieer en aangepas word, wat slegs 'n paar minute moet neem. Die meeste van u tyd word bestee aan die skryf van die gevorderde funksies vir die module.

                          PSStackExchange

                          Die module is gepubliseer en gereed om te gebruik! Ek is op 'n ander rekenaar met PowerShell 5, ek kan aan die gang kom met 'n paar reëls kode:

                          Hier is 'n paar uitsette uit die voorbeelde:

                          Klaar maak

                          Dit is omtrent dit! As u nog nie modules skryf nie, moet u dit beslis oorweeg. Op soek na verdere leeswerk? Hier is 'n paar verwysings wat handig kan wees:

                            - Dit is afkomstig van die PowerShell -beraad van 2014, danksy Kirk Freiheit - Shameless -prop. Bevat 'n aantal verwysings. - Dit gee 'n goeie oorsig van die visie en doelwitte wat vir PowerShell uiteengesit is. As u modules vir openbare verbruik skryf, oorweeg dit om dit te lees, om te voorkom dat u iets so aaklig publiseer soos Citrix se PVS 'PowerShell' snapin.

                          Kantnota vir verkopers

                          Deur PSStackExchange te skryf, het ek my daaraan herinner hoe belangrik dit is vir verkopers van ondernemingsprodukte om PowerShell -modules te verskaf wat die produk se API omhul. Ondanks 'n goeie API en ordentlike dokumentasie, was dit net so pynlik om 'n funksie-arm PowerShell-module hiervoor te skryf as om die Infoblox API in te pak.

                          Verskaffers: as u kompetisie 'n PowerShell -module bied en u dit nie doen nie, is die kans goed dat ek na die produk van u mededinger sal streef. Dit is 'n groot toegevoegde waarde as u dit reg doen en PowerShell-konvensies volg.

                          WYSIG Julie 2016: Skakels na PSStackExchange opgedateer om na 'n spesifieke tydstip te skakel. Die huidige weergawe van hierdie projek sal moontlik opdaterings sien om dinge soos PSDeploy te illustreer.

                          Deel op

                          Bou 'n PowerShell -module is op 06 September 2015 gepubliseer en laas op 24 Julie 2016 gewysig.


                          Bou 'n PowerShell -module

                          'N Ruk gelede het iemand genoem dat dit lekker kan wees om die PowerShell-module-skryfproses te dokumenteer. Dit is al voorheen gedoen, maar ek dink dit sal lekker wees om my eie proses te plaas, van die eerste idee tot die publikasie op die amptelike PowerShellGallery.com -webwerf.

                          Ek het onlangs die August Scripting Games -legkaart op PowerShell.org bespreek, waarby navraag gedoen is na 'n web -API. Dit blyk dat dit 'n baie algemene behoefte is, en baie van die modules wat ons skryf, onttrek hierdie API's in handige PowerShell -funksies en -modules.

                          Ons gaan die veronderstelling maak dat u weet wat 'n module is, en dat u ervaring het met die skryf van PowerShell -funksies. Indien nie, moet u tyd spandeer om PowerShell te leer voordat u hier voortgaan!

                          Hierdie pos dek my tipiese formule vir die skryf van 'n module, met die Stack Exchange API as voorbeeld. Blaai gerus op u eie deur die PSStackExchange -kode.

                          Waarom modules?

                          Gevorderde funksies bring u ver met PowerShell. As u nie vandag funksies skryf nie, moet u u kode in hierdie herbruikbare gereedskap begin omhul. Maar ... hulle het hul grense. Hier is 'n paar redes waarom u u gevorderde funksies in 'n module kan saamvoeg:

                          • Vereenvoudig die organisasie van die kode
                          • Groepverwante funksies saam
                          • Deel toestand tussen funksies, maar nie met die gebruiker nie
                          • Hergebruik 'helperfunksies' wat u nie aan die gebruiker wil blootstel nie
                          • Verbeter die vindbaarheid: Find-Module MyModule of Get-Command -Module MyModule
                          • Vereenvoudig verspreiding: Installeer-module MyModule

                          In ons voorbeeld sal ons 'n stel Stack Exchange -funksies in een module organiseer.

                          Dit lyk ingewikkeld!

                          Dit kan 'n rukkie neem om dit van nuuts af te doen. Gelukkig kan u, sodra u 'n module of twee geskryf het, vinnig begin deur dit te kopieer en 'n paar lêers aan te pas. Moenie bang wees vir die lengte van hierdie pos nie, maar dit is die moeite werd om 'n paar minute te skryf om die basiese beginsels op te neem!

                          Die bestanddele

                          Daar is baie maniere om 'n module te skep, van 'n .psm1 -uitbreiding op 'n lêer, tot die opstel van 'n volwaardige binêre module uit C#. Ons neem hier 'n gemeenskaplike middel en gebruik die volgende bestanddele:

                          • 'N Modulmanifes. Dit is 'n .psd1 -lêer wat u module beskryf. PSStackExchange.psd1
                          • 'N Wortelmodule. In ons geval, 'n script module .psm1 lêer. Dit is net 'n PowerShell -kode wat uitgevoer moet word tydens die invoer van die module. PSStackExchange.psm1
                          • Uitgevoerde (openbare) funksies. Dit is die gevorderde funksies wat 'n eindgebruiker vanuit ons module kan gebruik. Byvoorbeeld, Get-SEQuestion.ps1 of Get-SEObject.ps1
                          • Privaat funksies. Dit is opsionele 'helperfunksies' wat ons in ons uitgevoerde funksies wil gebruik, wat die eindgebruiker nie moet sien nie. Byvoorbeeld, Add-ObjectDetail.ps1 of Join-Parts.ps1
                          • Formate. Dit is opsionele format.ps1xml -formate om u uitvoer te versier, wat dikwels gespesifiseer word in die module -manifes 'FormatsToProcess'. PSStackExchange.Format.ps1xml
                          • Lees my. As u GitHub of 'n ander algemene kodebewaarplek gebruik, is die Readme.md 'n handige voorblad vir u projek, geskryf met eenvoudige Markdown eerder as HTML
                          • AppVeyor -opset. As u 'n ondersteunde weergawe -beheeroplossing gebruik, maak AppVeyor eenvoudige en gratis deurlopende integrasie en aflewering vir open source -projekte moontlik. AppVeyor.yml

                          Ons het ons bestanddele, kom ons kyk na 'n resep vir 'n module!

                          Die resep

                          Ons gaan dit in 'n paar vinnige stappe doen:

                          • Skep 'n GitHub -bewaarplek
                          • Skep die module en steiers rondom dit
                          • Sluit AppVeyor aan en publiseer die module

                          Dit kan 'n paar minute neem voordat u die eerste keer deurloop, maar u kan dieselfde steierwerk leen en aanpas vir elke module wat u skryf. U kan eintlik PowerShell -modules en -hulpmiddels vind of skryf wat hierdie proses vereenvoudig.

                          Na die resep

                          Daar is geen werklike bevel hieroor nie, afhangende van wat u doen of nie inkorporeer nie, voel nie dat u dit tot die letter moet volg nie.

                          Skep 'n GitHub -bewaarplek.

                          Dit behoort redelik eenvoudig te wees. As u nog nie GitHub gebruik het nie, kan die volgende help:

                          • Skep 'n rekening op GitHub, laai GitHub af vir Windows
                          • Skep 'n nuwe bewaarplek (ons noem dit PSStackExchange en kies die MIT -lisensie)
                          • Kloon PSStackExchange met GitHub vir Windows

                          Kom ons gaan na die belangrikste deel, die module self.

                          Skep die module en steiers rondom dit

                          Hier is hoe ek gewoonlik my modules organiseer. Ons sal PSStackExchange as 'n voorbeeld gebruik, en vervang dit deur u eie module!

                            • en-US (of plekke van keuse)
                              • about_PSStackExchange.help.txt
                              • Sluit aan-deels.ps1
                              • Kry-SEData.ps1
                              • Kry-SEObject.ps1
                              • Soek-SEQuestion.ps1
                              • Some.Library.dll
                              • SomeDependency.exe

                              As ons ons projek by GitHub of 'n soortgelyke kodebewaarplek wil voeg, voeg ons 'n bietjie meer steierwerk by:

                                • PSStackExchange (Module -gids hierbo beskryf)
                                • Toetse
                                  • PSStackExchange.Tests.ps1
                                  • Verskaffer.Pester.ps1

                                  Ek het deur die volgende kode gegaan om te begin. Gewoonlik sal ek die steierwerk van 'n ander module kopieer, 'n nuwe GUID in die psd1 skep en ander modulespesifieke verwysings aanpas.

                                  In ons geval het ons 'n paar gevorderde Stack Exchange -funksies wat hopelik 'n paar beste praktyke volg, 'n paar privaat helperfunksies wat ons nie wil hê die gebruiker moet sien nie, en 'n paar ander lêers om toetse en bruikbaarheid te dek.

                                  In PSStackExchange.psm1 laai ons ons openbare en private funksies. As 'n module aan die gang is, voer ek gewoonlik $ Public.Basename uit om te voorkom dat harde koderingsfunksies in die psd1 uitgevoer word. Sodra 'n module vrygestel is, probeer ek die openbare funksies by die psd1 voeg.

                                  As u 'n module skryf, moet u dit oorweeg om Pester -toetse daarvoor te skryf. Dit is baie gerusstellend om 'n reeks toetse te hê wat outomaties uitgevoer word na elke verandering wat u druk, eerder as om aan te neem dat die kode wat u skryf korrek was, of om u kode handmatig te toets na elke verandering. Gee dit 'n kans! Ons sluit 'n paar oppervlakkige toetse in PSStackExchange.Tests.ps1 in.

                                  Laastens bevat ons 'n paar bruikbaarheidskenmerke. Ons voeg 'n about_PSStackExchange -hulponderwerp by, ons versier ons uitvoer met die PSStackExchange.Format.ps1xml -lêer en voeg 'n paar aantekeninge by oor die installering en gebruik van die module in README.md.

                                  Ons is gereed om te gaan! Kom ons kyk hoe ons hierdie module kan publiseer sodat ander dit kan gebruik en verbeter.

                                  Sluit AppVeyor aan en publiseer die module

                                  Die inhoud van ons module is gereed om te publiseer. Voordat ons dit publiseer, sal ons deurlopende integrasie moontlik maak met handige outomatiese toetse deur AppVeyor.

                                  Eerstens het ons ons projek in AppVeyor opgestel deur appveyor.yml by die bewaarplek te voeg en die GitHub -projek by ons AppVeyor -rekening te voeg. Ons haal die oproepe na Pester uit in AppVeyor.Pester.ps1 en gebruik hier 'n paar idees.

                                  Vervolgens stoot ons die veranderinge wat ons op ons rekenaar aangebring het na GitHub. Ons kode is nou gepubliseer, en AppVeyor sal begin bou.

                                  Laastens wil ons ons module in die PowerShell -galery publiseer, sodat eindgebruikers met PowerShell 5 'n eenvoudige manier kan kry om u module te vind en te installeer. Ons kan dit aansluit om outomaties in AppVeyor te werk, maar dit is 'n onderwerp vir later.

                                  • Meld aan by PowerShellGallery.com met u Microsoft -rekening
                                  • Kry u API -sleutel (vind dit hier)
                                  • Publiseer u module!

                                  Ons module is nou beskikbaar op PowerShell Gallery!

                                  Hoe ek modules skryf, saamgevat

                                  Sjoe! Dit was 'n lang berig. Gelukkig kan die meeste van hierdie dinge hergebruik word in elke module wat u skryf. Kom ons kyk na die stappe:

                                  • Skep 'n GitHub -bewaarplek
                                  • Skep die module en steiers rondom dit
                                  • Sluit AppVeyor aan en publiseer die module

                                  Die eerste en laaste stap neem 'n minuut of twee elk. Die module en steierwerk rondom dit kan gekopieer en aangepas word, wat slegs 'n paar minute moet neem. Die meeste van u tyd word bestee aan die skryf van die gevorderde funksies vir die module.

                                  PSStackExchange

                                  Die module is gepubliseer en gereed om te gebruik! Ek is op 'n ander rekenaar met PowerShell 5, ek kan aan die gang kom met 'n paar reëls kode:

                                  Hier is 'n paar uitsette uit die voorbeelde:

                                  Klaar maak

                                  Dit is omtrent dit! As u nog nie modules skryf nie, moet u dit beslis oorweeg. Op soek na verdere leeswerk? Hier is 'n paar verwysings wat handig kan wees:

                                    - Dit is afkomstig van die PowerShell -beraad van 2014, danksy Kirk Freiheit - Shameless -prop. Bevat 'n aantal verwysings. - Dit gee 'n goeie oorsig van die visie en doelwitte wat vir PowerShell uiteengesit is. As u modules vir openbare verbruik skryf, oorweeg dit om dit te lees, om te voorkom dat u iets so aaklig publiseer soos Citrix se PVS 'PowerShell' snapin.

                                  Kantnota vir verkopers

                                  Deur PSStackExchange te skryf, het ek my daaraan herinner hoe belangrik dit is vir verkopers van ondernemingsprodukte om PowerShell -modules te verskaf wat die produk se API omhul. Ondanks 'n goeie API en ordentlike dokumentasie, was dit net so pynlik om 'n funksie-arm PowerShell-module hiervoor te skryf as om die Infoblox API in te pak.

                                  Verskaffers: as u kompetisie 'n PowerShell -module bied en u dit nie doen nie, is die kans goed dat ek na die produk van u mededinger sal streef. Dit is 'n groot toegevoegde waarde as u dit reg doen en PowerShell-konvensies volg.

                                  WYSIG Julie 2016: Skakels na PSStackExchange opgedateer om na 'n spesifieke tydstip te skakel. Die huidige weergawe van hierdie projek sal moontlik opdaterings sien om dinge soos PSDeploy te illustreer.

                                  Deel op

                                  Bou 'n PowerShell -module is op 06 September 2015 gepubliseer en laas op 24 Julie 2016 gewysig.


                                  Bou 'n PowerShell -module

                                  'N Ruk gelede het iemand genoem dat dit lekker kan wees om die PowerShell-module-skryfproses te dokumenteer. Dit is al voorheen gedoen, maar ek dink dit sal lekker wees om my eie proses te plaas, van die eerste idee tot die publikasie op die amptelike PowerShellGallery.com -webwerf.

                                  Ek het onlangs die August Scripting Games -legkaart op PowerShell.org bespreek, waarby navraag gedoen is na 'n web -API. Dit blyk dat dit 'n baie algemene behoefte is, en baie van die modules wat ons skryf, onttrek hierdie API's in handige PowerShell -funksies en -modules.

                                  Ons gaan die veronderstelling maak dat u weet wat 'n module is, en dat u ervaring het met die skryf van PowerShell -funksies. Indien nie, moet u tyd spandeer om PowerShell te leer voordat u hier voortgaan!

                                  Hierdie pos dek my tipiese formule vir die skryf van 'n module, met die Stack Exchange API as voorbeeld. Blaai gerus op u eie deur die PSStackExchange -kode.

                                  Waarom modules?

                                  Gevorderde funksies bring u ver met PowerShell. As u nie vandag funksies skryf nie, moet u u kode in hierdie herbruikbare gereedskap begin omhul. Maar ... hulle het hul grense. Hier is 'n paar redes waarom u u gevorderde funksies in 'n module kan saamvoeg:

                                  • Vereenvoudig die organisasie van die kode
                                  • Groepverwante funksies saam
                                  • Deel toestand tussen funksies, maar nie met die gebruiker nie
                                  • Hergebruik 'helperfunksies' wat u nie aan die gebruiker wil blootstel nie
                                  • Verbeter die vindbaarheid: Find-Module MyModule of Get-Command -Module MyModule
                                  • Vereenvoudig verspreiding: Installeer-module MyModule

                                  In ons voorbeeld sal ons 'n stel Stack Exchange -funksies in een module organiseer.

                                  Dit lyk ingewikkeld!

                                  Dit kan 'n rukkie neem om dit van nuuts af te doen. Gelukkig kan u, sodra u 'n module of twee geskryf het, vinnig begin deur dit te kopieer en 'n paar lêers aan te pas. Moenie bang wees vir die lengte van hierdie pos nie, maar dit is die moeite werd om 'n paar minute te skryf om die basiese beginsels op te neem!

                                  Die bestanddele

                                  Daar is baie maniere om 'n module te skep, van 'n .psm1 -uitbreiding op 'n lêer, tot die opstel van 'n volwaardige binêre module uit C#. Ons neem hier 'n gemeenskaplike middel en gebruik die volgende bestanddele:

                                  • 'N Modulmanifes. Dit is 'n .psd1 -lêer wat u module beskryf. PSStackExchange.psd1
                                  • 'N Wortelmodule. In ons geval, 'n script module .psm1 lêer. Dit is net 'n PowerShell -kode wat uitgevoer moet word tydens die invoer van die module. PSStackExchange.psm1
                                  • Uitgevoerde (openbare) funksies. Dit is die gevorderde funksies wat 'n eindgebruiker vanuit ons module kan gebruik. Byvoorbeeld, Get-SEQuestion.ps1 of Get-SEObject.ps1
                                  • Privaat funksies. Dit is opsionele 'helperfunksies' wat ons in ons uitgevoerde funksies wil gebruik, wat die eindgebruiker nie moet sien nie. Byvoorbeeld, Add-ObjectDetail.ps1 of Join-Parts.ps1
                                  • Formate. Dit is opsionele format.ps1xml -formate om u uitvoer te versier, wat dikwels gespesifiseer word in die module -manifes 'FormatsToProcess'. PSStackExchange.Format.ps1xml
                                  • Lees my. As u GitHub of 'n ander algemene kodebewaarplek gebruik, is die Readme.md 'n handige voorblad vir u projek, geskryf met eenvoudige Markdown eerder as HTML
                                  • AppVeyor -opset. As u 'n ondersteunde weergawe -beheeroplossing gebruik, maak AppVeyor eenvoudige en gratis deurlopende integrasie en aflewering vir open source -projekte moontlik. AppVeyor.yml

                                  Ons het ons bestanddele, kom ons kyk na 'n resep vir 'n module!

                                  Die resep

                                  Ons gaan dit in 'n paar vinnige stappe doen:

                                  • Skep 'n GitHub -bewaarplek
                                  • Skep die module en steiers rondom dit
                                  • Sluit AppVeyor aan en publiseer die module

                                  Dit kan 'n paar minute neem voordat u die eerste keer deurloop, maar u kan dieselfde steierwerk leen en aanpas vir elke module wat u skryf. U kan eintlik PowerShell -modules en -hulpmiddels vind of skryf wat hierdie proses vereenvoudig.

                                  Na die resep

                                  Daar is geen werklike bevel hieroor nie, afhangende van wat u doen of nie inkorporeer nie, voel nie dat u dit tot die letter moet volg nie.

                                  Skep 'n GitHub -bewaarplek.

                                  Dit behoort redelik eenvoudig te wees. As u nog nie GitHub gebruik het nie, kan die volgende help:

                                  • Skep 'n rekening op GitHub, laai GitHub af vir Windows
                                  • Skep 'n nuwe bewaarplek (ons noem dit PSStackExchange en kies die MIT -lisensie)
                                  • Kloon PSStackExchange met GitHub vir Windows

                                  Kom ons gaan na die belangrikste deel, die module self.

                                  Skep die module en steiers rondom dit

                                  Hier is hoe ek gewoonlik my modules organiseer. Ons sal PSStackExchange as 'n voorbeeld gebruik, en vervang dit deur u eie module!

                                    • en-US (of plekke van keuse)
                                      • about_PSStackExchange.help.txt
                                      • Sluit aan-deels.ps1
                                      • Kry-SEData.ps1
                                      • Kry-SEObject.ps1
                                      • Soek-SEQuestion.ps1
                                      • Some.Library.dll
                                      • SomeDependency.exe

                                      As ons ons projek by GitHub of 'n soortgelyke kodebewaarplek wil voeg, voeg ons 'n bietjie meer steierwerk by:

                                        • PSStackExchange (Module -gids hierbo beskryf)
                                        • Toetse
                                          • PSStackExchange.Tests.ps1
                                          • Verskaffer.Pester.ps1

                                          Ek het deur die volgende kode gegaan om te begin. Gewoonlik sal ek die steierwerk van 'n ander module kopieer, 'n nuwe GUID in die psd1 skep en ander modulespesifieke verwysings aanpas.

                                          In ons geval het ons 'n paar gevorderde Stack Exchange -funksies wat hopelik 'n paar beste praktyke volg, 'n paar privaat helperfunksies wat ons nie wil hê die gebruiker moet sien nie, en 'n paar ander lêers om toetse en bruikbaarheid te dek.

                                          In PSStackExchange.psm1 laai ons ons openbare en private funksies. As 'n module aan die gang is, voer ek gewoonlik $ Public.Basename uit om te voorkom dat harde koderingsfunksies in die psd1 uitgevoer word. Sodra 'n module vrygestel is, probeer ek die openbare funksies by die psd1 voeg.

                                          As u 'n module skryf, moet u dit oorweeg om Pester -toetse daarvoor te skryf. Dit is baie gerusstellend om 'n reeks toetse te hê wat outomaties uitgevoer word na elke verandering wat u druk, eerder as om aan te neem dat die kode wat u skryf korrek was, of om u kode handmatig te toets na elke verandering. Gee dit 'n kans! Ons sluit 'n paar oppervlakkige toetse in PSStackExchange.Tests.ps1 in.

                                          Laastens bevat ons 'n paar bruikbaarheidskenmerke. Ons voeg 'n about_PSStackExchange -hulponderwerp by, ons versier ons uitvoer met die PSStackExchange.Format.ps1xml -lêer en voeg 'n paar aantekeninge by oor die installering en gebruik van die module in README.md.

                                          Ons is gereed om te gaan! Kom ons kyk hoe ons hierdie module kan publiseer sodat ander dit kan gebruik en verbeter.

                                          Sluit AppVeyor aan en publiseer die module

                                          Die inhoud van ons module is gereed om te publiseer. Voordat ons dit publiseer, sal ons deurlopende integrasie moontlik maak met handige outomatiese toetse deur AppVeyor.

                                          Eerstens het ons ons projek in AppVeyor opgestel deur appveyor.yml by die bewaarplek te voeg en die GitHub -projek by ons AppVeyor -rekening te voeg. Ons haal die oproepe na Pester uit in AppVeyor.Pester.ps1 en gebruik hier 'n paar idees.

                                          Vervolgens stoot ons die veranderinge wat ons op ons rekenaar aangebring het na GitHub. Ons kode is nou gepubliseer, en AppVeyor sal begin bou.

                                          Laastens wil ons ons module in die PowerShell -galery publiseer, sodat eindgebruikers met PowerShell 5 'n eenvoudige manier kan kry om u module te vind en te installeer. Ons kan dit aansluit om outomaties in AppVeyor te werk, maar dit is 'n onderwerp vir later.

                                          • Meld aan by PowerShellGallery.com met u Microsoft -rekening
                                          • Kry u API -sleutel (vind dit hier)
                                          • Publiseer u module!

                                          Ons module is nou beskikbaar op PowerShell Gallery!

                                          Hoe ek modules skryf, saamgevat

                                          Sjoe! Dit was 'n lang berig. Gelukkig kan die meeste van hierdie dinge hergebruik word in elke module wat u skryf. Kom ons kyk na die stappe:

                                          • Skep 'n GitHub -bewaarplek
                                          • Skep die module en steiers rondom dit
                                          • Sluit AppVeyor aan en publiseer die module

                                          Die eerste en laaste stap neem 'n minuut of twee elk. Die module en steierwerk rondom dit kan gekopieer en aangepas word, wat slegs 'n paar minute moet neem. Die meeste van u tyd word bestee aan die skryf van die gevorderde funksies vir die module.

                                          PSStackExchange

                                          Die module is gepubliseer en gereed om te gebruik! Ek is op 'n ander rekenaar met PowerShell 5, ek kan aan die gang kom met 'n paar reëls kode:

                                          Hier is 'n paar uitsette uit die voorbeelde:

                                          Klaar maak

                                          Dit is omtrent dit! As u nog nie modules skryf nie, moet u dit beslis oorweeg. Op soek na verdere leeswerk? Hier is 'n paar verwysings wat handig kan wees:

                                            - Dit is afkomstig van die PowerShell -beraad van 2014, danksy Kirk Freiheit - Shameless -prop. Bevat 'n aantal verwysings. - Dit gee 'n goeie oorsig van die visie en doelwitte wat vir PowerShell uiteengesit is. As u modules vir openbare verbruik skryf, oorweeg dit om dit te lees, om te voorkom dat u iets so aaklig publiseer soos Citrix se PVS 'PowerShell' snapin.

                                          Kantnota vir verkopers

                                          Deur PSStackExchange te skryf, het ek my daaraan herinner hoe belangrik dit is vir verkopers van ondernemingsprodukte om PowerShell -modules te verskaf wat die produk se API omhul. Ondanks 'n goeie API en ordentlike dokumentasie, was dit net so pynlik om 'n funksie-arm PowerShell-module hiervoor te skryf as om die Infoblox API in te pak.

                                          Verskaffers: as u kompetisie 'n PowerShell -module bied en u dit nie doen nie, is die kans goed dat ek na die produk van u mededinger sal streef. Dit is 'n groot toegevoegde waarde as u dit reg doen en PowerShell-konvensies volg.

                                          WYSIG Julie 2016: Skakels na PSStackExchange opgedateer om na 'n spesifieke tydstip te skakel. Die huidige weergawe van hierdie projek sal moontlik opdaterings sien om dinge soos PSDeploy te illustreer.

                                          Deel op

                                          Bou 'n PowerShell -module is op 06 September 2015 gepubliseer en laas op 24 Julie 2016 gewysig.


                                          Bou 'n PowerShell -module

                                          'N Ruk gelede het iemand genoem dat dit lekker kan wees om die PowerShell-module-skryfproses te dokumenteer. Dit is al voorheen gedoen, maar ek dink dit sal lekker wees om my eie proses te plaas, van die eerste idee tot die publikasie op die amptelike PowerShellGallery.com -webwerf.

                                          Ek het onlangs die August Scripting Games -legkaart op PowerShell.org bespreek, waarby navraag gedoen is na 'n web -API. Dit blyk dat dit 'n baie algemene behoefte is, en baie van die modules wat ons skryf, onttrek hierdie API's in handige PowerShell -funksies en -modules.

                                          Ons gaan die veronderstelling maak dat u weet wat 'n module is, en dat u ervaring het met die skryf van PowerShell -funksies. Indien nie, moet u tyd spandeer om PowerShell te leer voordat u hier voortgaan!

                                          Hierdie pos dek my tipiese formule vir die skryf van 'n module, met die Stack Exchange API as voorbeeld. Blaai gerus op u eie deur die PSStackExchange -kode.

                                          Waarom modules?

                                          Gevorderde funksies bring u ver met PowerShell. As u nie vandag funksies skryf nie, moet u u kode in hierdie herbruikbare gereedskap begin omhul. Maar ... hulle het hul grense. Hier is 'n paar redes waarom u u gevorderde funksies in 'n module kan saamvoeg:

                                          • Vereenvoudig die organisasie van die kode
                                          • Groepverwante funksies saam
                                          • Deel toestand tussen funksies, maar nie met die gebruiker nie
                                          • Hergebruik 'helperfunksies' wat u nie aan die gebruiker wil blootstel nie
                                          • Verbeter die vindbaarheid: Find-Module MyModule of Get-Command -Module MyModule
                                          • Vereenvoudig verspreiding: Installeer-module MyModule

                                          In ons voorbeeld sal ons 'n stel Stack Exchange -funksies in een module organiseer.

                                          Dit lyk ingewikkeld!

                                          Dit kan 'n rukkie neem om dit van nuuts af te doen. Gelukkig kan u, sodra u 'n module of twee geskryf het, vinnig begin deur dit te kopieer en 'n paar lêers aan te pas. Moenie bang wees vir die lengte van hierdie pos nie, maar dit is die moeite werd om 'n paar minute te skryf om die basiese beginsels op te neem!

                                          Die bestanddele

                                          Daar is baie maniere om 'n module te skep, van 'n .psm1 -uitbreiding op 'n lêer, tot die opstel van 'n volwaardige binêre module uit C#. Ons neem hier 'n gemeenskaplike middel en gebruik die volgende bestanddele:

                                          • 'N Modulmanifes. Dit is 'n .psd1 -lêer wat u module beskryf. PSStackExchange.psd1
                                          • 'N Wortelmodule. In ons geval, 'n script module .psm1 lêer. Dit is net 'n PowerShell -kode wat uitgevoer moet word tydens die invoer van die module. PSStackExchange.psm1
                                          • Uitgevoerde (openbare) funksies. Dit is die gevorderde funksies wat 'n eindgebruiker vanuit ons module kan gebruik. Byvoorbeeld, Get-SEQuestion.ps1 of Get-SEObject.ps1
                                          • Privaat funksies. Dit is opsionele 'helperfunksies' wat ons in ons uitgevoerde funksies wil gebruik, wat die eindgebruiker nie moet sien nie. Byvoorbeeld, Add-ObjectDetail.ps1 of Join-Parts.ps1
                                          • Formate. Dit is opsionele format.ps1xml -formate om u uitvoer te versier, wat dikwels gespesifiseer word in die module -manifes 'FormatsToProcess'. PSStackExchange.Format.ps1xml
                                          • Lees my. As u GitHub of 'n ander algemene kodebewaarplek gebruik, is die Readme.md 'n handige voorblad vir u projek, geskryf met eenvoudige Markdown eerder as HTML
                                          • AppVeyor -opset. As u 'n ondersteunde weergawe -beheeroplossing gebruik, maak AppVeyor eenvoudige en gratis deurlopende integrasie en aflewering vir open source -projekte moontlik. AppVeyor.yml

                                          Ons het ons bestanddele, kom ons kyk na 'n resep vir 'n module!

                                          Die resep

                                          Ons gaan dit in 'n paar vinnige stappe doen:

                                          • Skep 'n GitHub -bewaarplek
                                          • Skep die module en steiers rondom dit
                                          • Sluit AppVeyor aan en publiseer die module

                                          Dit kan 'n paar minute neem voordat u die eerste keer deurloop, maar u kan dieselfde steierwerk leen en aanpas vir elke module wat u skryf. U kan eintlik PowerShell -modules en -hulpmiddels vind of skryf wat hierdie proses vereenvoudig.

                                          Na die resep

                                          Daar is geen werklike bevel hieroor nie, afhangende van wat u doen of nie inkorporeer nie, voel nie dat u dit tot die letter moet volg nie.

                                          Skep 'n GitHub -bewaarplek.

                                          Dit behoort redelik eenvoudig te wees. As u nog nie GitHub gebruik het nie, kan die volgende help:

                                          • Skep 'n rekening op GitHub, laai GitHub af vir Windows
                                          • Skep 'n nuwe bewaarplek (ons noem dit PSStackExchange en kies die MIT -lisensie)
                                          • Kloon PSStackExchange met GitHub vir Windows

                                          Kom ons gaan na die belangrikste deel, die module self.

                                          Skep die module en steiers rondom dit

                                          Hier is hoe ek gewoonlik my modules organiseer. Ons sal PSStackExchange as 'n voorbeeld gebruik, en vervang dit deur u eie module!

                                            • en-US (of plekke van keuse)
                                              • about_PSStackExchange.help.txt
                                              • Sluit aan-deels.ps1
                                              • Kry-SEData.ps1
                                              • Kry-SEObject.ps1
                                              • Soek-SEQuestion.ps1
                                              • Some.Library.dll
                                              • SomeDependency.exe

                                              As ons ons projek by GitHub of 'n soortgelyke kodebewaarplek wil voeg, voeg ons 'n bietjie meer steierwerk by:

                                                • PSStackExchange (Module -gids hierbo beskryf)
                                                • Toetse
                                                  • PSStackExchange.Tests.ps1
                                                  • Verskaffer.Pester.ps1

                                                  Ek het deur die volgende kode gegaan om te begin. Gewoonlik sal ek die steierwerk van 'n ander module kopieer, 'n nuwe GUID in die psd1 skep en ander modulespesifieke verwysings aanpas.

                                                  In ons geval het ons 'n paar gevorderde Stack Exchange -funksies wat hopelik 'n paar beste praktyke volg, 'n paar privaat helperfunksies wat ons nie wil hê die gebruiker moet sien nie, en 'n paar ander lêers om toetse en bruikbaarheid te dek.

                                                  In PSStackExchange.psm1 laai ons ons openbare en private funksies. As 'n module aan die gang is, voer ek gewoonlik $ Public.Basename uit om te voorkom dat harde koderingsfunksies in die psd1 uitgevoer word. Sodra 'n module vrygestel is, probeer ek die openbare funksies by die psd1 voeg.

                                                  As u 'n module skryf, moet u dit oorweeg om Pester -toetse daarvoor te skryf. Dit is baie gerusstellend om 'n reeks toetse te hê wat outomaties uitgevoer word na elke verandering wat u druk, eerder as om aan te neem dat die kode wat u skryf korrek was, of om u kode handmatig te toets na elke verandering. Gee dit 'n kans! Ons sluit 'n paar oppervlakkige toetse in PSStackExchange.Tests.ps1 in.

                                                  Laastens bevat ons 'n paar bruikbaarheidskenmerke. Ons voeg 'n about_PSStackExchange -hulponderwerp by, ons versier ons uitvoer met die PSStackExchange.Format.ps1xml -lêer en voeg 'n paar aantekeninge by oor die installering en gebruik van die module in README.md.

                                                  Ons is gereed om te gaan! Kom ons kyk hoe ons hierdie module kan publiseer sodat ander dit kan gebruik en verbeter.

                                                  Sluit AppVeyor aan en publiseer die module

                                                  Die inhoud van ons module is gereed om te publiseer. Voordat ons dit publiseer, sal ons deurlopende integrasie moontlik maak met handige outomatiese toetse deur AppVeyor.

                                                  Eerstens het ons ons projek in AppVeyor opgestel deur appveyor.yml by die bewaarplek te voeg en die GitHub -projek by ons AppVeyor -rekening te voeg. Ons haal die oproepe na Pester uit in AppVeyor.Pester.ps1 en gebruik hier 'n paar idees.

                                                  Vervolgens stoot ons die veranderinge wat ons op ons rekenaar aangebring het na GitHub. Ons kode is nou gepubliseer, en AppVeyor sal begin bou.

                                                  Laastens wil ons ons module in die PowerShell -galery publiseer, sodat eindgebruikers met PowerShell 5 'n eenvoudige manier kan kry om u module te vind en te installeer.Ons kan dit aansluit om outomaties in AppVeyor te werk, maar dit is 'n onderwerp vir later.

                                                  • Meld aan by PowerShellGallery.com met u Microsoft -rekening
                                                  • Kry u API -sleutel (vind dit hier)
                                                  • Publiseer u module!

                                                  Ons module is nou beskikbaar op PowerShell Gallery!

                                                  Hoe ek modules skryf, saamgevat

                                                  Sjoe! Dit was 'n lang berig. Gelukkig kan die meeste van hierdie dinge hergebruik word in elke module wat u skryf. Kom ons kyk na die stappe:

                                                  • Skep 'n GitHub -bewaarplek
                                                  • Skep die module en steiers rondom dit
                                                  • Sluit AppVeyor aan en publiseer die module

                                                  Die eerste en laaste stap neem 'n minuut of twee elk. Die module en steierwerk rondom dit kan gekopieer en aangepas word, wat slegs 'n paar minute moet neem. Die meeste van u tyd word bestee aan die skryf van die gevorderde funksies vir die module.

                                                  PSStackExchange

                                                  Die module is gepubliseer en gereed om te gebruik! Ek is op 'n ander rekenaar met PowerShell 5, ek kan aan die gang kom met 'n paar reëls kode:

                                                  Hier is 'n paar uitsette uit die voorbeelde:

                                                  Klaar maak

                                                  Dit is omtrent dit! As u nog nie modules skryf nie, moet u dit beslis oorweeg. Op soek na verdere leeswerk? Hier is 'n paar verwysings wat handig kan wees:

                                                    - Dit is afkomstig van die PowerShell -beraad van 2014, danksy Kirk Freiheit - Shameless -prop. Bevat 'n aantal verwysings. - Dit gee 'n goeie oorsig van die visie en doelwitte wat vir PowerShell uiteengesit is. As u modules vir openbare verbruik skryf, oorweeg dit om dit te lees, om te voorkom dat u iets so aaklig publiseer soos Citrix se PVS 'PowerShell' snapin.

                                                  Kantnota vir verkopers

                                                  Deur PSStackExchange te skryf, het ek my daaraan herinner hoe belangrik dit is vir verkopers van ondernemingsprodukte om PowerShell -modules te verskaf wat die produk se API omhul. Ondanks 'n goeie API en ordentlike dokumentasie, was dit net so pynlik om 'n funksie-arm PowerShell-module hiervoor te skryf as om die Infoblox API in te pak.

                                                  Verskaffers: as u kompetisie 'n PowerShell -module bied en u dit nie doen nie, is die kans goed dat ek na die produk van u mededinger sal streef. Dit is 'n groot toegevoegde waarde as u dit reg doen en PowerShell-konvensies volg.

                                                  WYSIG Julie 2016: Skakels na PSStackExchange opgedateer om na 'n spesifieke tydstip te skakel. Die huidige weergawe van hierdie projek sal moontlik opdaterings sien om dinge soos PSDeploy te illustreer.

                                                  Deel op

                                                  Bou 'n PowerShell -module is op 06 September 2015 gepubliseer en laas op 24 Julie 2016 gewysig.


                                                  Bou 'n PowerShell -module

                                                  'N Ruk gelede het iemand genoem dat dit lekker kan wees om die PowerShell-module-skryfproses te dokumenteer. Dit is al voorheen gedoen, maar ek dink dit sal lekker wees om my eie proses te plaas, van die eerste idee tot die publikasie op die amptelike PowerShellGallery.com -webwerf.

                                                  Ek het onlangs die August Scripting Games -legkaart op PowerShell.org bespreek, waarby navraag gedoen is na 'n web -API. Dit blyk dat dit 'n baie algemene behoefte is, en baie van die modules wat ons skryf, onttrek hierdie API's in handige PowerShell -funksies en -modules.

                                                  Ons gaan die veronderstelling maak dat u weet wat 'n module is, en dat u ervaring het met die skryf van PowerShell -funksies. Indien nie, moet u tyd spandeer om PowerShell te leer voordat u hier voortgaan!

                                                  Hierdie pos dek my tipiese formule vir die skryf van 'n module, met die Stack Exchange API as voorbeeld. Blaai gerus op u eie deur die PSStackExchange -kode.

                                                  Waarom modules?

                                                  Gevorderde funksies bring u ver met PowerShell. As u nie vandag funksies skryf nie, moet u u kode in hierdie herbruikbare gereedskap begin omhul. Maar ... hulle het hul grense. Hier is 'n paar redes waarom u u gevorderde funksies in 'n module kan saamvoeg:

                                                  • Vereenvoudig die organisasie van die kode
                                                  • Groepverwante funksies saam
                                                  • Deel toestand tussen funksies, maar nie met die gebruiker nie
                                                  • Hergebruik 'helperfunksies' wat u nie aan die gebruiker wil blootstel nie
                                                  • Verbeter die vindbaarheid: Find-Module MyModule of Get-Command -Module MyModule
                                                  • Vereenvoudig verspreiding: Installeer-module MyModule

                                                  In ons voorbeeld sal ons 'n stel Stack Exchange -funksies in een module organiseer.

                                                  Dit lyk ingewikkeld!

                                                  Dit kan 'n rukkie neem om dit van nuuts af te doen. Gelukkig kan u, sodra u 'n module of twee geskryf het, vinnig begin deur dit te kopieer en 'n paar lêers aan te pas. Moenie bang wees vir die lengte van hierdie pos nie, maar dit is die moeite werd om 'n paar minute te skryf om die basiese beginsels op te neem!

                                                  Die bestanddele

                                                  Daar is baie maniere om 'n module te skep, van 'n .psm1 -uitbreiding op 'n lêer, tot die opstel van 'n volwaardige binêre module uit C#. Ons neem hier 'n gemeenskaplike middel en gebruik die volgende bestanddele:

                                                  • 'N Modulmanifes. Dit is 'n .psd1 -lêer wat u module beskryf. PSStackExchange.psd1
                                                  • 'N Wortelmodule. In ons geval, 'n script module .psm1 lêer. Dit is net 'n PowerShell -kode wat uitgevoer moet word tydens die invoer van die module. PSStackExchange.psm1
                                                  • Uitgevoerde (openbare) funksies. Dit is die gevorderde funksies wat 'n eindgebruiker vanuit ons module kan gebruik. Byvoorbeeld, Get-SEQuestion.ps1 of Get-SEObject.ps1
                                                  • Privaat funksies. Dit is opsionele 'helperfunksies' wat ons in ons uitgevoerde funksies wil gebruik, wat die eindgebruiker nie moet sien nie. Byvoorbeeld, Add-ObjectDetail.ps1 of Join-Parts.ps1
                                                  • Formate. Dit is opsionele format.ps1xml -formate om u uitvoer te versier, wat dikwels gespesifiseer word in die module -manifes 'FormatsToProcess'. PSStackExchange.Format.ps1xml
                                                  • Lees my. As u GitHub of 'n ander algemene kodebewaarplek gebruik, is die Readme.md 'n handige voorblad vir u projek, geskryf met eenvoudige Markdown eerder as HTML
                                                  • AppVeyor -opset. As u 'n ondersteunde weergawe -beheeroplossing gebruik, maak AppVeyor eenvoudige en gratis deurlopende integrasie en aflewering vir open source -projekte moontlik. AppVeyor.yml

                                                  Ons het ons bestanddele, kom ons kyk na 'n resep vir 'n module!

                                                  Die resep

                                                  Ons gaan dit in 'n paar vinnige stappe doen:

                                                  • Skep 'n GitHub -bewaarplek
                                                  • Skep die module en steiers rondom dit
                                                  • Sluit AppVeyor aan en publiseer die module

                                                  Dit kan 'n paar minute neem voordat u die eerste keer deurloop, maar u kan dieselfde steierwerk leen en aanpas vir elke module wat u skryf. U kan eintlik PowerShell -modules en -hulpmiddels vind of skryf wat hierdie proses vereenvoudig.

                                                  Na die resep

                                                  Daar is geen werklike bevel hieroor nie, afhangende van wat u doen of nie inkorporeer nie, voel nie dat u dit tot die letter moet volg nie.

                                                  Skep 'n GitHub -bewaarplek.

                                                  Dit behoort redelik eenvoudig te wees. As u nog nie GitHub gebruik het nie, kan die volgende help:

                                                  • Skep 'n rekening op GitHub, laai GitHub af vir Windows
                                                  • Skep 'n nuwe bewaarplek (ons noem dit PSStackExchange en kies die MIT -lisensie)
                                                  • Kloon PSStackExchange met GitHub vir Windows

                                                  Kom ons gaan na die belangrikste deel, die module self.

                                                  Skep die module en steiers rondom dit

                                                  Hier is hoe ek gewoonlik my modules organiseer. Ons sal PSStackExchange as 'n voorbeeld gebruik, en vervang dit deur u eie module!

                                                    • en-US (of plekke van keuse)
                                                      • about_PSStackExchange.help.txt
                                                      • Sluit aan-deels.ps1
                                                      • Kry-SEData.ps1
                                                      • Kry-SEObject.ps1
                                                      • Soek-SEQuestion.ps1
                                                      • Some.Library.dll
                                                      • SomeDependency.exe

                                                      As ons ons projek by GitHub of 'n soortgelyke kodebewaarplek wil voeg, voeg ons 'n bietjie meer steierwerk by:

                                                        • PSStackExchange (Module -gids hierbo beskryf)
                                                        • Toetse
                                                          • PSStackExchange.Tests.ps1
                                                          • Verskaffer.Pester.ps1

                                                          Ek het deur die volgende kode gegaan om te begin. Gewoonlik sal ek die steierwerk van 'n ander module kopieer, 'n nuwe GUID in die psd1 skep en ander modulespesifieke verwysings aanpas.

                                                          In ons geval het ons 'n paar gevorderde Stack Exchange -funksies wat hopelik 'n paar beste praktyke volg, 'n paar privaat helperfunksies wat ons nie wil hê die gebruiker moet sien nie, en 'n paar ander lêers om toetse en bruikbaarheid te dek.

                                                          In PSStackExchange.psm1 laai ons ons openbare en private funksies. As 'n module aan die gang is, voer ek gewoonlik $ Public.Basename uit om te voorkom dat harde koderingsfunksies in die psd1 uitgevoer word. Sodra 'n module vrygestel is, probeer ek die openbare funksies by die psd1 voeg.

                                                          As u 'n module skryf, moet u dit oorweeg om Pester -toetse daarvoor te skryf. Dit is baie gerusstellend om 'n reeks toetse te hê wat outomaties uitgevoer word na elke verandering wat u druk, eerder as om aan te neem dat die kode wat u skryf korrek was, of om u kode handmatig te toets na elke verandering. Gee dit 'n kans! Ons sluit 'n paar oppervlakkige toetse in PSStackExchange.Tests.ps1 in.

                                                          Laastens bevat ons 'n paar bruikbaarheidskenmerke. Ons voeg 'n about_PSStackExchange -hulponderwerp by, ons versier ons uitvoer met die PSStackExchange.Format.ps1xml -lêer en voeg 'n paar aantekeninge by oor die installering en gebruik van die module in README.md.

                                                          Ons is gereed om te gaan! Kom ons kyk hoe ons hierdie module kan publiseer sodat ander dit kan gebruik en verbeter.

                                                          Sluit AppVeyor aan en publiseer die module

                                                          Die inhoud van ons module is gereed om te publiseer. Voordat ons dit publiseer, sal ons deurlopende integrasie moontlik maak met handige outomatiese toetse deur AppVeyor.

                                                          Eerstens het ons ons projek in AppVeyor opgestel deur appveyor.yml by die bewaarplek te voeg en die GitHub -projek by ons AppVeyor -rekening te voeg. Ons haal die oproepe na Pester uit in AppVeyor.Pester.ps1 en gebruik hier 'n paar idees.

                                                          Vervolgens stoot ons die veranderinge wat ons op ons rekenaar aangebring het na GitHub. Ons kode is nou gepubliseer, en AppVeyor sal begin bou.

                                                          Laastens wil ons ons module in die PowerShell -galery publiseer, sodat eindgebruikers met PowerShell 5 'n eenvoudige manier kan kry om u module te vind en te installeer. Ons kan dit aansluit om outomaties in AppVeyor te werk, maar dit is 'n onderwerp vir later.

                                                          • Meld aan by PowerShellGallery.com met u Microsoft -rekening
                                                          • Kry u API -sleutel (vind dit hier)
                                                          • Publiseer u module!

                                                          Ons module is nou beskikbaar op PowerShell Gallery!

                                                          Hoe ek modules skryf, saamgevat

                                                          Sjoe! Dit was 'n lang berig. Gelukkig kan die meeste van hierdie dinge hergebruik word in elke module wat u skryf. Kom ons kyk na die stappe:

                                                          • Skep 'n GitHub -bewaarplek
                                                          • Skep die module en steiers rondom dit
                                                          • Sluit AppVeyor aan en publiseer die module

                                                          Die eerste en laaste stap neem 'n minuut of twee elk. Die module en steierwerk rondom dit kan gekopieer en aangepas word, wat slegs 'n paar minute moet neem. Die meeste van u tyd word bestee aan die skryf van die gevorderde funksies vir die module.

                                                          PSStackExchange

                                                          Die module is gepubliseer en gereed om te gebruik! Ek is op 'n ander rekenaar met PowerShell 5, ek kan aan die gang kom met 'n paar reëls kode:

                                                          Hier is 'n paar uitsette uit die voorbeelde:

                                                          Klaar maak

                                                          Dit is omtrent dit! As u nog nie modules skryf nie, moet u dit beslis oorweeg. Op soek na verdere leeswerk? Hier is 'n paar verwysings wat handig kan wees:

                                                            - Dit is afkomstig van die PowerShell -beraad van 2014, danksy Kirk Freiheit - Shameless -prop. Bevat 'n aantal verwysings. - Dit gee 'n goeie oorsig van die visie en doelwitte wat vir PowerShell uiteengesit is. As u modules vir openbare verbruik skryf, oorweeg dit om dit te lees, om te voorkom dat u iets so aaklig publiseer soos Citrix se PVS 'PowerShell' snapin.

                                                          Kantnota vir verkopers

                                                          Deur PSStackExchange te skryf, het ek my daaraan herinner hoe belangrik dit is vir verkopers van ondernemingsprodukte om PowerShell -modules te verskaf wat die produk se API omhul. Ondanks 'n goeie API en ordentlike dokumentasie, was dit net so pynlik om 'n funksie-arm PowerShell-module hiervoor te skryf as om die Infoblox API in te pak.

                                                          Verskaffers: as u kompetisie 'n PowerShell -module bied en u dit nie doen nie, is die kans goed dat ek na die produk van u mededinger sal streef. Dit is 'n groot toegevoegde waarde as u dit reg doen en PowerShell-konvensies volg.

                                                          WYSIG Julie 2016: Skakels na PSStackExchange opgedateer om na 'n spesifieke tydstip te skakel. Die huidige weergawe van hierdie projek sal moontlik opdaterings sien om dinge soos PSDeploy te illustreer.

                                                          Deel op

                                                          Bou 'n PowerShell -module is op 06 September 2015 gepubliseer en laas op 24 Julie 2016 gewysig.


                                                          Bou 'n PowerShell -module

                                                          'N Ruk gelede het iemand genoem dat dit lekker kan wees om die PowerShell-module-skryfproses te dokumenteer. Dit is al voorheen gedoen, maar ek dink dit sal lekker wees om my eie proses te plaas, van die eerste idee tot die publikasie op die amptelike PowerShellGallery.com -webwerf.

                                                          Ek het onlangs die August Scripting Games -legkaart op PowerShell.org bespreek, waarby navraag gedoen is na 'n web -API. Dit blyk dat dit 'n baie algemene behoefte is, en baie van die modules wat ons skryf, onttrek hierdie API's in handige PowerShell -funksies en -modules.

                                                          Ons gaan die veronderstelling maak dat u weet wat 'n module is, en dat u ervaring het met die skryf van PowerShell -funksies. Indien nie, moet u tyd spandeer om PowerShell te leer voordat u hier voortgaan!

                                                          Hierdie pos dek my tipiese formule vir die skryf van 'n module, met die Stack Exchange API as voorbeeld. Blaai gerus op u eie deur die PSStackExchange -kode.

                                                          Waarom modules?

                                                          Gevorderde funksies bring u ver met PowerShell. As u nie vandag funksies skryf nie, moet u u kode in hierdie herbruikbare gereedskap begin omhul. Maar ... hulle het hul grense. Hier is 'n paar redes waarom u u gevorderde funksies in 'n module kan saamvoeg:

                                                          • Vereenvoudig die organisasie van die kode
                                                          • Groepverwante funksies saam
                                                          • Deel toestand tussen funksies, maar nie met die gebruiker nie
                                                          • Hergebruik 'helperfunksies' wat u nie aan die gebruiker wil blootstel nie
                                                          • Verbeter die vindbaarheid: Find-Module MyModule of Get-Command -Module MyModule
                                                          • Vereenvoudig verspreiding: Installeer-module MyModule

                                                          In ons voorbeeld sal ons 'n stel Stack Exchange -funksies in een module organiseer.

                                                          Dit lyk ingewikkeld!

                                                          Dit kan 'n rukkie neem om dit van nuuts af te doen. Gelukkig kan u, sodra u 'n module of twee geskryf het, vinnig begin deur dit te kopieer en 'n paar lêers aan te pas. Moenie bang wees vir die lengte van hierdie pos nie, maar dit is die moeite werd om 'n paar minute te skryf om die basiese beginsels op te neem!

                                                          Die bestanddele

                                                          Daar is baie maniere om 'n module te skep, van 'n .psm1 -uitbreiding op 'n lêer, tot die opstel van 'n volwaardige binêre module uit C#. Ons neem hier 'n gemeenskaplike middel en gebruik die volgende bestanddele:

                                                          • 'N Modulmanifes. Dit is 'n .psd1 -lêer wat u module beskryf. PSStackExchange.psd1
                                                          • 'N Wortelmodule. In ons geval, 'n script module .psm1 lêer. Dit is net 'n PowerShell -kode wat uitgevoer moet word tydens die invoer van die module. PSStackExchange.psm1
                                                          • Uitgevoerde (openbare) funksies. Dit is die gevorderde funksies wat 'n eindgebruiker vanuit ons module kan gebruik. Byvoorbeeld, Get-SEQuestion.ps1 of Get-SEObject.ps1
                                                          • Privaat funksies. Dit is opsionele 'helperfunksies' wat ons in ons uitgevoerde funksies wil gebruik, wat die eindgebruiker nie moet sien nie. Byvoorbeeld, Add-ObjectDetail.ps1 of Join-Parts.ps1
                                                          • Formate. Dit is opsionele format.ps1xml -formate om u uitvoer te versier, wat dikwels gespesifiseer word in die module -manifes 'FormatsToProcess'. PSStackExchange.Format.ps1xml
                                                          • Lees my. As u GitHub of 'n ander algemene kodebewaarplek gebruik, is die Readme.md 'n handige voorblad vir u projek, geskryf met eenvoudige Markdown eerder as HTML
                                                          • AppVeyor -opset. As u 'n ondersteunde weergawe -beheeroplossing gebruik, maak AppVeyor eenvoudige en gratis deurlopende integrasie en aflewering vir open source -projekte moontlik. AppVeyor.yml

                                                          Ons het ons bestanddele, kom ons kyk na 'n resep vir 'n module!

                                                          Die resep

                                                          Ons gaan dit in 'n paar vinnige stappe doen:

                                                          • Skep 'n GitHub -bewaarplek
                                                          • Skep die module en steiers rondom dit
                                                          • Sluit AppVeyor aan en publiseer die module

                                                          Dit kan 'n paar minute neem voordat u die eerste keer deurloop, maar u kan dieselfde steierwerk leen en aanpas vir elke module wat u skryf. U kan eintlik PowerShell -modules en -hulpmiddels vind of skryf wat hierdie proses vereenvoudig.

                                                          Na die resep

                                                          Daar is geen werklike bevel hieroor nie, afhangende van wat u doen of nie inkorporeer nie, voel nie dat u dit tot die letter moet volg nie.

                                                          Skep 'n GitHub -bewaarplek.

                                                          Dit behoort redelik eenvoudig te wees. As u nog nie GitHub gebruik het nie, kan die volgende help:

                                                          • Skep 'n rekening op GitHub, laai GitHub af vir Windows
                                                          • Skep 'n nuwe bewaarplek (ons noem dit PSStackExchange en kies die MIT -lisensie)
                                                          • Kloon PSStackExchange met GitHub vir Windows

                                                          Kom ons gaan na die belangrikste deel, die module self.

                                                          Skep die module en steiers rondom dit

                                                          Hier is hoe ek gewoonlik my modules organiseer. Ons sal PSStackExchange as 'n voorbeeld gebruik, en vervang dit deur u eie module!

                                                            • en-US (of plekke van keuse)
                                                              • about_PSStackExchange.help.txt
                                                              • Sluit aan-deels.ps1
                                                              • Kry-SEData.ps1
                                                              • Kry-SEObject.ps1
                                                              • Soek-SEQuestion.ps1
                                                              • Some.Library.dll
                                                              • SomeDependency.exe

                                                              As ons ons projek by GitHub of 'n soortgelyke kodebewaarplek wil voeg, voeg ons 'n bietjie meer steierwerk by:

                                                                • PSStackExchange (Module -gids hierbo beskryf)
                                                                • Toetse
                                                                  • PSStackExchange.Tests.ps1
                                                                  • Verskaffer.Pester.ps1

                                                                  Ek het deur die volgende kode gegaan om te begin. Gewoonlik sal ek die steierwerk van 'n ander module kopieer, 'n nuwe GUID in die psd1 skep en ander modulespesifieke verwysings aanpas.

                                                                  In ons geval het ons 'n paar gevorderde Stack Exchange -funksies wat hopelik 'n paar beste praktyke volg, 'n paar privaat helperfunksies wat ons nie wil hê die gebruiker moet sien nie, en 'n paar ander lêers om toetse en bruikbaarheid te dek.

                                                                  In PSStackExchange.psm1 laai ons ons openbare en private funksies. As 'n module aan die gang is, voer ek gewoonlik $ Public.Basename uit om te voorkom dat harde koderingsfunksies in die psd1 uitgevoer word. Sodra 'n module vrygestel is, probeer ek die openbare funksies by die psd1 voeg.

                                                                  As u 'n module skryf, moet u dit oorweeg om Pester -toetse daarvoor te skryf. Dit is baie gerusstellend om 'n reeks toetse te hê wat outomaties uitgevoer word na elke verandering wat u druk, eerder as om aan te neem dat die kode wat u skryf korrek was, of om u kode handmatig te toets na elke verandering. Gee dit 'n kans! Ons sluit 'n paar oppervlakkige toetse in PSStackExchange.Tests.ps1 in.

                                                                  Laastens bevat ons 'n paar bruikbaarheidskenmerke. Ons voeg 'n about_PSStackExchange -hulponderwerp by, ons versier ons uitvoer met die PSStackExchange.Format.ps1xml -lêer en voeg 'n paar aantekeninge by oor die installering en gebruik van die module in README.md.

                                                                  Ons is gereed om te gaan! Kom ons kyk hoe ons hierdie module kan publiseer sodat ander dit kan gebruik en verbeter.

                                                                  Sluit AppVeyor aan en publiseer die module

                                                                  Die inhoud van ons module is gereed om te publiseer. Voordat ons dit publiseer, sal ons deurlopende integrasie moontlik maak met handige outomatiese toetse deur AppVeyor.

                                                                  Eerstens het ons ons projek in AppVeyor opgestel deur appveyor.yml by die bewaarplek te voeg en die GitHub -projek by ons AppVeyor -rekening te voeg.Ons haal die oproepe na Pester uit in AppVeyor.Pester.ps1 en gebruik hier 'n paar idees.

                                                                  Vervolgens stoot ons die veranderinge wat ons op ons rekenaar aangebring het na GitHub. Ons kode is nou gepubliseer, en AppVeyor sal begin bou.

                                                                  Laastens wil ons ons module in die PowerShell -galery publiseer, sodat eindgebruikers met PowerShell 5 'n eenvoudige manier kan kry om u module te vind en te installeer. Ons kan dit aansluit om outomaties in AppVeyor te werk, maar dit is 'n onderwerp vir later.

                                                                  • Meld aan by PowerShellGallery.com met u Microsoft -rekening
                                                                  • Kry u API -sleutel (vind dit hier)
                                                                  • Publiseer u module!

                                                                  Ons module is nou beskikbaar op PowerShell Gallery!

                                                                  Hoe ek modules skryf, saamgevat

                                                                  Sjoe! Dit was 'n lang berig. Gelukkig kan die meeste van hierdie dinge hergebruik word in elke module wat u skryf. Kom ons kyk na die stappe:

                                                                  • Skep 'n GitHub -bewaarplek
                                                                  • Skep die module en steiers rondom dit
                                                                  • Sluit AppVeyor aan en publiseer die module

                                                                  Die eerste en laaste stap neem 'n minuut of twee elk. Die module en steierwerk rondom dit kan gekopieer en aangepas word, wat slegs 'n paar minute moet neem. Die meeste van u tyd word bestee aan die skryf van die gevorderde funksies vir die module.

                                                                  PSStackExchange

                                                                  Die module is gepubliseer en gereed om te gebruik! Ek is op 'n ander rekenaar met PowerShell 5, ek kan aan die gang kom met 'n paar reëls kode:

                                                                  Hier is 'n paar uitsette uit die voorbeelde:

                                                                  Klaar maak

                                                                  Dit is omtrent dit! As u nog nie modules skryf nie, moet u dit beslis oorweeg. Op soek na verdere leeswerk? Hier is 'n paar verwysings wat handig kan wees:

                                                                    - Dit is afkomstig van die PowerShell -beraad van 2014, danksy Kirk Freiheit - Shameless -prop. Bevat 'n aantal verwysings. - Dit gee 'n goeie oorsig van die visie en doelwitte wat vir PowerShell uiteengesit is. As u modules vir openbare verbruik skryf, oorweeg dit om dit te lees, om te voorkom dat u iets so aaklig publiseer soos Citrix se PVS 'PowerShell' snapin.

                                                                  Kantnota vir verkopers

                                                                  Deur PSStackExchange te skryf, het ek my daaraan herinner hoe belangrik dit is vir verkopers van ondernemingsprodukte om PowerShell -modules te verskaf wat die produk se API omhul. Ondanks 'n goeie API en ordentlike dokumentasie, was dit net so pynlik om 'n funksie-arm PowerShell-module hiervoor te skryf as om die Infoblox API in te pak.

                                                                  Verskaffers: as u kompetisie 'n PowerShell -module bied en u dit nie doen nie, is die kans goed dat ek na die produk van u mededinger sal streef. Dit is 'n groot toegevoegde waarde as u dit reg doen en PowerShell-konvensies volg.

                                                                  WYSIG Julie 2016: Skakels na PSStackExchange opgedateer om na 'n spesifieke tydstip te skakel. Die huidige weergawe van hierdie projek sal moontlik opdaterings sien om dinge soos PSDeploy te illustreer.

                                                                  Deel op

                                                                  Bou 'n PowerShell -module is op 06 September 2015 gepubliseer en laas op 24 Julie 2016 gewysig.


                                                                  Bou 'n PowerShell -module

                                                                  'N Ruk gelede het iemand genoem dat dit lekker kan wees om die PowerShell-module-skryfproses te dokumenteer. Dit is al voorheen gedoen, maar ek dink dit sal lekker wees om my eie proses te plaas, van die eerste idee tot die publikasie op die amptelike PowerShellGallery.com -webwerf.

                                                                  Ek het onlangs die August Scripting Games -legkaart op PowerShell.org bespreek, waarby navraag gedoen is na 'n web -API. Dit blyk dat dit 'n baie algemene behoefte is, en baie van die modules wat ons skryf, onttrek hierdie API's in handige PowerShell -funksies en -modules.

                                                                  Ons gaan die veronderstelling maak dat u weet wat 'n module is, en dat u ervaring het met die skryf van PowerShell -funksies. Indien nie, moet u tyd spandeer om PowerShell te leer voordat u hier voortgaan!

                                                                  Hierdie pos dek my tipiese formule vir die skryf van 'n module, met die Stack Exchange API as voorbeeld. Blaai gerus op u eie deur die PSStackExchange -kode.

                                                                  Waarom modules?

                                                                  Gevorderde funksies bring u ver met PowerShell. As u nie vandag funksies skryf nie, moet u u kode in hierdie herbruikbare gereedskap begin omhul. Maar ... hulle het hul grense. Hier is 'n paar redes waarom u u gevorderde funksies in 'n module kan saamvoeg:

                                                                  • Vereenvoudig die organisasie van die kode
                                                                  • Groepverwante funksies saam
                                                                  • Deel toestand tussen funksies, maar nie met die gebruiker nie
                                                                  • Hergebruik 'helperfunksies' wat u nie aan die gebruiker wil blootstel nie
                                                                  • Verbeter die vindbaarheid: Find-Module MyModule of Get-Command -Module MyModule
                                                                  • Vereenvoudig verspreiding: Installeer-module MyModule

                                                                  In ons voorbeeld sal ons 'n stel Stack Exchange -funksies in een module organiseer.

                                                                  Dit lyk ingewikkeld!

                                                                  Dit kan 'n rukkie neem om dit van nuuts af te doen. Gelukkig kan u, sodra u 'n module of twee geskryf het, vinnig begin deur dit te kopieer en 'n paar lêers aan te pas. Moenie bang wees vir die lengte van hierdie pos nie, maar dit is die moeite werd om 'n paar minute te skryf om die basiese beginsels op te neem!

                                                                  Die bestanddele

                                                                  Daar is baie maniere om 'n module te skep, van 'n .psm1 -uitbreiding op 'n lêer, tot die opstel van 'n volwaardige binêre module uit C#. Ons neem hier 'n gemeenskaplike middel en gebruik die volgende bestanddele:

                                                                  • 'N Modulmanifes. Dit is 'n .psd1 -lêer wat u module beskryf. PSStackExchange.psd1
                                                                  • 'N Wortelmodule. In ons geval, 'n script module .psm1 lêer. Dit is net 'n PowerShell -kode wat uitgevoer moet word tydens die invoer van die module. PSStackExchange.psm1
                                                                  • Uitgevoerde (openbare) funksies. Dit is die gevorderde funksies wat 'n eindgebruiker vanuit ons module kan gebruik. Byvoorbeeld, Get-SEQuestion.ps1 of Get-SEObject.ps1
                                                                  • Privaat funksies. Dit is opsionele 'helperfunksies' wat ons in ons uitgevoerde funksies wil gebruik, wat die eindgebruiker nie moet sien nie. Byvoorbeeld, Add-ObjectDetail.ps1 of Join-Parts.ps1
                                                                  • Formate. Dit is opsionele format.ps1xml -formate om u uitvoer te versier, wat dikwels gespesifiseer word in die module -manifes 'FormatsToProcess'. PSStackExchange.Format.ps1xml
                                                                  • Lees my. As u GitHub of 'n ander algemene kodebewaarplek gebruik, is die Readme.md 'n handige voorblad vir u projek, geskryf met eenvoudige Markdown eerder as HTML
                                                                  • AppVeyor -opset. As u 'n ondersteunde weergawe -beheeroplossing gebruik, maak AppVeyor eenvoudige en gratis deurlopende integrasie en aflewering vir open source -projekte moontlik. AppVeyor.yml

                                                                  Ons het ons bestanddele, kom ons kyk na 'n resep vir 'n module!

                                                                  Die resep

                                                                  Ons gaan dit in 'n paar vinnige stappe doen:

                                                                  • Skep 'n GitHub -bewaarplek
                                                                  • Skep die module en steiers rondom dit
                                                                  • Sluit AppVeyor aan en publiseer die module

                                                                  Dit kan 'n paar minute neem voordat u die eerste keer deurloop, maar u kan dieselfde steierwerk leen en aanpas vir elke module wat u skryf. U kan eintlik PowerShell -modules en -hulpmiddels vind of skryf wat hierdie proses vereenvoudig.

                                                                  Na die resep

                                                                  Daar is geen werklike bevel hieroor nie, afhangende van wat u doen of nie inkorporeer nie, voel nie dat u dit tot die letter moet volg nie.

                                                                  Skep 'n GitHub -bewaarplek.

                                                                  Dit behoort redelik eenvoudig te wees. As u nog nie GitHub gebruik het nie, kan die volgende help:

                                                                  • Skep 'n rekening op GitHub, laai GitHub af vir Windows
                                                                  • Skep 'n nuwe bewaarplek (ons noem dit PSStackExchange en kies die MIT -lisensie)
                                                                  • Kloon PSStackExchange met GitHub vir Windows

                                                                  Kom ons gaan na die belangrikste deel, die module self.

                                                                  Skep die module en steiers rondom dit

                                                                  Hier is hoe ek gewoonlik my modules organiseer. Ons sal PSStackExchange as 'n voorbeeld gebruik, en vervang dit deur u eie module!

                                                                    • en-US (of plekke van keuse)
                                                                      • about_PSStackExchange.help.txt
                                                                      • Sluit aan-deels.ps1
                                                                      • Kry-SEData.ps1
                                                                      • Kry-SEObject.ps1
                                                                      • Soek-SEQuestion.ps1
                                                                      • Some.Library.dll
                                                                      • SomeDependency.exe

                                                                      As ons ons projek by GitHub of 'n soortgelyke kodebewaarplek wil voeg, voeg ons 'n bietjie meer steierwerk by:

                                                                        • PSStackExchange (Module -gids hierbo beskryf)
                                                                        • Toetse
                                                                          • PSStackExchange.Tests.ps1
                                                                          • Verskaffer.Pester.ps1

                                                                          Ek het deur die volgende kode gegaan om te begin. Gewoonlik sal ek die steierwerk van 'n ander module kopieer, 'n nuwe GUID in die psd1 skep en ander modulespesifieke verwysings aanpas.

                                                                          In ons geval het ons 'n paar gevorderde Stack Exchange -funksies wat hopelik 'n paar beste praktyke volg, 'n paar privaat helperfunksies wat ons nie wil hê die gebruiker moet sien nie, en 'n paar ander lêers om toetse en bruikbaarheid te dek.

                                                                          In PSStackExchange.psm1 laai ons ons openbare en private funksies. As 'n module aan die gang is, voer ek gewoonlik $ Public.Basename uit om te voorkom dat harde koderingsfunksies in die psd1 uitgevoer word. Sodra 'n module vrygestel is, probeer ek die openbare funksies by die psd1 voeg.

                                                                          As u 'n module skryf, moet u dit oorweeg om Pester -toetse daarvoor te skryf. Dit is baie gerusstellend om 'n reeks toetse te hê wat outomaties uitgevoer word na elke verandering wat u druk, eerder as om aan te neem dat die kode wat u skryf korrek was, of om u kode handmatig te toets na elke verandering. Gee dit 'n kans! Ons sluit 'n paar oppervlakkige toetse in PSStackExchange.Tests.ps1 in.

                                                                          Laastens bevat ons 'n paar bruikbaarheidskenmerke. Ons voeg 'n about_PSStackExchange -hulponderwerp by, ons versier ons uitvoer met die PSStackExchange.Format.ps1xml -lêer en voeg 'n paar aantekeninge by oor die installering en gebruik van die module in README.md.

                                                                          Ons is gereed om te gaan! Kom ons kyk hoe ons hierdie module kan publiseer sodat ander dit kan gebruik en verbeter.

                                                                          Sluit AppVeyor aan en publiseer die module

                                                                          Die inhoud van ons module is gereed om te publiseer. Voordat ons dit publiseer, sal ons deurlopende integrasie moontlik maak met handige outomatiese toetse deur AppVeyor.

                                                                          Eerstens het ons ons projek in AppVeyor opgestel deur appveyor.yml by die bewaarplek te voeg en die GitHub -projek by ons AppVeyor -rekening te voeg. Ons haal die oproepe na Pester uit in AppVeyor.Pester.ps1 en gebruik hier 'n paar idees.

                                                                          Vervolgens stoot ons die veranderinge wat ons op ons rekenaar aangebring het na GitHub. Ons kode is nou gepubliseer, en AppVeyor sal begin bou.

                                                                          Laastens wil ons ons module in die PowerShell -galery publiseer, sodat eindgebruikers met PowerShell 5 'n eenvoudige manier kan kry om u module te vind en te installeer. Ons kan dit aansluit om outomaties in AppVeyor te werk, maar dit is 'n onderwerp vir later.

                                                                          • Meld aan by PowerShellGallery.com met u Microsoft -rekening
                                                                          • Kry u API -sleutel (vind dit hier)
                                                                          • Publiseer u module!

                                                                          Ons module is nou beskikbaar op PowerShell Gallery!

                                                                          Hoe ek modules skryf, saamgevat

                                                                          Sjoe! Dit was 'n lang berig. Gelukkig kan die meeste van hierdie dinge hergebruik word in elke module wat u skryf. Kom ons kyk na die stappe:

                                                                          • Skep 'n GitHub -bewaarplek
                                                                          • Skep die module en steiers rondom dit
                                                                          • Sluit AppVeyor aan en publiseer die module

                                                                          Die eerste en laaste stap neem 'n minuut of twee elk. Die module en steierwerk rondom dit kan gekopieer en aangepas word, wat slegs 'n paar minute moet neem. Die meeste van u tyd word bestee aan die skryf van die gevorderde funksies vir die module.

                                                                          PSStackExchange

                                                                          Die module is gepubliseer en gereed om te gebruik! Ek is op 'n ander rekenaar met PowerShell 5, ek kan aan die gang kom met 'n paar reëls kode:

                                                                          Hier is 'n paar uitsette uit die voorbeelde:

                                                                          Klaar maak

                                                                          Dit is omtrent dit! As u nog nie modules skryf nie, moet u dit beslis oorweeg. Op soek na verdere leeswerk? Hier is 'n paar verwysings wat handig kan wees:

                                                                            - Dit is afkomstig van die PowerShell -beraad van 2014, danksy Kirk Freiheit - Shameless -prop. Bevat 'n aantal verwysings. - Dit gee 'n goeie oorsig van die visie en doelwitte wat vir PowerShell uiteengesit is. As u modules vir openbare verbruik skryf, oorweeg dit om dit te lees, om te voorkom dat u iets so aaklig publiseer soos Citrix se PVS 'PowerShell' snapin.

                                                                          Kantnota vir verkopers

                                                                          Deur PSStackExchange te skryf, het ek my daaraan herinner hoe belangrik dit is vir verkopers van ondernemingsprodukte om PowerShell -modules te verskaf wat die produk se API omhul. Ondanks 'n goeie API en ordentlike dokumentasie, was dit net so pynlik om 'n funksie-arm PowerShell-module hiervoor te skryf as om die Infoblox API in te pak.

                                                                          Verskaffers: as u kompetisie 'n PowerShell -module bied en u dit nie doen nie, is die kans goed dat ek na die produk van u mededinger sal streef. Dit is 'n groot toegevoegde waarde as u dit reg doen en PowerShell-konvensies volg.

                                                                          WYSIG Julie 2016: Skakels na PSStackExchange opgedateer om na 'n spesifieke tydstip te skakel. Die huidige weergawe van hierdie projek sal moontlik opdaterings sien om dinge soos PSDeploy te illustreer.

                                                                          Deel op

                                                                          Bou 'n PowerShell -module is op 06 September 2015 gepubliseer en laas op 24 Julie 2016 gewysig.


                                                                          Bou 'n PowerShell -module

                                                                          'N Ruk gelede het iemand genoem dat dit lekker kan wees om die PowerShell-module-skryfproses te dokumenteer. Dit is al voorheen gedoen, maar ek dink dit sal lekker wees om my eie proses te plaas, van die eerste idee tot die publikasie op die amptelike PowerShellGallery.com -webwerf.

                                                                          Ek het onlangs die August Scripting Games -legkaart op PowerShell.org bespreek, waarby navraag gedoen is na 'n web -API. Dit blyk dat dit 'n baie algemene behoefte is, en baie van die modules wat ons skryf, onttrek hierdie API's in handige PowerShell -funksies en -modules.

                                                                          Ons gaan die veronderstelling maak dat u weet wat 'n module is, en dat u ervaring het met die skryf van PowerShell -funksies. Indien nie, moet u tyd spandeer om PowerShell te leer voordat u hier voortgaan!

                                                                          Hierdie pos dek my tipiese formule vir die skryf van 'n module, met die Stack Exchange API as voorbeeld. Blaai gerus op u eie deur die PSStackExchange -kode.

                                                                          Waarom modules?

                                                                          Gevorderde funksies bring u ver met PowerShell. As u nie vandag funksies skryf nie, moet u u kode in hierdie herbruikbare gereedskap begin omhul. Maar ... hulle het hul grense. Hier is 'n paar redes waarom u u gevorderde funksies in 'n module kan saamvoeg:

                                                                          • Vereenvoudig die organisasie van die kode
                                                                          • Groepverwante funksies saam
                                                                          • Deel toestand tussen funksies, maar nie met die gebruiker nie
                                                                          • Hergebruik 'helperfunksies' wat u nie aan die gebruiker wil blootstel nie
                                                                          • Verbeter die vindbaarheid: Find-Module MyModule of Get-Command -Module MyModule
                                                                          • Vereenvoudig verspreiding: Installeer-module MyModule

                                                                          In ons voorbeeld sal ons 'n stel Stack Exchange -funksies in een module organiseer.

                                                                          Dit lyk ingewikkeld!

                                                                          Dit kan 'n rukkie neem om dit van nuuts af te doen. Gelukkig kan u, sodra u 'n module of twee geskryf het, vinnig begin deur dit te kopieer en 'n paar lêers aan te pas. Moenie bang wees vir die lengte van hierdie pos nie, maar dit is die moeite werd om 'n paar minute te skryf om die basiese beginsels op te neem!

                                                                          Die bestanddele

                                                                          Daar is baie maniere om 'n module te skep, van 'n .psm1 -uitbreiding op 'n lêer, tot die opstel van 'n volwaardige binêre module uit C#. Ons neem hier 'n gemeenskaplike middel en gebruik die volgende bestanddele:

                                                                          • 'N Modulmanifes. Dit is 'n .psd1 -lêer wat u module beskryf. PSStackExchange.psd1
                                                                          • 'N Wortelmodule. In ons geval, 'n script module .psm1 lêer. Dit is net 'n PowerShell -kode wat uitgevoer moet word tydens die invoer van die module. PSStackExchange.psm1
                                                                          • Uitgevoerde (openbare) funksies. Dit is die gevorderde funksies wat 'n eindgebruiker vanuit ons module kan gebruik. Byvoorbeeld, Get-SEQuestion.ps1 of Get-SEObject.ps1
                                                                          • Privaat funksies. Dit is opsionele 'helperfunksies' wat ons in ons uitgevoerde funksies wil gebruik, wat die eindgebruiker nie moet sien nie. Byvoorbeeld, Add-ObjectDetail.ps1 of Join-Parts.ps1
                                                                          • Formate. Dit is opsionele format.ps1xml -formate om u uitvoer te versier, wat dikwels gespesifiseer word in die module -manifes 'FormatsToProcess'. PSStackExchange.Format.ps1xml
                                                                          • Lees my. As u GitHub of 'n ander algemene kodebewaarplek gebruik, is die Readme.md 'n handige voorblad vir u projek, geskryf met eenvoudige Markdown eerder as HTML
                                                                          • AppVeyor -opset. As u 'n ondersteunde weergawe -beheeroplossing gebruik, maak AppVeyor eenvoudige en gratis deurlopende integrasie en aflewering vir open source -projekte moontlik. AppVeyor.yml

                                                                          Ons het ons bestanddele, kom ons kyk na 'n resep vir 'n module!

                                                                          Die resep

                                                                          Ons gaan dit in 'n paar vinnige stappe doen:

                                                                          • Skep 'n GitHub -bewaarplek
                                                                          • Skep die module en steiers rondom dit
                                                                          • Sluit AppVeyor aan en publiseer die module

                                                                          Dit kan 'n paar minute neem voordat u die eerste keer deurloop, maar u kan dieselfde steierwerk leen en aanpas vir elke module wat u skryf. U kan eintlik PowerShell -modules en -hulpmiddels vind of skryf wat hierdie proses vereenvoudig.

                                                                          Na die resep

                                                                          Daar is geen werklike bevel hieroor nie, afhangende van wat u doen of nie inkorporeer nie, voel nie dat u dit tot die letter moet volg nie.

                                                                          Skep 'n GitHub -bewaarplek.

                                                                          Dit behoort redelik eenvoudig te wees. As u nog nie GitHub gebruik het nie, kan die volgende help:

                                                                          • Skep 'n rekening op GitHub, laai GitHub af vir Windows
                                                                          • Skep 'n nuwe bewaarplek (ons noem dit PSStackExchange en kies die MIT -lisensie)
                                                                          • Kloon PSStackExchange met GitHub vir Windows

                                                                          Kom ons gaan na die belangrikste deel, die module self.

                                                                          Skep die module en steiers rondom dit

                                                                          Hier is hoe ek gewoonlik my modules organiseer. Ons sal PSStackExchange as 'n voorbeeld gebruik, en vervang dit deur u eie module!

                                                                            • en-US (of plekke van keuse)
                                                                              • about_PSStackExchange.help.txt
                                                                              • Sluit aan-deels.ps1
                                                                              • Kry-SEData.ps1
                                                                              • Kry-SEObject.ps1
                                                                              • Soek-SEQuestion.ps1
                                                                              • Some.Library.dll
                                                                              • SomeDependency.exe

                                                                              As ons ons projek by GitHub of 'n soortgelyke kodebewaarplek wil voeg, voeg ons 'n bietjie meer steierwerk by:

                                                                                • PSStackExchange (Module -gids hierbo beskryf)
                                                                                • Toetse
                                                                                  • PSStackExchange.Tests.ps1
                                                                                  • Verskaffer.Pester.ps1

                                                                                  Ek het deur die volgende kode gegaan om te begin. Gewoonlik sal ek die steierwerk van 'n ander module kopieer, 'n nuwe GUID in die psd1 skep en ander modulespesifieke verwysings aanpas.

                                                                                  In ons geval het ons 'n paar gevorderde Stack Exchange -funksies wat hopelik 'n paar beste praktyke volg, 'n paar privaat helperfunksies wat ons nie wil hê die gebruiker moet sien nie, en 'n paar ander lêers om toetse en bruikbaarheid te dek.

                                                                                  In PSStackExchange.psm1 laai ons ons openbare en private funksies. As 'n module aan die gang is, voer ek gewoonlik $ Public.Basename uit om te voorkom dat harde koderingsfunksies in die psd1 uitgevoer word. Sodra 'n module vrygestel is, probeer ek die openbare funksies by die psd1 voeg.

                                                                                  As u 'n module skryf, moet u dit oorweeg om Pester -toetse daarvoor te skryf. Dit is baie gerusstellend om 'n reeks toetse te hê wat outomaties uitgevoer word na elke verandering wat u druk, eerder as om aan te neem dat die kode wat u skryf korrek was, of om u kode handmatig te toets na elke verandering. Gee dit 'n kans! Ons sluit 'n paar oppervlakkige toetse in PSStackExchange.Tests.ps1 in.

                                                                                  Laastens bevat ons 'n paar bruikbaarheidskenmerke. Ons voeg 'n about_PSStackExchange -hulponderwerp by, ons versier ons uitvoer met die PSStackExchange.Format.ps1xml -lêer en voeg 'n paar aantekeninge by oor die installering en gebruik van die module in README.md.

                                                                                  Ons is gereed om te gaan! Kom ons kyk hoe ons hierdie module kan publiseer sodat ander dit kan gebruik en verbeter.

                                                                                  Sluit AppVeyor aan en publiseer die module

                                                                                  Die inhoud van ons module is gereed om te publiseer. Voordat ons dit publiseer, sal ons deurlopende integrasie moontlik maak met handige outomatiese toetse deur AppVeyor.

                                                                                  Eerstens het ons ons projek in AppVeyor opgestel deur appveyor.yml by die bewaarplek te voeg en die GitHub -projek by ons AppVeyor -rekening te voeg. Ons haal die oproepe na Pester uit in AppVeyor.Pester.ps1 en gebruik hier 'n paar idees.

                                                                                  Vervolgens stoot ons die veranderinge wat ons op ons rekenaar aangebring het na GitHub. Ons kode is nou gepubliseer, en AppVeyor sal begin bou.

                                                                                  Laastens wil ons ons module in die PowerShell -galery publiseer, sodat eindgebruikers met PowerShell 5 'n eenvoudige manier kan kry om u module te vind en te installeer. Ons kan dit aansluit om outomaties in AppVeyor te werk, maar dit is 'n onderwerp vir later.

                                                                                  • Meld aan by PowerShellGallery.com met u Microsoft -rekening
                                                                                  • Kry u API -sleutel (vind dit hier)
                                                                                  • Publiseer u module!

                                                                                  Ons module is nou beskikbaar op PowerShell Gallery!

                                                                                  Hoe ek modules skryf, saamgevat

                                                                                  Sjoe! Dit was 'n lang berig. Gelukkig kan die meeste van hierdie dinge hergebruik word in elke module wat u skryf. Kom ons kyk na die stappe:

                                                                                  • Skep 'n GitHub -bewaarplek
                                                                                  • Skep die module en steiers rondom dit
                                                                                  • Sluit AppVeyor aan en publiseer die module

                                                                                  Die eerste en laaste stap neem 'n minuut of twee elk. Die module en steierwerk rondom dit kan gekopieer en aangepas word, wat slegs 'n paar minute moet neem. Die meeste van u tyd word bestee aan die skryf van die gevorderde funksies vir die module.

                                                                                  PSStackExchange

                                                                                  Die module is gepubliseer en gereed om te gebruik! Ek is op 'n ander rekenaar met PowerShell 5, ek kan aan die gang kom met 'n paar reëls kode:

                                                                                  Hier is 'n paar uitsette uit die voorbeelde:

                                                                                  Klaar maak

                                                                                  Dit is omtrent dit! As u nog nie modules skryf nie, moet u dit beslis oorweeg. Op soek na verdere leeswerk? Hier is 'n paar verwysings wat handig kan wees:

                                                                                    - Dit is afkomstig van die PowerShell -beraad van 2014, danksy Kirk Freiheit - Shameless -prop. Bevat 'n aantal verwysings. - Dit gee 'n goeie oorsig van die visie en doelwitte wat vir PowerShell uiteengesit is. As u modules vir openbare verbruik skryf, oorweeg dit om dit te lees, om te voorkom dat u iets so aaklig publiseer soos Citrix se PVS 'PowerShell' snapin.

                                                                                  Kantnota vir verkopers

                                                                                  Deur PSStackExchange te skryf, het ek my daaraan herinner hoe belangrik dit is vir verkopers van ondernemingsprodukte om PowerShell -modules te verskaf wat die produk se API omhul. Ondanks 'n goeie API en ordentlike dokumentasie, was dit net so pynlik om 'n funksie-arm PowerShell-module hiervoor te skryf as om die Infoblox API in te pak.

                                                                                  Verskaffers: as u kompetisie 'n PowerShell -module bied en u dit nie doen nie, is die kans goed dat ek na die produk van u mededinger sal streef. Dit is 'n groot toegevoegde waarde as u dit reg doen en PowerShell-konvensies volg.

                                                                                  WYSIG Julie 2016: Skakels na PSStackExchange opgedateer om na 'n spesifieke tydstip te skakel. Die huidige weergawe van hierdie projek sal moontlik opdaterings sien om dinge soos PSDeploy te illustreer.

                                                                                  Deel op

                                                                                  Bou 'n PowerShell -module is op 06 September 2015 gepubliseer en laas op 24 Julie 2016 gewysig.