• Stars
    star
    368
  • Rank 115,958 (Top 3 %)
  • Language
    PowerShell
  • License
    MIT License
  • Created about 4 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Learning PowerShell through test-driven development of games and puzzles

Try It

Try the puzzles online in a Jupyter Notebook. No installs needed.

Click here:

Binder

Tiny PowerShell Projects

This is the code repository for Tiny PowerShell Projects.

I ported it from the Manning Publications book, Tiny Python Projects, by Ken Youens-Clark:

One of the many cool aspects of this not only the approach to learning PowerShell this way, additionally, you can head over to the Python repo and see how it is done in that language. Could be you are here because you're a Pythonista, and want to see how PoShers do it.

Either way, it's the same puzzles implemented in both languages, and you can use the tests provided, to do Test Driven Development and prove these and your solutions work, as you make changes.

The approach

There is a directory for each chapter of the book. There is a README to describe each exercise. Each directory contains a test.ps1 program you can use with Invoke-Pester to check that you have written the program correctly.

In addition, each directory has two PowerShell scripts, one called AllTest.ps1, and the other solution1.ps1.

AllTest

AllTest.ps1 does something very beneficial. It looks in that chapters directory for all files that match the wildcard solution*.ps1, and one by one copies it to a ps1 that is expected in the test.ps1, and the last step, it calls Invoke-Pester.

This allows you to keep the original solution supplied, and you can then create as many solutions as you'd like to test different ways to solve the puzzle. This lets you experiment with different ways to use a regex, arrays, hash tables or other approaches, in order to figure out better ways to handle this. The different solutions can sit side by side with the others and the test.ps1 can be automatically run against all.

Testing is Integral

The testing step is integral to writing and solving these challenges.

Using a "test-driven development" mentality, where you write tests before you write code, is very much recommended.

The tests should define what it means for a program to be correct, and then you write programs to satisfy the tests.

All the tests have been written for you, and you should write your own functions and tests. Practice is key.

You should run the test suite after every change to your program to ensure you are making progress!

Chapters

  • Chapter 1: How to write and test a PowerShell program How to create a PowerShell program that prints a string and takes a parameter. [source code]

  • Chapter 2: Crow's Nest How to write a PowerShell program that accepts a single, positional argument and creates a newly formatted output string. [source code]

  • Chapter 3: Picnic Writing a PowerShell program that accepts multiple string arguments and formats the results depending on the number of items. [source code]

  • Chapter 4: Jump The Five Writing a PowerShell program to encode the numerals in a given text using an algorithm called "Jump The Five." Use of a dictionary as a lookup table, characters not in the dictionary remain unchanged. Introduction to encoding/decoding text, basic idea of encryption. [source code]

  • Chapter 5: Howler Writing a PowerShell program that can process input text either from the command line or from a file.The output prints either to STDOUT or to a file. Learning about how to read/write the contents of a file. [source code]

  • Chapter 6: Word Count Writing a PowerShell program to emulate a word count program. Validates and processes multiple file inputs as well as STDIN and creates output of the counts of lines, words, and characters for each file. [source code]

  • Chapter 7: Gashlycrumb Writing a PowerShell program that processes an input file to build a lookup table (dictionary) that is used with multiple positional arguments to translate to the values from the file. [source code]

  • Chapter 8: Apples and Bananas Writing a PowerShell program to find and replace elements in a string. [source code]

  • Chapter 9: Abuse Writing a PowerShell program to generate Shakespearean insults by randomly combining some number of adjectives with a randomly chosen noun. Learning about randomness, seeds, and testing. [source code]

  • Chapter 10: Telephone Using probabilistic and deterministic approaches to randomly mutate a string. [source code]

  • Chapter 11: Bottles of Beer Writing a PowerShell program to produce the verse to the "99 Bottles of Beer" song from a given starting point. Learning to count down, format strings, algorithm design. A focus on writing a function and unit test, exploring ways to incorporate our function to generate the verses from for loops. [source code]

  • Chapter 12: Ransom Writing a PowerShell program that will randomly capitalize letters in a given piece of text for the nefarious purpose of creating a ransom note. [source code]

  • Chapter 13: Twelve Days of Christmas Writing a PowerShell program to create the verses for "The Twelve Days of Christmas" from a given day. Learning how to write a function and the test for it, then using the function in a list to generate the output. [source code]

  • Chapter 14: The Rhymer Writing a PowerShell program that can split off any initial consonants from a word and append a list of prefixes to create new rhyming "words." Exploration of regular expressions to handle words with no initial consonants, with one or more leading consonants, and nothing but consonants. [source code]

  • Chapter 15: The Kentucky Friar In this chapter we delve further into regular expressions, first learning how to split a string using a regex so we can separate things that look like "words" from non-words like punctuation and whitespace. Then we try to identify the word "you" (case-insensitive) to turn into "y'all" and any 2-syllable words ending in "-ing" so we can replace the final "g" with an apostrophe so that "cooking" becomes "cookin'" but "swing" would remain "swing." We then apply this to an entire body of text to Kentucky fry the words with amusing results. [source code]

  • Chapter 16: The Scrambler Writing a PowerShell program to find each "word" in a body of text and then scramble the letters such that the first and last letters remain in place, then reconstructing the text for output. Using regular expressions to split text, using Sort-Object { Get-Random }. [source code]

