PoshCode Archive  Hex Artifact Content

Artifact 7b816ec26bd0be7f3b20bcf8c38a997eb57e7303e6def17b69bc3c4b39afce74:

  • File Start-Demo.ps1 — part of check-in [9765bd4444] at 2018-06-10 14:22:28 on branch trunk — This is an overhaul of Jeffrey Snover’s original Start-Demo script … I’ve switched it to use ReadKey, which saves you some typing and makes the whole thing seem more natural when you’re demoing, (at least to me). I’ve also added a bunch of command-line options and a couple of features in the process (see the Revision History in the script). (user: BSonPosh size: 9280)

0000: 23 20 65 6e 63 6f 64 69 6e 67 3a 20 61 73 63 69  # encoding: asci
0010: 69 0d 0a 23 20 61 70 69 3a 20 70 6f 77 65 72 73  i..# api: powers
0020: 68 65 6c 6c 0d 0a 23 20 74 69 74 6c 65 3a 20 53  hell..# title: S
0030: 74 61 72 74 2d 44 65 6d 6f 0d 0a 23 20 64 65 73  tart-Demo..# des
0040: 63 72 69 70 74 69 6f 6e 3a 20 54 68 69 73 20 69  cription: This i
0050: 73 20 61 6e 20 6f 76 65 72 68 61 75 6c 20 6f 66  s an overhaul of
0060: 20 4a 65 66 66 72 65 79 20 53 6e 6f 76 65 72 e2   Jeffrey Snover.
0070: 80 99 73 20 6f 72 69 67 69 6e 61 6c 20 53 74 61  ..s original Sta
0080: 72 74 2d 44 65 6d 6f 20 73 63 72 69 70 74 20 e2  rt-Demo script .
0090: 80 a6 20 49 e2 80 99 76 65 20 73 77 69 74 63 68  .. I...ve switch
00a0: 65 64 20 69 74 20 74 6f 20 75 73 65 20 52 65 61  ed it to use Rea
00b0: 64 4b 65 79 2c 20 77 68 69 63 68 20 73 61 76 65  dKey, which save
00c0: 73 20 79 6f 75 20 73 6f 6d 65 20 74 79 70 69 6e  s you some typin
00d0: 67 20 61 6e 64 20 6d 61 6b 65 73 20 74 68 65 20  g and makes the 
00e0: 77 68 6f 6c 65 20 74 68 69 6e 67 20 73 65 65 6d  whole thing seem
00f0: 20 6d 6f 72 65 20 6e 61 74 75 72 61 6c 20 77 68   more natural wh
0100: 65 6e 20 79 6f 75 e2 80 99 72 65 20 64 65 6d 6f  en you...re demo
0110: 69 6e 67 2c 20 28 61 74 20 6c 65 61 73 74 20 74  ing, (at least t
0120: 6f 20 6d 65 29 2e 20 49 e2 80 99 76 65 20 61 6c  o me). I...ve al
0130: 73 6f 20 61 64 64 65 64 20 61 20 62 75 6e 63 68  so added a bunch
0140: 20 6f 66 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65   of command-line
0150: 20 6f 70 74 69 6f 6e 73 20 61 6e 64 20 61 20 63   options and a c
0160: 6f 75 70 6c 65 20 6f 66 20 66 65 61 74 75 72 65  ouple of feature
0170: 73 20 69 6e 20 74 68 65 20 70 72 6f 63 65 73 73  s in the process
0180: 20 28 73 65 65 20 74 68 65 20 52 65 76 69 73 69   (see the Revisi
0190: 6f 6e 20 48 69 73 74 6f 72 79 20 69 6e 20 74 68  on History in th
01a0: 65 20 73 63 72 69 70 74 29 2e 0d 0a 23 20 76 65  e script)...# ve
01b0: 72 73 69 6f 6e 3a 20 33 2e 33 2e 32 0d 0a 23 20  rsion: 3.3.2..# 
01c0: 74 79 70 65 3a 20 73 63 72 69 70 74 0d 0a 23 20  type: script..# 
01d0: 61 75 74 68 6f 72 3a 20 42 53 6f 6e 50 6f 73 68  author: BSonPosh
01e0: 0d 0a 23 20 6c 69 63 65 6e 73 65 3a 20 43 43 30  ..# license: CC0
01f0: 0d 0a 23 20 66 75 6e 63 74 69 6f 6e 3a 20 52 65  ..# function: Re
0200: 61 64 2d 43 68 61 72 0d 0a 23 20 78 2d 70 6f 73  ad-Char..# x-pos
0210: 68 63 6f 64 65 2d 69 64 3a 20 36 39 30 0d 0a 23  hcode-id: 690..#
0220: 20 78 2d 64 65 72 69 76 65 64 2d 66 72 6f 6d 2d   x-derived-from-
0230: 69 64 3a 20 37 30 35 0d 0a 23 20 78 2d 61 72 63  id: 705..# x-arc
0240: 68 69 76 65 64 3a 20 32 30 30 39 2d 30 31 2d 30  hived: 2009-01-0
0250: 35 54 31 36 3a 31 33 3a 35 39 0d 0a 23 0d 0a 23  5T16:13:59..#..#
0260: 0d 0a 23 23 20 53 74 61 72 74 2d 44 65 6d 6f 2e  ..## Start-Demo.
0270: 70 73 31 0d 0a 23 23 23 23 23 23 23 23 23 23 23  ps1..###########
0280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 23 23 23 23 23 23 23 0d 0a 23 23 20 54 68 69 73  #######..## This
02e0: 20 69 73 20 61 6e 20 6f 76 65 72 68 61 75 6c 20   is an overhaul 
02f0: 6f 66 20 4a 65 66 66 72 65 79 20 53 6e 6f 76 65  of Jeffrey Snove
0300: 72 27 73 20 6f 72 69 67 69 6e 61 6c 20 53 74 61  r's original Sta
0310: 72 74 2d 44 65 6d 6f 20 73 63 72 69 70 74 20 62  rt-Demo script b
0320: 79 20 4a 6f 65 6c 20 22 4a 61 79 6b 75 6c 22 20  y Joel "Jaykul" 
0330: 42 65 6e 6e 65 74 74 0d 0a 23 23 0d 0a 23 23 20  Bennett..##..## 
0340: 49 27 76 65 20 73 77 69 74 63 68 65 64 20 69 74  I've switched it
0350: 20 74 6f 20 75 73 69 6e 67 20 52 65 61 64 4b 65   to using ReadKe
0360: 79 20 69 6e 73 74 65 61 64 20 6f 66 20 52 65 61  y instead of Rea
0370: 64 4c 69 6e 65 20 28 79 6f 75 20 64 6f 6e 27 74  dLine (you don't
0380: 20 68 61 76 65 20 74 6f 20 68 69 74 20 45 6e 74   have to hit Ent
0390: 65 72 20 65 61 63 68 20 74 69 6d 65 29 0d 0a 23  er each time)..#
03a0: 23 20 41 73 20 61 20 72 65 73 75 6c 74 2c 20 49  # As a result, I
03b0: 27 76 65 20 63 68 61 6e 67 65 64 20 74 68 65 20  've changed the 
03c0: 6e 61 6d 65 73 20 61 6e 64 20 6b 65 79 73 20 66  names and keys f
03d0: 6f 72 20 61 20 6c 6f 74 20 6f 66 20 74 68 65 20  or a lot of the 
03e0: 6f 70 65 72 61 74 69 6f 6e 73 2c 20 73 6f 20 74  operations, so t
03f0: 68 61 74 20 74 68 65 79 20 6d 61 6b 65 20 0d 0a  hat they make ..
0400: 23 23 20 73 65 6e 73 65 20 77 69 74 68 20 6f 6e  ## sense with on
0410: 6c 79 20 61 20 73 69 6e 67 6c 65 20 6c 65 74 74  ly a single lett
0420: 65 72 20 74 6f 20 74 65 6c 6c 20 74 68 65 6d 20  er to tell them 
0430: 61 70 61 72 74 20 28 73 6f 72 72 79 20 69 66 20  apart (sorry if 
0440: 79 6f 75 20 68 61 64 20 74 68 65 6d 20 6d 65 6d  you had them mem
0450: 6f 72 69 7a 65 64 29 2e 0d 0a 23 23 0d 0a 23 23  orized)...##..##
0460: 20 49 27 76 65 20 61 6c 73 6f 20 62 65 65 6e 20   I've also been 
0470: 61 64 64 69 6e 67 20 66 65 61 74 75 72 65 73 20  adding features 
0480: 61 73 20 49 20 63 6f 6d 65 20 61 63 72 6f 73 73  as I come across
0490: 20 6e 65 65 64 73 20 66 6f 72 20 74 68 65 6d 2c   needs for them,
04a0: 20 61 6e 64 20 79 6f 75 27 6c 6c 20 63 6f 6e 74   and you'll cont
04b0: 72 69 62 75 74 65 20 79 6f 75 72 20 0d 0a 23 23  ribute your ..##
04c0: 20 69 6d 70 72 6f 76 65 6d 65 6e 74 73 20 62 61   improvements ba
04d0: 63 6b 20 74 6f 20 74 68 65 20 50 6f 77 65 72 53  ck to the PowerS
04e0: 68 65 6c 6c 20 53 63 72 69 70 74 20 72 65 70 6f  hell Script repo
04f0: 73 69 74 6f 72 79 20 61 73 20 77 65 6c 6c 2e 0d  sitory as well..
0500: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
0510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0560: 23 23 23 0d 0a 23 23 20 52 65 76 69 73 69 6f 6e  ###..## Revision
0570: 20 48 69 73 74 6f 72 79 20 28 76 65 72 73 69 6f   History (versio
0580: 6e 20 33 2e 33 29 0d 0a 23 23 20 33 2e 33 2e 32  n 3.3)..## 3.3.2
0590: 20 46 69 78 65 64 3a 20 20 20 20 43 68 61 6e 67   Fixed:    Chang
05a0: 65 64 20 74 68 65 20 22 78 22 20 74 6f 20 6d 61  ed the "x" to ma
05b0: 74 63 68 20 74 68 65 20 22 61 22 20 69 6e 20 74  tch the "a" in t
05c0: 68 65 20 68 65 6c 70 20 74 65 78 74 0d 0a 23 23  he help text..##
05d0: 20 33 2e 33 2e 31 20 46 69 78 65 64 3a 20 20 20   3.3.1 Fixed:   
05e0: 20 41 64 64 65 64 20 61 20 6d 69 73 73 69 6e 67   Added a missing
05f0: 20 62 72 61 63 6b 65 74 20 69 6e 20 74 68 65 20   bracket in the 
0600: 73 63 72 69 70 74 0d 0a 23 23 20 33 2e 33 20 2d  script..## 3.3 -
0610: 20 41 64 64 65 64 3a 20 20 20 20 41 64 64 65 64   Added:    Added
0620: 20 61 20 22 43 6c 65 61 72 20 53 63 72 65 65 6e   a "Clear Screen
0630: 22 20 6f 70 74 69 6f 6e 0d 0a 23 23 20 20 20 20  " option..##    
0640: 20 2d 20 41 64 64 65 64 3a 20 20 20 20 41 64 64   - Added:    Add
0650: 65 64 20 61 20 22 52 65 77 69 6e 64 22 20 66 75  ed a "Rewind" fu
0660: 6e 63 74 69 6f 6e 20 28 77 68 69 63 68 20 49 27  nction (which I'
0670: 6d 20 6e 6f 74 20 75 73 69 6e 67 20 6d 75 63 68  m not using much
0680: 29 0d 0a 23 23 20 33 2e 32 20 2d 20 46 69 78 65  )..## 3.2 - Fixe
0690: 64 3a 20 20 20 20 50 75 74 20 62 61 63 6b 20 74  d:    Put back t
06a0: 68 65 20 74 72 61 70 20 7b 20 63 6f 6e 74 69 6e  he trap { contin
06b0: 75 65 3b 20 7d 0d 0a 23 23 20 33 2e 31 20 2d 20  ue; }..## 3.1 - 
06c0: 46 69 78 65 64 3a 20 20 20 20 4e 6f 20 4f 75 74  Fixed:    No Out
06d0: 70 75 74 20 77 68 65 6e 20 69 6e 76 6f 6b 69 6e  put when invokin
06e0: 67 20 47 65 74 2d 4d 65 6d 62 65 72 20 28 61 6e  g Get-Member (an
06f0: 64 20 6f 74 68 65 72 20 63 6d 64 6c 65 74 73 20  d other cmdlets 
0700: 6c 69 6b 65 20 69 74 3f 3f 3f 29 0d 0a 23 23 20  like it???)..## 
0710: 33 2e 30 20 2d 20 46 69 78 65 64 3a 20 20 20 20  3.0 - Fixed:    
0720: 43 6f 6d 6d 61 6e 64 73 20 77 68 69 63 68 20 73  Commands which s
0730: 65 74 20 61 20 76 61 72 69 61 62 6c 65 2c 20 6c  et a variable, l
0740: 69 6b 65 3a 20 24 66 69 6c 65 73 20 3d 20 6c 73  ike: $files = ls
0750: 0d 0a 23 23 20 20 20 20 20 2d 20 46 69 78 65 64  ..##     - Fixed
0760: 3a 20 20 20 20 44 65 66 61 75 6c 74 20 61 63 74  :    Default act
0770: 69 6f 6e 20 64 6f 65 73 6e 27 74 20 63 6f 6e 74  ion doesn't cont
0780: 69 6e 75 65 0d 0a 23 23 20 20 20 20 20 2d 20 43  inue..##     - C
0790: 68 61 6e 67 65 64 3a 20 20 55 73 65 20 52 65 61  hanged:  Use Rea
07a0: 64 4b 65 79 20 69 6e 73 74 65 61 64 20 6f 66 20  dKey instead of 
07b0: 52 65 61 64 4c 69 6e 65 0d 0a 23 23 20 20 20 20  ReadLine..##    
07c0: 20 2d 20 43 68 61 6e 67 65 64 3a 20 20 4d 6f 64   - Changed:  Mod
07d0: 69 66 69 65 64 20 74 68 65 20 6f 70 74 69 6f 6e  ified the option
07e0: 20 70 72 6f 6d 70 74 73 20 28 73 6f 72 72 79 20   prompts (sorry 
07f0: 69 66 20 79 6f 75 20 68 61 64 20 74 68 65 6d 20  if you had them 
0800: 6d 65 6d 6f 72 69 7a 65 64 29 0d 0a 23 23 20 20  memorized)..##  
0810: 20 20 20 2d 20 43 68 61 6e 67 65 64 3a 20 20 56     - Changed:  V
0820: 61 72 69 6f 75 73 20 74 69 6d 65 20 61 6e 64 20  arious time and 
0830: 64 75 72 61 74 69 6f 6e 20 73 74 72 69 6e 67 73  duration strings
0840: 20 68 61 76 65 20 62 65 74 74 65 72 20 66 6f 72   have better for
0850: 6d 61 74 74 69 6e 67 0d 0a 23 23 20 20 20 20 20  matting..##     
0860: 2d 20 45 6e 68 61 6e 63 65 3a 20 20 43 6f 6c 6f  - Enhance:  Colo
0870: 72 73 20 61 72 65 20 73 65 74 74 61 62 6c 65 3a  rs are settable:
0880: 20 70 72 6f 6d 70 74 2c 20 63 6f 6d 6d 61 6e 64   prompt, command
0890: 2c 20 63 6f 6d 6d 65 6e 74 0d 0a 23 23 20 20 20  , comment..##   
08a0: 20 20 2d 20 41 64 64 65 64 3a 20 20 20 20 4e 6f    - Added:    No
08b0: 50 61 75 73 65 41 66 74 65 72 45 78 65 63 75 74  PauseAfterExecut
08c0: 65 20 73 77 69 74 63 68 20 72 65 6d 6f 76 65 73  e switch removes
08d0: 20 74 68 65 20 65 78 74 72 61 20 70 61 75 73 65   the extra pause
08e0: 0d 0a 23 23 20 20 20 20 20 20 20 20 20 20 20 20  ..##            
08f0: 20 20 20 20 20 49 66 20 79 6f 75 20 73 65 74 20       If you set 
0900: 74 68 69 73 2c 20 74 68 65 20 6e 65 78 74 20 63  this, the next c
0910: 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 62 65 20 64  ommand will be d
0920: 69 73 70 6c 61 79 65 64 20 69 6d 6d 65 64 69 61  isplayed immedia
0930: 74 65 6c 79 0d 0a 23 23 20 20 20 20 20 2d 20 41  tely..##     - A
0940: 64 64 65 64 3a 20 20 20 20 41 75 74 6f 20 45 78  dded:    Auto Ex
0950: 65 63 75 74 65 20 6d 6f 64 65 20 28 46 75 6c 6c  ecute mode (Full
0960: 41 75 74 6f 20 73 77 69 74 63 68 29 20 72 75 6e  Auto switch) run
0970: 73 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  s the rest of th
0980: 65 20 73 63 72 69 70 74 0d 0a 23 23 20 20 20 20  e script..##    
0990: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 74 20               at 
09a0: 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 73 70 65  an automatic spe
09b0: 65 64 20 73 65 74 20 62 79 20 74 68 65 20 41 75  ed set by the Au
09c0: 74 6f 53 70 65 65 64 20 70 61 72 61 6d 65 74 65  toSpeed paramete
09d0: 72 20 28 6f 72 20 6d 61 6e 75 61 6c 6c 79 29 0d  r (or manually).
09e0: 0a 23 23 20 20 20 20 20 2d 20 41 64 64 65 64 3a  .##     - Added:
09f0: 20 20 20 20 41 75 74 6f 6d 61 74 69 63 61 6c 6c      Automaticall
0a00: 79 20 61 70 70 65 6e 64 20 61 6e 20 65 6d 70 74  y append an empt
0a10: 79 20 6c 69 6e 65 20 74 6f 20 74 68 65 20 65 6e  y line to the en
0a20: 64 20 6f 66 20 74 68 65 20 64 65 6d 6f 20 73 63  d of the demo sc
0a30: 72 69 70 74 0d 0a 23 23 20 20 20 20 20 20 20 20  ript..##        
0a40: 20 20 20 20 20 20 20 20 20 73 6f 20 79 6f 75 20           so you 
0a50: 68 61 76 65 20 61 20 63 68 61 6e 63 65 20 74 6f  have a chance to
0a60: 20 22 67 6f 20 62 61 63 6b 22 20 61 66 74 65 72   "go back" after
0a70: 20 74 68 65 20 6c 61 73 74 20 6c 69 6e 65 20 6f   the last line o
0a80: 66 20 79 6f 75 20 64 65 6d 6f 0d 0a 23 23 23 23  f you demo..####
0a90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0aa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ad0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ae0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
0af0: 23 23 0d 0a 70 61 72 61 6d 28 0d 0a 20 20 24 66  ##..param(..  $f
0b00: 69 6c 65 3d 22 2e 5c 64 65 6d 6f 2e 74 78 74 22  ile=".\demo.txt"
0b10: 2c 20 0d 0a 20 20 5b 69 6e 74 5d 24 63 6f 6d 6d  , ..  [int]$comm
0b20: 61 6e 64 3d 30 2c 20 0d 0a 20 20 5b 53 79 73 74  and=0, ..  [Syst
0b30: 65 6d 2e 43 6f 6e 73 6f 6c 65 43 6f 6c 6f 72 5d  em.ConsoleColor]
0b40: 24 70 72 6f 6d 70 74 43 6f 6c 6f 72 3d 22 59 65  $promptColor="Ye
0b50: 6c 6c 6f 77 22 2c 20 0d 0a 20 20 5b 53 79 73 74  llow", ..  [Syst
0b60: 65 6d 2e 43 6f 6e 73 6f 6c 65 43 6f 6c 6f 72 5d  em.ConsoleColor]
0b70: 24 63 6f 6d 6d 61 6e 64 43 6f 6c 6f 72 3d 22 57  $commandColor="W
0b80: 68 69 74 65 22 2c 20 0d 0a 20 20 5b 53 79 73 74  hite", ..  [Syst
0b90: 65 6d 2e 43 6f 6e 73 6f 6c 65 43 6f 6c 6f 72 5d  em.ConsoleColor]
0ba0: 24 63 6f 6d 6d 65 6e 74 43 6f 6c 6f 72 3d 22 47  $commentColor="G
0bb0: 72 65 65 6e 22 2c 20 0d 0a 20 20 5b 73 77 69 74  reen", ..  [swit
0bc0: 63 68 5d 24 46 75 6c 6c 41 75 74 6f 2c 0d 0a 20  ch]$FullAuto,.. 
0bd0: 20 5b 69 6e 74 5d 24 41 75 74 6f 53 70 65 65 64   [int]$AutoSpeed
0be0: 20 3d 20 33 2c 0d 0a 20 20 5b 73 77 69 74 63 68   = 3,..  [switch
0bf0: 5d 24 4e 6f 50 61 75 73 65 41 66 74 65 72 45 78  ]$NoPauseAfterEx
0c00: 65 63 75 74 65 0d 0a 29 0d 0a 0d 0a 24 52 61 77  ecute..)....$Raw
0c10: 55 49 20 3d 20 24 48 6f 73 74 2e 55 49 2e 52 61  UI = $Host.UI.Ra
0c20: 77 55 49 0d 0a 24 68 6f 73 74 57 69 64 74 68 20  wUI..$hostWidth 
0c30: 3d 20 24 52 61 77 55 49 2e 42 75 66 66 65 72 53  = $RawUI.BufferS
0c40: 69 7a 65 2e 57 69 64 74 68 0d 0a 0d 0a 23 20 41  ize.Width....# A
0c50: 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 72 65   function for re
0c60: 61 64 69 6e 67 20 69 6e 20 61 20 63 68 61 72 61  ading in a chara
0c70: 63 74 65 72 20 0d 0a 66 75 6e 63 74 69 6f 6e 20  cter ..function 
0c80: 52 65 61 64 2d 43 68 61 72 28 29 20 7b 0d 0a 20  Read-Char() {.. 
0c90: 20 24 5f 4f 6c 64 43 6f 6c 6f 72 20 3d 20 24 52   $_OldColor = $R
0ca0: 61 77 55 49 2e 46 6f 72 65 47 72 6f 75 6e 64 43  awUI.ForeGroundC
0cb0: 6f 6c 6f 72 0d 0a 20 20 24 52 61 77 55 49 2e 46  olor..  $RawUI.F
0cc0: 6f 72 65 47 72 6f 75 6e 64 43 6f 6c 6f 72 20 3d  oreGroundColor =
0cd0: 20 22 52 65 64 22 0d 0a 20 20 24 69 6e 43 68 61   "Red"..  $inCha
0ce0: 72 3d 24 52 61 77 55 49 2e 52 65 61 64 4b 65 79  r=$RawUI.ReadKey
0cf0: 28 22 49 6e 63 6c 75 64 65 4b 65 79 55 70 22 29  ("IncludeKeyUp")
0d00: 0d 0a 20 20 23 20 6c 6f 6f 70 20 75 6e 74 69 6c  ..  # loop until
0d10: 20 74 68 65 79 20 70 72 65 73 73 20 61 20 63 68   they press a ch
0d20: 61 72 61 63 74 65 72 2c 20 73 6f 20 53 68 69 66  aracter, so Shif
0d30: 74 20 6f 72 20 43 74 72 6c 2c 20 65 74 63 20 64  t or Ctrl, etc d
0d40: 6f 6e 27 74 20 74 65 72 6d 69 6e 61 74 65 20 75  on't terminate u
0d50: 73 0d 0a 20 20 77 68 69 6c 65 28 24 5f 69 6e 70  s..  while($_inp
0d60: 75 74 2e 43 68 61 72 61 63 74 65 72 20 2d 65 71  ut.Character -eq
0d70: 20 30 29 7b 0d 0a 20 20 20 20 24 69 6e 43 68 61   0){..    $inCha
0d80: 72 3d 24 52 61 77 55 49 2e 52 65 61 64 4b 65 79  r=$RawUI.ReadKey
0d90: 28 22 49 6e 63 6c 75 64 65 4b 65 79 55 70 22 29  ("IncludeKeyUp")
0da0: 0d 0a 20 20 7d 0d 0a 20 20 24 52 61 77 55 49 2e  ..  }..  $RawUI.
0db0: 46 6f 72 65 47 72 6f 75 6e 64 43 6f 6c 6f 72 20  ForeGroundColor 
0dc0: 3d 20 24 5f 4f 6c 64 43 6f 6c 6f 72 0d 0a 20 20  = $_OldColor..  
0dd0: 72 65 74 75 72 6e 20 24 69 6e 43 68 61 72 2e 43  return $inChar.C
0de0: 68 61 72 61 63 74 65 72 0d 0a 7d 0d 0a 0d 0a 66  haracter..}....f
0df0: 75 6e 63 74 69 6f 6e 20 52 65 77 69 6e 64 28 24  unction Rewind($
0e00: 6c 69 6e 65 73 2c 20 24 69 6e 64 65 78 2c 20 24  lines, $index, $
0e10: 73 74 65 70 73 20 3d 20 31 29 20 7b 0d 0a 20 20  steps = 1) {..  
0e20: 20 24 73 74 61 72 74 65 64 20 3d 20 24 69 6e 64   $started = $ind
0e30: 65 78 3b 0d 0a 20 20 20 24 69 6e 64 65 78 20 2d  ex;..   $index -
0e40: 3d 20 24 73 74 65 70 73 3b 0d 0a 20 20 20 77 68  = $steps;..   wh
0e50: 69 6c 65 28 28 24 69 6e 64 65 78 20 2d 67 65 20  ile(($index -ge 
0e60: 30 29 20 2d 61 6e 64 20 28 24 6c 69 6e 65 73 5b  0) -and ($lines[
0e70: 24 69 6e 64 65 78 5d 2e 54 72 69 6d 28 22 20 60  $index].Trim(" `
0e80: 74 22 29 2e 53 74 61 72 74 73 57 69 74 68 28 22  t").StartsWith("
0e90: 23 22 29 29 29 7b 0d 0a 20 20 20 20 20 20 24 69  #"))){..      $i
0ea0: 6e 64 65 78 2d 2d 0d 0a 20 20 20 7d 0d 0a 20 20  ndex--..   }..  
0eb0: 20 69 66 28 20 24 69 6e 64 65 78 20 2d 6c 74 20   if( $index -lt 
0ec0: 30 20 29 20 7b 20 24 69 6e 64 65 78 20 3d 20 24  0 ) { $index = $
0ed0: 73 74 61 72 74 65 64 20 7d 0d 0a 20 20 20 72 65  started }..   re
0ee0: 74 75 72 6e 20 24 69 6e 64 65 78 0d 0a 7d 0d 0a  turn $index..}..
0ef0: 0d 0a 24 66 69 6c 65 20 3d 20 52 65 73 6f 6c 76  ..$file = Resolv
0f00: 65 2d 50 61 74 68 20 24 66 69 6c 65 0d 0a 77 68  e-Path $file..wh
0f10: 69 6c 65 28 2d 6e 6f 74 28 54 65 73 74 2d 50 61  ile(-not(Test-Pa
0f20: 74 68 20 24 66 69 6c 65 29 29 20 7b 0d 0a 20 20  th $file)) {..  
0f30: 24 66 69 6c 65 20 3d 20 52 65 61 64 2d 48 6f 73  $file = Read-Hos
0f40: 74 20 22 50 6c 65 61 73 65 20 65 6e 74 65 72 20  t "Please enter 
0f50: 74 68 65 20 70 61 74 68 20 6f 66 20 79 6f 75 72  the path of your
0f60: 20 64 65 6d 6f 20 73 63 72 69 70 74 20 28 43 72   demo script (Cr
0f70: 74 6c 2b 43 20 74 6f 20 63 61 6e 63 65 6c 29 22  tl+C to cancel)"
0f80: 0d 0a 20 20 24 66 69 6c 65 20 3d 20 52 65 73 6f  ..  $file = Reso
0f90: 6c 76 65 2d 50 61 74 68 20 24 66 69 6c 65 0d 0a  lve-Path $file..
0fa0: 7d 0d 0a 0d 0a 43 6c 65 61 72 2d 48 6f 73 74 0d  }....Clear-Host.
0fb0: 0a 0d 0a 24 5f 6c 69 6e 65 73 20 3d 20 47 65 74  ...$_lines = Get
0fc0: 2d 43 6f 6e 74 65 6e 74 20 24 66 69 6c 65 0d 0a  -Content $file..
0fd0: 23 20 41 70 70 65 6e 64 20 61 6e 20 65 78 74 72  # Append an extr
0fe0: 61 20 28 64 6f 20 6e 6f 74 68 69 6e 67 29 20 6c  a (do nothing) l
0ff0: 69 6e 65 20 6f 6e 20 74 68 65 20 65 6e 64 20 73  ine on the end s
1000: 6f 20 77 65 20 63 61 6e 20 73 74 69 6c 6c 20 67  o we can still g
1010: 6f 20 62 61 63 6b 20 61 66 74 65 72 20 74 68 65  o back after the
1020: 20 6c 61 73 74 20 6c 69 6e 65 2e 0d 0a 24 5f 6c   last line...$_l
1030: 69 6e 65 73 20 2b 3d 20 22 57 72 69 74 65 2d 48  ines += "Write-H
1040: 6f 73 74 20 27 54 68 65 20 45 6e 64 27 22 0d 0a  ost 'The End'"..
1050: 24 5f 73 74 61 72 74 74 69 6d 65 20 3d 20 5b 44  $_starttime = [D
1060: 61 74 65 54 69 6d 65 5d 3a 3a 6e 6f 77 0d 0a 24  ateTime]::now..$
1070: 46 75 6c 6c 41 75 74 6f 20 3d 20 24 66 61 6c 73  FullAuto = $fals
1080: 65 0d 0a 0d 0a 57 72 69 74 65 2d 48 6f 73 74 20  e....Write-Host 
1090: 2d 6e 6f 6e 65 77 20 2d 62 61 63 6b 20 62 6c 61  -nonew -back bla
10a0: 63 6b 20 2d 66 6f 72 65 20 24 70 72 6f 6d 70 74  ck -fore $prompt
10b0: 43 6f 6c 6f 72 20 24 28 22 20 22 20 2a 20 24 68  Color $(" " * $h
10c0: 6f 73 74 57 69 64 74 68 29 0d 0a 57 72 69 74 65  ostWidth)..Write
10d0: 2d 48 6f 73 74 20 2d 6e 6f 6e 65 77 20 2d 62 61  -Host -nonew -ba
10e0: 63 6b 20 62 6c 61 63 6b 20 2d 66 6f 72 65 20 24  ck black -fore $
10f0: 70 72 6f 6d 70 74 43 6f 6c 6f 72 20 40 22 0d 0a  promptColor @"..
1100: 3c 44 65 6d 6f 20 53 74 61 72 74 65 64 20 3a 3a  <Demo Started ::
1110: 20 24 28 73 70 6c 69 74 2d 70 61 74 68 20 24 66   $(split-path $f
1120: 69 6c 65 20 2d 6c 65 61 66 29 3e 24 28 27 20 27  ile -leaf)>$(' '
1130: 20 2a 20 28 24 68 6f 73 74 57 69 64 74 68 20 2d   * ($hostWidth -
1140: 28 31 38 20 2b 20 24 28 73 70 6c 69 74 2d 70 61  (18 + $(split-pa
1150: 74 68 20 24 66 69 6c 65 20 2d 6c 65 61 66 29 2e  th $file -leaf).
1160: 4c 65 6e 67 74 68 29 29 29 0d 0a 22 40 0d 0a 57  Length))).."@..W
1170: 72 69 74 65 2d 48 6f 73 74 20 2d 6e 6f 6e 65 77  rite-Host -nonew
1180: 20 2d 62 61 63 6b 20 62 6c 61 63 6b 20 2d 66 6f   -back black -fo
1190: 72 65 20 24 70 72 6f 6d 70 74 43 6f 6c 6f 72 20  re $promptColor 
11a0: 22 50 72 65 73 73 22 0d 0a 57 72 69 74 65 2d 48  "Press"..Write-H
11b0: 6f 73 74 20 2d 6e 6f 6e 65 77 20 2d 62 61 63 6b  ost -nonew -back
11c0: 20 62 6c 61 63 6b 20 2d 66 6f 72 65 20 52 65 64   black -fore Red
11d0: 20 22 20 3f 20 22 0d 0a 57 72 69 74 65 2d 48 6f   " ? "..Write-Ho
11e0: 73 74 20 2d 6e 6f 6e 65 77 20 2d 62 61 63 6b 20  st -nonew -back 
11f0: 62 6c 61 63 6b 20 2d 66 6f 72 65 20 24 70 72 6f  black -fore $pro
1200: 6d 70 74 43 6f 6c 6f 72 20 22 66 6f 72 20 68 65  mptColor "for he
1210: 6c 70 2e 24 28 27 20 27 20 2a 20 28 24 68 6f 73  lp.$(' ' * ($hos
1220: 74 57 69 64 74 68 20 2d 31 37 29 29 22 0d 0a 57  tWidth -17))"..W
1230: 72 69 74 65 2d 48 6f 73 74 20 2d 6e 6f 6e 65 77  rite-Host -nonew
1240: 20 2d 62 61 63 6b 20 62 6c 61 63 6b 20 2d 66 6f   -back black -fo
1250: 72 65 20 24 70 72 6f 6d 70 74 43 6f 6c 6f 72 20  re $promptColor 
1260: 24 28 22 20 22 20 2a 20 24 68 6f 73 74 57 69 64  $(" " * $hostWid
1270: 74 68 29 0d 0a 0d 0a 23 20 57 65 20 75 73 65 20  th)....# We use 
1280: 61 20 46 4f 52 20 61 6e 64 20 61 6e 20 49 4e 44  a FOR and an IND
1290: 45 58 20 28 24 5f 69 29 20 69 6e 73 74 65 61 64  EX ($_i) instead
12a0: 20 6f 66 20 61 20 46 4f 52 45 41 43 48 20 62 65   of a FOREACH be
12b0: 63 61 75 73 65 0d 0a 23 20 69 74 20 69 73 20 70  cause..# it is p
12c0: 6f 73 73 69 62 6c 65 20 74 6f 20 73 74 61 72 74  ossible to start
12d0: 20 61 74 20 61 20 64 69 66 66 65 72 65 6e 74 20   at a different 
12e0: 6c 6f 63 61 74 69 6f 6e 20 61 6e 64 2f 6f 72 20  location and/or 
12f0: 6a 75 6d 70 20 0d 0a 23 20 61 72 6f 75 6e 64 20  jump ..# around 
1300: 69 6e 20 74 68 65 20 6f 72 64 65 72 2e 0d 0a 66  in the order...f
1310: 6f 72 20 28 24 5f 69 20 3d 20 24 43 6f 6d 6d 61  or ($_i = $Comma
1320: 6e 64 3b 20 24 5f 69 20 2d 6c 74 20 24 5f 6c 69  nd; $_i -lt $_li
1330: 6e 65 73 2e 63 6f 75 6e 74 3b 20 24 5f 69 2b 2b  nes.count; $_i++
1340: 29 0d 0a 7b 20 20 0d 0a 09 23 20 50 75 74 20 74  )..{  ...# Put t
1350: 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6d 6d 61  he current comma
1360: 6e 64 20 69 6e 20 74 68 65 20 57 69 6e 64 6f 77  nd in the Window
1370: 20 54 69 74 6c 65 20 61 6c 6f 6e 67 20 77 69 74   Title along wit
1380: 68 20 74 68 65 20 64 65 6d 6f 20 64 75 72 61 74  h the demo durat
1390: 69 6f 6e 0d 0a 09 24 44 75 72 20 3d 20 5b 44 61  ion...$Dur = [Da
13a0: 74 65 54 69 6d 65 5d 3a 3a 4e 6f 77 20 2d 20 24  teTime]::Now - $
13b0: 5f 53 74 61 72 74 54 69 6d 65 0d 0a 20 20 24 52  _StartTime..  $R
13c0: 61 77 55 49 2e 57 69 6e 64 6f 77 54 69 74 6c 65  awUI.WindowTitle
13d0: 20 3d 20 22 24 28 69 66 28 24 64 75 72 2e 48 6f   = "$(if($dur.Ho
13e0: 75 72 73 20 2d 67 74 20 30 29 7b 27 7b 30 7d 68  urs -gt 0){'{0}h
13f0: 20 27 7d 29 24 28 69 66 28 24 64 75 72 2e 4d 69   '})$(if($dur.Mi
1400: 6e 75 74 65 73 20 2d 67 74 20 30 29 7b 27 7b 31  nutes -gt 0){'{1
1410: 7d 6d 20 27 7d 29 7b 32 7d 73 20 20 20 7b 33 7d  }m '}){2}s   {3}
1420: 22 20 2d 66 20 0d 0a 20 20 20 20 20 20 20 20 20  " -f ..         
1430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $
1440: 64 75 72 2e 48 6f 75 72 73 2c 20 24 64 75 72 2e  dur.Hours, $dur.
1450: 4d 69 6e 75 74 65 73 2c 20 24 64 75 72 2e 53 65  Minutes, $dur.Se
1460: 63 6f 6e 64 73 2c 20 24 28 24 5f 4c 69 6e 65 73  conds, $($_Lines
1470: 5b 24 5f 69 5d 29 0d 0a 0d 0a 09 23 20 45 63 68  [$_i]).....# Ech
1480: 6f 20 6f 75 74 20 74 68 65 20 63 6f 6d 6d 6d 61  o out the commma
1490: 6e 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c  nd to the consol
14a0: 65 20 77 69 74 68 20 61 20 70 72 6f 6d 70 74 20  e with a prompt 
14b0: 61 73 20 74 68 6f 75 67 68 20 69 74 20 77 65 72  as though it wer
14c0: 65 20 72 65 61 6c 0d 0a 09 57 72 69 74 65 2d 48  e real...Write-H
14d0: 6f 73 74 20 2d 6e 6f 6e 65 77 20 2d 66 6f 72 65  ost -nonew -fore
14e0: 20 24 70 72 6f 6d 70 74 43 6f 6c 6f 72 20 22 5b   $promptColor "[
14f0: 24 5f 69 5d 50 53 3e 20 22 0d 0a 09 69 66 20 28  $_i]PS> "...if (
1500: 24 5f 6c 69 6e 65 73 5b 24 5f 69 5d 2e 54 72 69  $_lines[$_i].Tri
1510: 6d 28 22 20 22 29 2e 53 74 61 72 74 73 57 69 74  m(" ").StartsWit
1520: 68 28 22 23 22 29 29 20 7b 20 0d 0a 09 09 57 72  h("#")) { ....Wr
1530: 69 74 65 2d 48 6f 73 74 20 2d 66 6f 72 65 20 24  ite-Host -fore $
1540: 63 6f 6d 6d 65 6e 74 43 6f 6c 6f 72 20 22 24 28  commentColor "$(
1550: 24 5f 4c 69 6e 65 73 5b 24 5f 69 5d 29 20 20 22  $_Lines[$_i])  "
1560: 0d 0a 09 09 63 6f 6e 74 69 6e 75 65 20 0d 0a 09  ....continue ...
1570: 7d 20 65 6c 73 65 20 7b 0d 0a 09 09 57 72 69 74  } else {....Writ
1580: 65 2d 48 6f 73 74 20 2d 6e 6f 6e 65 77 20 2d 66  e-Host -nonew -f
1590: 6f 72 65 20 24 63 6f 6d 6d 61 6e 64 43 6f 6c 6f  ore $commandColo
15a0: 72 20 22 24 28 24 5f 4c 69 6e 65 73 5b 24 5f 69  r "$($_Lines[$_i
15b0: 5d 29 20 20 22 0d 0a 09 7d 0d 0a 0d 0a 09 69 66  ])  "...}.....if
15c0: 28 20 24 46 75 6c 6c 41 75 74 6f 20 29 20 7b 20  ( $FullAuto ) { 
15d0: 53 74 61 72 74 2d 53 6c 65 65 70 20 24 61 75 74  Start-Sleep $aut
15e0: 6f 53 70 65 65 64 3b 20 24 63 68 20 3d 20 5b 63  oSpeed; $ch = [c
15f0: 68 61 72 5d 31 33 20 7d 20 65 6c 73 65 20 7b 20  har]13 } else { 
1600: 24 63 68 20 3d 20 52 65 61 64 2d 43 68 61 72 20  $ch = Read-Char 
1610: 7d 0d 0a 09 73 77 69 74 63 68 28 24 63 68 29 0d  }...switch($ch).
1620: 0a 09 7b 0d 0a 09 09 22 3f 22 20 7b 0d 0a 09 09  ..{...."?" {....
1630: 09 57 72 69 74 65 2d 48 6f 73 74 20 2d 46 6f 72  .Write-Host -For
1640: 65 20 24 70 72 6f 6d 70 74 43 6f 6c 6f 72 20 40  e $promptColor @
1650: 22 0d 0a 0d 0a 52 75 6e 6e 69 6e 67 20 64 65 6d  "....Running dem
1660: 6f 3a 20 24 66 69 6c 65 0d 0a 28 6e 29 20 4e 65  o: $file..(n) Ne
1670: 78 74 20 20 20 20 20 20 20 28 70 29 20 50 72 65  xt       (p) Pre
1680: 76 69 6f 75 73 0d 0a 28 71 29 20 51 75 69 74 20  vious..(q) Quit 
1690: 20 20 20 20 20 20 28 73 29 20 53 75 73 70 65 6e        (s) Suspen
16a0: 64 20 0d 0a 28 74 29 20 54 69 6d 65 63 68 65 63  d ..(t) Timechec
16b0: 6b 20 20 28 76 29 20 56 69 65 77 20 24 28 73 70  k  (v) View $(sp
16c0: 6c 69 74 2d 70 61 74 68 20 24 66 69 6c 65 20 2d  lit-path $file -
16d0: 6c 65 61 66 29 0d 0a 28 67 29 20 47 6f 20 74 6f  leaf)..(g) Go to
16e0: 20 6c 69 6e 65 20 62 79 20 6e 75 6d 62 65 72 0d   line by number.
16f0: 0a 28 66 29 20 46 69 6e 64 20 6c 69 6e 65 73 20  .(f) Find lines 
1700: 62 79 20 73 74 72 69 6e 67 0d 0a 28 61 29 20 41  by string..(a) A
1710: 75 74 6f 20 45 78 65 63 75 74 65 20 6d 6f 64 65  uto Execute mode
1720: 0d 0a 28 63 29 20 43 6c 65 61 72 20 53 63 72 65  ..(c) Clear Scre
1730: 65 6e 0d 0a 22 40 0d 0a 09 09 09 24 5f 69 2d 2d  en.."@.....$_i--
1740: 20 23 20 62 61 63 6b 20 61 20 6c 69 6e 65 2c 20   # back a line, 
1750: 77 65 27 72 65 20 67 6f 6e 6e 61 20 73 74 65 70  we're gonna step
1760: 20 66 6f 72 77 61 72 64 20 77 68 65 6e 20 77 65   forward when we
1770: 20 6c 6f 6f 70 0d 0a 09 09 7d 0d 0a 09 09 22 6e   loop....}...."n
1780: 22 20 7b 20 23 20 4e 65 78 74 20 28 64 6f 20 6e  " { # Next (do n
1790: 6f 74 68 69 6e 67 29 0d 0a 09 09 09 57 72 69 74  othing).....Writ
17a0: 65 2d 48 6f 73 74 20 2d 46 6f 72 65 20 24 70 72  e-Host -Fore $pr
17b0: 6f 6d 70 74 43 6f 6c 6f 72 20 22 3c 53 6b 69 70  omptColor "<Skip
17c0: 70 69 6e 67 20 4c 69 6e 65 3e 22 0d 0a 09 09 7d  ping Line>"....}
17d0: 0d 0a 09 09 22 70 22 20 7b 20 23 20 50 72 65 76  ...."p" { # Prev
17e0: 69 6f 75 73 0d 0a 09 09 09 57 72 69 74 65 2d 48  ious.....Write-H
17f0: 6f 73 74 20 2d 46 6f 72 65 20 24 70 72 6f 6d 70  ost -Fore $promp
1800: 74 43 6f 6c 6f 72 20 22 3c 42 61 63 6b 20 6f 6e  tColor "<Back on
1810: 65 20 4c 69 6e 65 3e 22 0d 0a 09 09 09 77 68 69  e Line>".....whi
1820: 6c 65 20 28 24 5f 6c 69 6e 65 73 5b 2d 2d 24 5f  le ($_lines[--$_
1830: 69 5d 2e 54 72 69 6d 28 22 20 22 29 2e 53 74 61  i].Trim(" ").Sta
1840: 72 74 73 57 69 74 68 28 22 23 22 29 29 7b 7d 0d  rtsWith("#")){}.
1850: 0a 09 09 09 24 5f 69 2d 2d 20 23 20 62 61 63 6b  ....$_i-- # back
1860: 20 61 20 6c 69 6e 65 2c 20 77 65 27 72 65 20 67   a line, we're g
1870: 6f 6e 6e 61 20 73 74 65 70 20 66 6f 72 77 61 72  onna step forwar
1880: 64 20 77 68 65 6e 20 77 65 20 6c 6f 6f 70 0d 0a  d when we loop..
1890: 09 09 7d 0d 0a 09 09 22 61 22 20 7b 20 23 20 45  ..}...."a" { # E
18a0: 58 45 43 55 54 45 20 28 47 6f 20 46 61 73 74 65  XECUTE (Go Faste
18b0: 72 29 0d 0a 09 09 09 24 41 75 74 6f 53 70 65 65  r).....$AutoSpee
18c0: 64 20 3d 20 5b 69 6e 74 5d 28 52 65 61 64 2d 48  d = [int](Read-H
18d0: 6f 73 74 20 22 50 61 75 73 65 20 28 73 65 63 6f  ost "Pause (seco
18e0: 6e 64 73 29 22 29 0d 0a 09 09 09 24 46 75 6c 6c  nds)").....$Full
18f0: 41 75 74 6f 20 3d 20 24 74 72 75 65 3b 0d 0a 09  Auto = $true;...
1900: 09 09 57 72 69 74 65 2d 48 6f 73 74 20 2d 46 6f  ..Write-Host -Fo
1910: 72 65 20 24 70 72 6f 6d 70 74 43 6f 6c 6f 72 20  re $promptColor 
1920: 22 3c 65 58 65 63 75 74 65 20 52 65 6d 61 69 6e  "<eXecute Remain
1930: 69 6e 67 20 4c 69 6e 65 73 3e 22 0d 0a 09 09 09  ing Lines>".....
1940: 24 5f 69 2d 2d 20 23 20 52 65 70 65 61 74 20 74  $_i-- # Repeat t
1950: 68 69 73 20 6c 69 6e 65 2c 20 61 6e 64 20 74 68  his line, and th
1960: 65 6e 20 6a 75 73 74 20 62 6c 6f 77 20 74 68 72  en just blow thr
1970: 6f 75 67 68 20 74 68 65 20 72 65 73 74 0d 0a 09  ough the rest...
1980: 09 7d 0d 0a 09 09 22 71 22 20 7b 20 23 20 51 75  .}...."q" { # Qu
1990: 69 74 0d 0a 09 09 09 57 72 69 74 65 2d 48 6f 73  it.....Write-Hos
19a0: 74 20 2d 46 6f 72 65 20 24 70 72 6f 6d 70 74 43  t -Fore $promptC
19b0: 6f 6c 6f 72 20 22 3c 51 75 69 74 69 6e 67 20 64  olor "<Quiting d
19c0: 65 6d 6f 3e 22 0d 0a 09 09 09 24 5f 69 20 3d 20  emo>".....$_i = 
19d0: 24 5f 6c 69 6e 65 73 2e 63 6f 75 6e 74 3b 0d 0a  $_lines.count;..
19e0: 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 7d 0d 0a  ...break;....}..
19f0: 09 09 22 76 22 20 7b 20 23 20 56 69 65 77 20 53  .."v" { # View S
1a00: 6f 75 72 63 65 0d 0a 09 09 09 24 6c 69 6e 65 73  ource.....$lines
1a10: 5b 30 2e 2e 28 24 5f 69 2d 31 29 5d 20 7c 20 57  [0..($_i-1)] | W
1a20: 72 69 74 65 2d 48 6f 73 74 20 2d 46 6f 72 65 20  rite-Host -Fore 
1a30: 59 65 6c 6c 6f 77 20 0d 0a 09 09 09 24 6c 69 6e  Yellow .....$lin
1a40: 65 73 5b 24 5f 69 5d 20 20 20 20 20 20 20 20 7c  es[$_i]        |
1a50: 20 57 72 69 74 65 2d 48 6f 73 74 20 2d 46 6f 72   Write-Host -For
1a60: 65 20 47 72 65 65 6e 0d 0a 09 09 09 24 6c 69 6e  e Green.....$lin
1a70: 65 73 5b 28 24 5f 69 2b 31 29 2e 2e 24 6c 69 6e  es[($_i+1)..$lin
1a80: 65 73 2e 43 6f 75 6e 74 5d 20 7c 20 57 72 69 74  es.Count] | Writ
1a90: 65 2d 48 6f 73 74 20 2d 46 6f 72 65 20 59 65 6c  e-Host -Fore Yel
1aa0: 6c 6f 77 20 0d 0a 09 09 09 24 5f 69 2d 2d 20 23  low .....$_i-- #
1ab0: 20 62 61 63 6b 20 61 20 6c 69 6e 65 2c 20 77 65   back a line, we
1ac0: 27 72 65 20 67 6f 6e 6e 61 20 73 74 65 70 20 66  're gonna step f
1ad0: 6f 72 77 61 72 64 20 77 68 65 6e 20 77 65 20 6c  orward when we l
1ae0: 6f 6f 70 0d 0a 09 09 7d 0d 0a 09 09 22 74 22 20  oop....}...."t" 
1af0: 7b 20 23 20 54 69 6d 65 20 43 68 65 63 6b 0d 0a  { # Time Check..
1b00: 09 09 09 20 24 64 75 72 20 3d 20 5b 44 61 74 65  ... $dur = [Date
1b10: 54 69 6d 65 5d 3a 3a 4e 6f 77 20 2d 20 24 5f 53  Time]::Now - $_S
1b20: 74 61 72 74 54 69 6d 65 0d 0a 20 20 20 20 20 20  tartTime..      
1b30: 20 57 72 69 74 65 2d 48 6f 73 74 20 2d 46 6f 72   Write-Host -For
1b40: 65 20 24 70 72 6f 6d 70 74 43 6f 6c 6f 72 20 24  e $promptColor $
1b50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 22 7b 33  (..          "{3
1b60: 7d 20 2d 2d 20 24 28 69 66 28 24 64 75 72 2e 48  } -- $(if($dur.H
1b70: 6f 75 72 73 20 2d 67 74 20 30 29 7b 27 7b 30 7d  ours -gt 0){'{0}
1b80: 68 20 27 7d 29 24 28 69 66 28 24 64 75 72 2e 4d  h '})$(if($dur.M
1b90: 69 6e 75 74 65 73 20 2d 67 74 20 30 29 7b 27 7b  inutes -gt 0){'{
1ba0: 31 7d 6d 20 27 7d 29 7b 32 7d 73 22 20 2d 66 20  1}m '}){2}s" -f 
1bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 24 64 75 72  ..          $dur
1bc0: 2e 48 6f 75 72 73 2c 20 24 64 75 72 2e 4d 69 6e  .Hours, $dur.Min
1bd0: 75 74 65 73 2c 20 24 64 75 72 2e 53 65 63 6f 6e  utes, $dur.Secon
1be0: 64 73 2c 20 28 5b 44 61 74 65 54 69 6d 65 5d 3a  ds, ([DateTime]:
1bf0: 3a 4e 6f 77 2e 54 6f 53 68 6f 72 74 54 69 6d 65  :Now.ToShortTime
1c00: 53 74 72 69 6e 67 28 29 29 29 0d 0a 09 09 09 20  String()))..... 
1c10: 24 5f 69 2d 2d 20 23 20 62 61 63 6b 20 61 20 6c  $_i-- # back a l
1c20: 69 6e 65 2c 20 77 65 27 72 65 20 67 6f 6e 6e 61  ine, we're gonna
1c30: 20 73 74 65 70 20 66 6f 72 77 61 72 64 20 77 68   step forward wh
1c40: 65 6e 20 77 65 20 6c 6f 6f 70 0d 0a 09 09 7d 0d  en we loop....}.
1c50: 0a 09 09 22 73 22 20 7b 20 23 20 53 75 73 70 65  ..."s" { # Suspe
1c60: 6e 64 20 28 45 6e 74 65 72 20 4e 65 73 74 65 64  nd (Enter Nested
1c70: 20 50 72 6f 6d 70 74 29 0d 0a 09 09 09 57 72 69   Prompt).....Wri
1c80: 74 65 2d 48 6f 73 74 20 2d 46 6f 72 65 20 24 70  te-Host -Fore $p
1c90: 72 6f 6d 70 74 43 6f 6c 6f 72 20 22 3c 53 75 73  romptColor "<Sus
1ca0: 70 65 6e 64 69 6e 67 20 64 65 6d 6f 20 2d 20 74  pending demo - t
1cb0: 79 70 65 20 27 45 78 69 74 27 20 74 6f 20 72 65  ype 'Exit' to re
1cc0: 73 75 6d 65 3e 22 0d 0a 09 09 09 24 48 6f 73 74  sume>".....$Host
1cd0: 2e 45 6e 74 65 72 4e 65 73 74 65 64 50 72 6f 6d  .EnterNestedProm
1ce0: 70 74 28 29 0d 0a 09 09 09 24 5f 69 2d 2d 20 23  pt().....$_i-- #
1cf0: 20 62 61 63 6b 20 61 20 6c 69 6e 65 2c 20 77 65   back a line, we
1d00: 27 72 65 20 67 6f 6e 6e 61 20 73 74 65 70 20 66  're gonna step f
1d10: 6f 72 77 61 72 64 20 77 68 65 6e 20 77 65 20 6c  orward when we l
1d20: 6f 6f 70 0d 0a 09 09 7d 0d 0a 09 09 22 67 22 20  oop....}...."g" 
1d30: 7b 20 23 20 47 6f 54 6f 20 4c 69 6e 65 20 4e 75  { # GoTo Line Nu
1d40: 6d 62 65 72 0d 0a 09 09 09 24 69 20 3d 20 5b 69  mber.....$i = [i
1d50: 6e 74 5d 28 52 65 61 64 2d 48 6f 73 74 20 22 6c  nt](Read-Host "l
1d60: 69 6e 65 20 6e 75 6d 62 65 72 22 29 0d 0a 09 09  ine number")....
1d70: 09 69 66 28 24 69 20 2d 6c 65 20 24 5f 6c 69 6e  .if($i -le $_lin
1d80: 65 73 2e 43 6f 75 6e 74 29 20 7b 0d 0a 09 09 09  es.Count) {.....
1d90: 09 69 66 28 24 69 20 2d 67 74 20 30 29 20 7b 0d  .if($i -gt 0) {.
1da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1db0: 23 20 65 78 74 72 61 20 6c 69 6e 65 20 62 61 63  # extra line bac
1dc0: 6b 20 62 65 63 61 75 73 65 20 77 65 27 72 65 20  k because we're 
1dd0: 67 6f 6e 6e 61 20 73 74 65 70 20 66 6f 72 77 61  gonna step forwa
1de0: 72 64 20 77 68 65 6e 20 77 65 20 6c 6f 6f 70 0d  rd when we loop.
1df0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e00: 24 5f 69 20 3d 20 52 65 77 69 6e 64 20 24 5f 6c  $_i = Rewind $_l
1e10: 69 6e 65 73 20 24 5f 69 20 28 28 24 5f 69 2d 24  ines $_i (($_i-$
1e20: 69 29 2b 31 29 0d 0a 09 09 09 09 7d 20 65 6c 73  i)+1)......} els
1e30: 65 20 7b 0d 0a 09 09 09 09 09 24 5f 69 20 3d 20  e {.......$_i = 
1e40: 2d 31 20 23 20 53 74 61 72 74 20 6e 65 67 61 74  -1 # Start negat
1e50: 69 76 65 2c 20 62 65 63 61 75 73 65 20 77 65 20  ive, because we 
1e60: 73 74 65 70 20 66 6f 72 77 61 72 64 20 77 68 65  step forward whe
1e70: 6e 20 77 65 20 6c 6f 6f 70 0d 0a 09 09 09 09 7d  n we loop......}
1e80: 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 09 22  .....}....}...."
1e90: 66 22 20 7b 20 23 20 46 69 6e 64 20 62 79 20 70  f" { # Find by p
1ea0: 61 74 74 65 72 6e 0d 0a 09 09 09 24 6d 61 74 63  attern.....$matc
1eb0: 68 20 3d 20 24 5f 6c 69 6e 65 73 20 7c 20 53 65  h = $_lines | Se
1ec0: 6c 65 63 74 2d 53 74 72 69 6e 67 20 28 52 65 61  lect-String (Rea
1ed0: 64 2d 48 6f 73 74 20 22 73 65 61 72 63 68 20 73  d-Host "search s
1ee0: 74 72 69 6e 67 22 29 0d 0a 09 09 09 69 66 28 24  tring").....if($
1ef0: 6d 61 74 63 68 20 2d 65 71 20 24 6e 75 6c 6c 29  match -eq $null)
1f00: 20 7b 0d 0a 09 09 09 09 57 72 69 74 65 2d 48 6f   {......Write-Ho
1f10: 73 74 20 2d 46 6f 72 65 20 52 65 64 20 22 43 61  st -Fore Red "Ca
1f20: 6e 27 74 20 66 69 6e 64 20 61 20 6d 61 74 63 68  n't find a match
1f30: 69 6e 67 20 6c 69 6e 65 22 0d 0a 09 09 09 7d 20  ing line".....} 
1f40: 65 6c 73 65 20 7b 0d 0a 09 09 09 09 24 6d 61 74  else {......$mat
1f50: 63 68 20 7c 20 25 20 7b 20 57 72 69 74 65 2d 48  ch | % { Write-H
1f60: 6f 73 74 20 2d 46 6f 72 65 20 24 70 72 6f 6d 70  ost -Fore $promp
1f70: 74 43 6f 6c 6f 72 20 24 28 22 5b 7b 30 2c 32 7d  tColor $("[{0,2}
1f80: 5d 20 7b 31 7d 22 20 2d 66 20 28 24 5f 2e 4c 69  ] {1}" -f ($_.Li
1f90: 6e 65 4e 75 6d 62 65 72 20 2d 20 31 29 2c 20 24  neNumber - 1), $
1fa0: 5f 2e 4c 69 6e 65 29 20 7d 0d 0a 09 09 09 09 69  _.Line) }......i
1fb0: 66 28 24 6d 61 74 63 68 2e 43 6f 75 6e 74 20 2d  f($match.Count -
1fc0: 6c 74 20 31 29 20 7b 0d 0a 09 09 09 09 09 24 5f  lt 1) {.......$_
1fd0: 69 20 3d 20 24 6d 61 74 63 68 2e 6c 69 6e 65 4e  i = $match.lineN
1fe0: 75 6d 62 65 72 20 2d 20 32 20 20 23 20 62 61 63  umber - 2  # bac
1ff0: 6b 20 61 20 6c 69 6e 65 2c 20 77 65 27 72 65 20  k a line, we're 
2000: 67 6f 6e 6e 61 20 73 74 65 70 20 66 6f 72 77 61  gonna step forwa
2010: 72 64 20 77 68 65 6e 20 77 65 20 6c 6f 6f 70 0d  rd when we loop.
2020: 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 20 20 20  .....} else {   
2030: 20 20 20 20 20 20 20 20 20 20 20 20 0d 0a 09 09              ....
2040: 09 09 09 24 5f 69 2d 2d 20 23 20 62 61 63 6b 20  ...$_i-- # back 
2050: 61 20 6c 69 6e 65 2c 20 77 65 27 72 65 20 67 6f  a line, we're go
2060: 6e 6e 61 20 73 74 65 70 20 66 6f 72 77 61 72 64  nna step forward
2070: 20 77 68 65 6e 20 77 65 20 6c 6f 6f 70 0d 0a 09   when we loop...
2080: 09 09 09 7d 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d  ...}.....}....}.
2090: 0a 20 20 20 20 20 20 22 63 22 20 7b 20 0d 0a 20  .      "c" { .. 
20a0: 20 20 20 20 20 20 20 20 43 6c 65 61 72 2d 48 6f          Clear-Ho
20b0: 73 74 0d 0a 20 20 20 20 20 20 20 20 20 24 5f 69  st..         $_i
20c0: 2d 2d 20 23 20 62 61 63 6b 20 61 20 6c 69 6e 65  -- # back a line
20d0: 2c 20 77 65 27 72 65 20 67 6f 6e 6e 61 20 73 74  , we're gonna st
20e0: 65 70 20 66 6f 72 77 61 72 64 20 77 68 65 6e 20  ep forward when 
20f0: 77 65 20 6c 6f 6f 70 0d 0a 20 20 20 20 20 20 7d  we loop..      }
2100: 0d 0a 09 09 22 24 28 5b 63 68 61 72 5d 31 33 29  ...."$([char]13)
2110: 22 20 7b 20 23 20 6f 6e 20 65 6e 74 65 72 0d 0a  " { # on enter..
2120: 09 09 09 57 72 69 74 65 2d 48 6f 73 74 0d 0a 09  ...Write-Host...
2130: 09 09 74 72 61 70 20 5b 53 79 73 74 65 6d 2e 45  ..trap [System.E
2140: 78 63 65 70 74 69 6f 6e 5d 20 7b 57 72 69 74 65  xception] {Write
2150: 2d 45 72 72 6f 72 20 24 5f 3b 20 63 6f 6e 74 69  -Error $_; conti
2160: 6e 75 65 3b 7d 0d 0a 09 09 09 49 6e 76 6f 6b 65  nue;}.....Invoke
2170: 2d 45 78 70 72 65 73 73 69 6f 6e 20 28 24 5f 6c  -Expression ($_l
2180: 69 6e 65 73 5b 24 5f 69 5d 29 20 7c 20 6f 75 74  ines[$_i]) | out
2190: 2d 64 65 66 61 75 6c 74 0d 0a 09 09 09 69 66 28  -default.....if(
21a0: 2d 6e 6f 74 20 24 4e 6f 50 61 75 73 65 41 66 74  -not $NoPauseAft
21b0: 65 72 45 78 65 63 75 74 65 20 2d 61 6e 64 20 2d  erExecute -and -
21c0: 6e 6f 74 20 24 46 75 6c 6c 41 75 74 6f 29 20 7b  not $FullAuto) {
21d0: 20 0d 0a 09 09 09 09 24 6e 75 6c 6c 20 3d 20 24   ......$null = $
21e0: 52 61 77 55 49 2e 52 65 61 64 4b 65 79 28 22 4e  RawUI.ReadKey("N
21f0: 6f 45 63 68 6f 2c 49 6e 63 6c 75 64 65 4b 65 79  oEcho,IncludeKey
2200: 55 70 22 29 20 20 23 20 50 61 75 73 65 20 61 66  Up")  # Pause af
2210: 74 65 72 20 6f 75 74 70 75 74 20 66 6f 72 20 6e  ter output for n
2220: 6f 20 61 70 70 61 72 65 6e 74 20 72 65 61 73 6f  o apparent reaso
2230: 6e 2e 2e 2e 20 3b 29 0d 0a 09 09 09 7d 0d 0a 09  n... ;).....}...
2240: 09 7d 0d 0a 09 09 64 65 66 61 75 6c 74 0d 0a 09  .}....default...
2250: 09 7b 0d 0a 09 09 09 57 72 69 74 65 2d 48 6f 73  .{.....Write-Hos
2260: 74 20 2d 46 6f 72 65 20 47 72 65 65 6e 20 22 60  t -Fore Green "`
2270: 6e 4b 65 79 20 6e 6f 74 20 72 65 63 6f 67 6e 69  nKey not recogni
2280: 7a 65 64 2e 20 20 50 72 65 73 73 20 3f 20 66 6f  zed.  Press ? fo
2290: 72 20 68 65 6c 70 2c 20 6f 72 20 45 4e 54 45 52  r help, or ENTER
22a0: 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 65 20   to execute the 
22b0: 63 6f 6d 6d 61 6e 64 2e 22 0d 0a 09 09 09 24 5f  command.".....$_
22c0: 69 2d 2d 20 23 20 62 61 63 6b 20 61 20 6c 69 6e  i-- # back a lin
22d0: 65 2c 20 77 65 27 72 65 20 67 6f 6e 6e 61 20 73  e, we're gonna s
22e0: 74 65 70 20 66 6f 72 77 61 72 64 20 77 68 65 6e  tep forward when
22f0: 20 77 65 20 6c 6f 6f 70 0d 0a 09 09 7d 0d 0a 09   we loop....}...
2300: 7d 0d 0a 7d 0d 0a 24 64 75 72 20 3d 20 5b 44 61  }..}..$dur = [Da
2310: 74 65 54 69 6d 65 5d 3a 3a 4e 6f 77 20 2d 20 24  teTime]::Now - $
2320: 5f 53 74 61 72 74 54 69 6d 65 0d 0a 57 72 69 74  _StartTime..Writ
2330: 65 2d 48 6f 73 74 20 2d 46 6f 72 65 20 24 70 72  e-Host -Fore $pr
2340: 6f 6d 70 74 43 6f 6c 6f 72 20 24 28 0d 0a 20 20  omptColor $(..  
2350: 20 22 3c 44 65 6d 6f 20 43 6f 6d 70 6c 65 74 65   "<Demo Complete
2360: 20 2d 2d 20 24 28 69 66 28 24 64 75 72 2e 48 6f   -- $(if($dur.Ho
2370: 75 72 73 20 2d 67 74 20 30 29 7b 27 7b 30 7d 68  urs -gt 0){'{0}h
2380: 20 27 7d 29 24 28 69 66 28 24 64 75 72 2e 4d 69   '})$(if($dur.Mi
2390: 6e 75 74 65 73 20 2d 67 74 20 30 29 7b 27 7b 31  nutes -gt 0){'{1
23a0: 7d 6d 20 27 7d 29 7b 32 7d 73 3e 22 20 2d 66 20  }m '}){2}s>" -f 
23b0: 0d 0a 20 20 20 24 64 75 72 2e 48 6f 75 72 73 2c  ..   $dur.Hours,
23c0: 20 24 64 75 72 2e 4d 69 6e 75 74 65 73 2c 20 24   $dur.Minutes, $
23d0: 64 75 72 2e 53 65 63 6f 6e 64 73 2c 20 5b 44 61  dur.Seconds, [Da
23e0: 74 65 54 69 6d 65 5d 3a 3a 4e 6f 77 2e 54 6f 4c  teTime]::Now.ToL
23f0: 6f 6e 67 54 69 6d 65 53 74 72 69 6e 67 28 29 29  ongTimeString())
2400: 0d 0a 57 72 69 74 65 2d 48 6f 73 74 20 2d 46 6f  ..Write-Host -Fo
2410: 72 65 20 24 70 72 6f 6d 70 74 43 6f 6c 6f 72 20  re $promptColor 
2420: 24 28 5b 44 61 74 65 54 69 6d 65 5d 3a 3a 6e 6f  $([DateTime]::no
2430: 77 29 0d 0a 57 72 69 74 65 2d 48 6f 73 74 0d 0a  w)..Write-Host..