More Repositories

1

ImportExcel

PowerShell module to import/export Excel spreadsheets, without Excel
PowerShell
2,215
star
2

PowerShellAI

PowerShell AI module for OpenAI GPT-3 and DALL-E
PowerShell
689
star
3

powershell-for-developers

PowerShell examples for the book "PowerShell for Developers"
C#
158
star
4

NameIT

PowerShell module for randomly generating data
PowerShell
131
star
5

PowerShellHumanizer

PowerShell Humanizer wraps Humanizer: meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities
Jupyter Notebook
120
star
6

vscode-pandoc

Visual Studio Code extension lets you render markdown to pdf, word doc or html with pandoc
TypeScript
120
star
7

powershell-algorithms

Algorithms and data structures implemented in PowerShell with explanations and links to further readings - port of https://github.com/trekhleb/javascript-algorithms
PowerShell
117
star
8

PSharp

Productivity tool that makes PowerShell ISE better
PowerShell
110
star
9

PowerShellNotebook

Let's you automate PowerShell Notebooks with PowerShell at the command line, exports to Excel and more. On the gallery
PowerShell
110
star
10

powershell-notebooks

Get started learning PowerShell with PowerShell notebooks powered by .NET Interactive and VS Code.
PowerShell
92
star
11

InstallModuleFromGitHub

Install PowerShell Modules from GitHub
PowerShell
80
star
12

OutTabulatorView

PowerShell - Sending output to an interactive table in a browser
PowerShell
71
star
13

PSFuzzySearch

PowerShell Fuzzy search applies fuzzy searching to text
PowerShell
58
star
14

PoShLucene

PowerShell WPF GUI over Lucene.NET
PowerShell
52
star
15

PSAI

PowerShell AI module. Brings OpenAI to the console and scripts
PowerShell
51
star
16

PSStringScanner

Provides lexical scanning operations on a String
PowerShell
49
star
17

OneGetGistProvider

Gist-as-a-Package - PackageManagement PowerShell Provider to interop with Github Gists
PowerShell
45
star
18

PowerShellAIAssistant

Enhance PowerShell scripting with AI using PowerShell AI Assistant module.
PowerShell
43
star
19

edge-powershell

Run Powershell in node.js
C#
42
star
20

PSAdvantage

GitHub Actions at your Fingertips! ✨ - via PowerShell
PowerShell
40
star
21

PowerShellJson

Query JSON with PowerShell
PowerShell
38
star
22

Posh-Gist

PowerShell cmdlets for interacting with GitHub Gist
PowerShell
38
star
23

PSKit

A suite of command-line tools for working with PowerShell Arrays. From querying to doing array statistics.
PowerShell
37
star
24

edge-ps

PowerShell compiler for edge.js
JavaScript
37
star
25

IsePester

Module to integrate PowerShell Pester into ISE
PowerShell
34
star
26

PowerShellMicroservice

A PowerShell REST API running as a microservice in a Docker container.
PowerShell
32
star
27

ConvertToClass

PowerShell module to convert JSON or CSV to a PowerShell class definition
PowerShell
30
star
28

ConvertFromMarkdown

From your Markdown to generated chapters, run ScriptAnalyzer on your examples and generate HTML, a Word Doc or PDF. Table of Contents included
PowerShell
29
star
29

PSMatcher

PSMatcher is a test utility, that lets you easily test responses and json, when some part of the response is something out of your control (autogenerated id, guid, datetime etc). (And More)
PowerShell
29
star
30

PSWeave

PSWeave: a PowerShell module bringing OpenAI's GPT to your fingertips, and simplified prompt engineering
PowerShell
28
star
31

awesome-powershell-azure-functions

Curating the Best PowerShell Resources for Azure Functions
27
star
32

PSDataFrame

Use PowerShell to make data exploration easy
PowerShell
26
star
33

ServerlessPowerShell

PowerShell module that let's you rapidly deploy PowerShell scripts as Azure http trigger functions
PowerShell
25
star
34

OneGetGitHubProvider

GitHub-as-a-Package - PackageManagement PowerShell Provider to interop with Github
PowerShell
25
star
35

PowerShellAI-ContentGenerator

A versatile content generator using GPT and PowerShell
PowerShell
24
star
36

powershellScripts

PowerShell Scripts
JavaScript
24
star
37

PowerShellScottPlot

Jupyter Notebook
23
star
38

PSProse

PowerShell module for the Microsoft Program Synthesis SDK https://github.com/Microsoft/prose
PowerShell
23
star
39

dfinke

Use automation to increase bandwidth in order to address technical debt
PowerShell
21
star
40

PowerShellPivot

PowerShell
20
star
41

ODataExplorer

An 'OData Explorer' PowerShell application designed to allow ad-hoc browsing of OData Services
PowerShell
18
star
42

PowerShellCombinations

Using PowerShell Classes & Script to generate and manipulate combinations and permutations
PowerShell
18
star
43

PSPx

PowerShell module that can execute scripts written in markdown that can be accessed either locally or via a URL
PowerShell
17
star
44

PSYamlQuery

PowerShell wrapper for `yq`, enables a better PowerShell pipeline experience
PowerShell
16
star
45

SharePowerShell

Easily share (and get) PowerShell Scripts from ISE or the command line!
PowerShell
15
star
46

PowerShellCheatSheets

15
star
47

PowerShellConsole

Create a PowerShell Console using the AvalonEdit control
C#
14
star
48

PowerShellGemini

PowerShell integration for Google's versatile Gemini Pro API
PowerShell
14
star
49

PSDuckDB

PSDuckDB is a PowerShell module that provides seamless integration with DuckDB, enabling efficient execution of analytical SQL queries directly from the PowerShell environment.
PowerShell
14
star
50

openai-powershell-samples

Jupyter Notebook
13
star
51

SortingAlgorithms

Sorting in PowerShell
PowerShell
12
star
52

PowerShellAI.Functions

PowerShell module bridging PowerShell functions and OpenAI
Jupyter Notebook
12
star
53

PowerShellPhantomJS

PowerShell over PhantomJS, a headless WebKit scriptable with a JavaScript API
PowerShell
12
star
54

WebScraping

PowerShell
11
star
55

PowerShellASTDemo

PowerShell - Showing Tokenization and the Abstract Syntax Tree
PowerShell
11
star
56

PSJsonTerm

PowerShell UI for exploring and querying JSON
PowerShell
10
star
57

PowerShellJsonObject

PowerShell
10
star
58

PowerShellArrayMethods

Use PowerShell's Extended Type System and Ruby language methods
PowerShell
10
star
59

config-ps

Write your .NET configuration files in PowerShell
C#
10
star
60

PowerShellKV

A key value store that allows you to save snippets of text that you can later find and copy to your clipboard
PowerShell
10
star
61

PasteJSONasPowerShell

Converting your JSON objects into PowerShell functions
PowerShell
10
star
62

SimplePSHttpServer

Simple PowerShell Http Server
10
star
63

dfinke.github.io

https://dfinke.github.io/
Ruby
10
star
64

PowerShellExcel-Snippets

Contains the code snippets for PowerShell Excel development in the VS Code editor
PowerShell
10
star
65

GPT-FunctionCalling

Jupyter Notebook
9
star
66

NPMTabCompletion

Enables tab completion for npm commands
PowerShell
9
star
67

PowerShellScaffold

Quickly create a suite of PowerShell functions
PowerShell
8
star
68

PSPulumi

PowerShell module for Pulumi: Program the Cloud
PowerShell
8
star
69

PowerShell_Roslyn_Code_Quoter

PowerShell Roslyn Code Quoter Tool - generating syntax tree API calls that result in a given C# program.
PowerShell
8
star
70

PowerShellSlackathon

Stupid ideas for the PowerShell Slackathon
PowerShell
7
star
71

known-calendar

PowerShell wrapper for nChronic, a natural language date/time parser
PowerShell
7
star
72

PowerShellContextSplit

The Invoke-ContextSplit command copies the specified file and separates the copy into segments.
PowerShell
7
star
73

PSRunFromZip

PowerShell script to deploy Azure Functions from the command line using Run-From-Zip
PowerShell
7
star
74

PowerShellTools

Collection of PowerShell modules and scirpts to make things simpler
PowerShell
7
star
75

PoShDotNet

.NET Core PowerShell wrapper for dotnet
PowerShell
7
star
76

PowerShellAylien

PowerShell Module to interact with AYLIEN Text Analysis API - a package consisting of eight different Natural Language Processing, Information Retrieval and Machine Learning APIs that can be adapted to your processes and applications with relative ease
PowerShell
7
star
77

SpellingCorrector

PowerShell Spelling Corrector
PowerShell
6
star
78

PSSpeak

HTML
6
star
79

PowerShellSequenceUtils

Jupyter Notebook
6
star
80

SlackDSCResource

PowerShell Slack DSC Provider lets you send messages to Slack
PowerShell
6
star
81

PSGitHubCLICrescendo

PowerShell
5
star
82

VSCETabCompletion

Enables tab completion for vsce commands
PowerShell
5
star
83

powershell-azure-function-stockdata

PowerShell Azure Function for displaying stock information
PowerShell
5
star
84

PowerShell_Highlighter

Reads a PowerShell Script, writes it to the screen and color encodes it
5
star
85

PowerShellTranslate

PowerShell Invoke-Translate and New-TranslationTable typically used in substitution ciphers
PowerShell
5
star
86

StartPowerShellDemo

Start PowerShell demo from a Markdown file
PowerShell
5
star
87

PowerShell_Search_Bing

PowerShell function to interact with the new Bing Web Search API on Azure
PowerShell
5
star
88

GetBingPics

PowerShell script for searching and downloading images from the Bing API
PowerShell
5
star
89

HtmlPageFromPowerShellAzureFunction

PowerShell
5
star
90

PSCargoCompletion

PowerShell - Two for one. Auto complete for ruts's 'cargo' command and the script that does the code generation for it
PowerShell
5
star
91

PowerShellISE

A PowerShell module that lists all the ISE shortcut keys
PowerShell
4
star
92

PSGitQL

A PowerShell git query language
PowerShell
4
star
93

PowerShellNancy

PowerShell using the Nancy framework for building HTTP based
PowerShell
4
star
94

vscode-PSStackoverflow

From VS Code Search for selected text + the PowerShell tag on Stack Overflow
TypeScript
4
star
95

BladePS

Implementation of mustache.js for PowerShell
PowerShell
4
star
96

powershell-azure-function-mashup-dad-jokes-cat-pics

Powershell Azure Function Mashup - Dad Jokes and Cat Pics
PowerShell
4
star
97

PowerShell_And_Microsoft_Roslyn

Integrating PowerShell and Roslyn,the next generation of language object models for code generation, analysis, and refactoring
4
star
98

PowerShellShorts

PowerShell
3
star
99

AzureFunctions

PowerShell module for Azure Functions
PowerShell
3
star
100

PSGistIT

Create Github gists of files using one single command, Export-Gist
PowerShell
3
star