PoshCode Archive  Hex Artifact Content

Artifact 53cfa08c674e88c9cfb16bc4dce989fb5dc871c85f9f88f131834b484a27720f:

  • File Resolve-Aliases.ps1 — part of check-in [3d861f80b7] at 2018-06-10 14:26:46 on branch trunk — Resolves aliases and parameter shortcuts in scripts to make them more portable. Now resolves parameter aliases, and resolves ‘?’ to Where-Object correctly. (user: Joel Bennett size: 5790)

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 52  hell..# title: R
0030: 65 73 6f 6c 76 65 2d 41 6c 69 61 73 65 73 0d 0a  esolve-Aliases..
0040: 23 20 64 65 73 63 72 69 70 74 69 6f 6e 3a 20 52  # description: R
0050: 65 73 6f 6c 76 65 73 20 61 6c 69 61 73 65 73 20  esolves aliases 
0060: 61 6e 64 20 70 61 72 61 6d 65 74 65 72 20 73 68  and parameter sh
0070: 6f 72 74 63 75 74 73 20 69 6e 20 73 63 72 69 70  ortcuts in scrip
0080: 74 73 20 74 6f 20 6d 61 6b 65 20 74 68 65 6d 20  ts to make them 
0090: 6d 6f 72 65 20 70 6f 72 74 61 62 6c 65 2e 20 20  more portable.  
00a0: 4e 6f 77 20 72 65 73 6f 6c 76 65 73 20 70 61 72  Now resolves par
00b0: 61 6d 65 74 65 72 20 61 6c 69 61 73 65 73 2c 20  ameter aliases, 
00c0: 61 6e 64 20 72 65 73 6f 6c 76 65 73 20 e2 80 98  and resolves ...
00d0: 3f e2 80 99 20 74 6f 20 57 68 65 72 65 2d 4f 62  ?... to Where-Ob
00e0: 6a 65 63 74 20 63 6f 72 72 65 63 74 6c 79 2e 0d  ject correctly..
00f0: 0a 23 20 76 65 72 73 69 6f 6e 3a 20 31 2e 37 0d  .# version: 1.7.
0100: 0a 23 20 74 79 70 65 3a 20 6d 6f 64 75 6c 65 0d  .# type: module.
0110: 0a 23 20 61 75 74 68 6f 72 3a 20 4a 6f 65 6c 20  .# author: Joel 
0120: 42 65 6e 6e 65 74 74 0d 0a 23 20 6c 69 63 65 6e  Bennett..# licen
0130: 73 65 3a 20 43 43 30 0d 0a 23 20 66 75 6e 63 74  se: CC0..# funct
0140: 69 6f 6e 3a 20 52 65 73 6f 6c 76 65 2d 41 6c 69  ion: Resolve-Ali
0150: 61 73 65 73 0d 0a 23 20 78 2d 70 6f 73 68 63 6f  ases..# x-poshco
0160: 64 65 2d 69 64 3a 20 39 32 30 0d 0a 23 20 78 2d  de-id: 920..# x-
0170: 64 65 72 69 76 65 64 2d 66 72 6f 6d 2d 69 64 3a  derived-from-id:
0180: 20 32 39 38 30 0d 0a 23 20 78 2d 61 72 63 68 69   2980..# x-archi
0190: 76 65 64 3a 20 32 30 31 32 2d 30 36 2d 32 37 54  ved: 2012-06-27T
01a0: 30 30 3a 35 30 3a 33 30 0d 0a 23 20 78 2d 70 75  00:50:30..# x-pu
01b0: 62 6c 69 73 68 65 64 3a 20 32 30 30 39 2d 30 33  blished: 2009-03
01c0: 2d 30 37 54 32 33 3a 32 30 3a 30 30 0d 0a 23 0d  -07T23:20:00..#.
01d0: 0a 23 0d 0a 23 72 65 71 75 69 72 65 73 20 2d 76  .#..#requires -v
01e0: 65 72 73 69 6f 6e 20 32 2e 30 0d 0a 23 23 20 52  ersion 2.0..## R
01f0: 65 73 6f 6c 76 65 41 6c 69 61 73 65 73 20 4d 6f  esolveAliases Mo
0200: 64 75 6c 65 20 76 20 31 2e 37 0d 0a 23 23 23 23  dule v 1.7..####
0210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 23 23 23 23 0d 0a 23 23 20 53 61 6d 70 6c 65 20  ####..## Sample 
0290: 55 73 65 3a 0d 0a 23 23 20 20 20 20 52 65 73 6f  Use:..##    Reso
02a0: 6c 76 65 2d 41 6c 69 61 73 65 73 20 53 63 72 69  lve-Aliases Scri
02b0: 70 74 2e 70 73 31 20 7c 20 53 65 74 2d 43 6f 6e  pt.ps1 | Set-Con
02c0: 74 65 6e 74 20 53 63 72 69 70 74 2e 52 65 73 6f  tent Script.Reso
02d0: 6c 76 65 64 2e 70 73 31 20 0d 0a 23 23 20 20 20  lved.ps1 ..##   
02e0: 20 6c 73 20 2a 2e 70 73 31 20 7c 20 52 65 73 6f   ls *.ps1 | Reso
02f0: 6c 76 65 2d 41 6c 69 61 73 65 73 20 2d 49 6e 70  lve-Aliases -Inp
0300: 6c 61 63 65 0d 0a 23 23 23 23 23 23 23 23 23 23  lace..##########
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
0380: 23 23 20 56 65 72 73 69 6f 6e 20 48 69 73 74 6f  ## Version Histo
0390: 72 79 0d 0a 23 23 20 31 2e 30 20 2d 20 46 69 72  ry..## 1.0 - Fir
03a0: 73 74 20 56 65 72 73 69 6f 6e 2e 20 22 49 74 20  st Version. "It 
03b0: 77 6f 72 6b 65 64 20 6f 6e 20 6d 79 20 73 61 6d  worked on my sam
03c0: 70 6c 65 20 73 63 72 69 70 74 22 0d 0a 23 23 20  ple script"..## 
03d0: 31 2e 31 20 2d 20 4e 6f 77 20 69 74 20 70 61 72  1.1 - Now it par
03e0: 73 65 73 20 74 68 65 20 24 28 2e 2e 2e 29 20 62  ses the $(...) b
03f0: 6c 6f 63 6b 73 20 69 6e 73 69 64 65 20 73 74 72  locks inside str
0400: 69 6e 67 73 0d 0a 23 23 20 31 2e 32 20 2d 20 53  ings..## 1.2 - S
0410: 6f 6d 65 20 74 77 65 61 6b 73 20 74 6f 20 73 70  ome tweaks to sp
0420: 61 63 69 6e 67 20 61 6e 64 20 69 6e 64 65 6e 74  acing and indent
0430: 69 6e 67 20 28 49 20 72 65 61 6c 6c 79 20 67 6f  ing (I really go
0440: 74 74 61 20 67 65 74 20 73 6f 6d 65 20 6d 6f 72  tta get some mor
0450: 65 20 74 65 73 74 20 63 61 73 65 20 73 63 72 69  e test case scri
0460: 70 74 73 29 0d 0a 23 23 20 31 2e 33 20 2d 20 49  pts)..## 1.3 - I
0470: 20 77 65 6e 74 20 62 61 63 6b 20 74 6f 20 70 72   went back to pr
0480: 6f 63 65 73 73 69 6e 67 20 74 68 65 20 77 68 6f  ocessing the who
0490: 6c 65 20 73 63 72 69 70 74 20 61 74 20 6f 6e 63  le script at onc
04a0: 65 20 28 69 6e 73 74 65 61 64 20 6f 66 20 61 20  e (instead of a 
04b0: 6c 69 6e 65 20 61 74 20 61 20 74 69 6d 65 29 0d  line at a time).
04c0: 0a 23 23 20 20 20 20 20 20 20 50 72 6f 63 65 73  .##       Proces
04d0: 73 69 6e 67 20 61 20 6c 69 6e 65 20 61 74 20 61  sing a line at a
04e0: 20 74 69 6d 65 20 6d 61 6b 65 73 20 69 74 20 69   time makes it i
04f0: 6d 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 6e  mpossible to han
0500: 64 6c 65 20 48 65 72 65 2d 53 74 72 69 6e 67 73  dle Here-Strings
0510: 2e 2e 2e 0d 0a 23 23 20 20 20 20 20 20 20 49 27  .....##       I'
0520: 6d 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 6d 61  m considering ma
0530: 79 62 65 20 70 72 6f 63 65 73 73 69 6e 67 20 74  ybe processing t
0540: 68 65 20 74 6f 6b 65 6e 73 20 62 61 63 6b 77 61  he tokens backwa
0550: 72 64 73 2c 20 72 65 70 6c 61 63 69 6e 67 20 6a  rds, replacing j
0560: 75 73 74 20 74 68 65 20 74 6f 6b 65 6e 73 20 74  ust the tokens t
0570: 68 61 74 20 6e 65 65 64 20 69 74 0d 0a 23 23 20  hat need it..## 
0580: 20 20 20 20 20 20 54 68 61 74 20 77 6f 75 6c 64        That would
0590: 20 6d 65 61 6e 20 49 20 63 6f 75 6c 64 20 67 65   mean I could ge
05a0: 74 20 72 69 64 20 6f 66 20 61 6c 6c 20 74 68 65  t rid of all the
05b0: 20 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 63 6f 64   normalizing cod
05c0: 65 2c 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65  e, and leave the
05d0: 20 77 68 69 74 65 73 70 61 63 65 20 61 73 2d 69   whitespace as-i
05e0: 73 0d 0a 23 23 20 31 2e 34 20 2d 20 4e 6f 77 20  s..## 1.4 - Now 
05f0: 72 65 73 6f 6c 76 65 73 20 70 61 72 61 6d 65 74  resolves paramet
0600: 65 72 73 20 74 6f 6f 0d 0a 23 23 20 31 2e 35 20  ers too..## 1.5 
0610: 2d 20 46 69 78 65 64 20 73 65 76 65 72 61 6c 20  - Fixed several 
0620: 62 75 67 73 20 77 69 74 68 20 63 6f 6d 6d 61 6e  bugs with comman
0630: 64 20 72 65 73 6f 6c 75 74 69 6f 6e 20 28 74 68  d resolution (th
0640: 65 20 3f 20 3d 3e 20 46 6f 72 45 61 63 68 2d 4f  e ? => ForEach-O
0650: 62 6a 65 63 74 20 70 72 6f 62 6c 65 6d 29 0d 0a  bject problem)..
0660: 23 23 20 20 20 20 20 2d 20 52 65 66 61 63 74 6f  ##     - Refacto
0670: 72 65 64 20 74 68 65 20 52 65 73 6f 6c 76 65 2d  red the Resolve-
0680: 4c 69 6e 65 20 66 69 6c 74 65 72 20 72 69 67 68  Line filter righ
0690: 74 20 6f 75 74 20 6f 66 20 65 78 69 73 74 65 6e  t out of existen
06a0: 63 65 0d 0a 23 23 20 20 20 20 20 2d 20 43 72 65  ce..##     - Cre
06b0: 61 74 65 64 20 61 20 74 65 73 74 20 73 63 72 69  ated a test scri
06c0: 70 74 20 66 6f 72 20 76 61 6c 69 64 61 74 69 6f  pt for validatio
06d0: 6e 2c 20 61 6e 64 20 0d 0a 23 23 20 31 2e 36 20  n, and ..## 1.6 
06e0: 2d 20 41 64 64 65 64 20 72 65 73 6f 6c 76 69 6e  - Added resolvin
06f0: 67 20 70 61 72 61 6d 65 74 65 72 20 41 4c 49 41  g parameter ALIA
0700: 53 45 53 20 69 6e 73 74 65 61 64 20 6f 66 20 6a  SES instead of j
0710: 75 73 74 20 73 68 6f 72 74 2d 66 6f 72 6d 73 0d  ust short-forms.
0720: 0a 23 23 20 31 2e 37 20 2d 20 4d 69 6e 6f 72 20  .## 1.7 - Minor 
0730: 74 77 65 61 6b 20 74 6f 20 6d 61 6b 65 20 69 74  tweak to make it
0740: 20 77 6f 72 6b 20 69 6e 20 43 54 50 33 0d 0a 23   work in CTP3..#
0750: 23 0d 0a 23 23 20 2a 20 2a 54 4f 44 4f 3a 2a 20  #..## * *TODO:* 
0760: 50 75 74 20 62 61 63 6b 20 74 68 65 20 2d 46 75  Put back the -Fu
0770: 6c 6c 50 61 74 68 20 6f 70 74 69 6f 6e 20 74 6f  llPath option to
0780: 20 72 65 73 6f 6c 76 65 20 63 6d 64 6c 65 74 73   resolve cmdlets
0790: 20 77 69 74 68 20 74 68 65 69 72 20 73 6e 61 70   with their snap
07a0: 69 6e 20 70 61 74 68 0d 0a 23 23 20 2a 20 2a 54  in path..## * *T
07b0: 4f 44 4f 3a 2a 20 41 64 64 20 61 6e 20 6f 70 74  ODO:* Add an opt
07c0: 69 6f 6e 20 74 6f 20 70 75 74 20 23 72 65 71 75  ion to put #requ
07d0: 69 72 65 73 20 73 74 61 74 65 6d 65 6e 74 73 20  ires statements 
07e0: 61 74 20 74 68 65 20 74 6f 70 20 66 6f 72 20 65  at the top for e
07f0: 61 63 68 20 73 6e 61 70 69 6e 20 75 73 65 64 0d  ach snapin used.
0800: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
0810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0870: 23 23 23 23 23 23 23 23 23 0d 0a 66 75 6e 63 74  #########..funct
0880: 69 6f 6e 20 77 68 69 63 68 20 7b 0d 0a 50 41 52  ion which {..PAR
0890: 41 4d 28 20 5b 73 74 72 69 6e 67 5d 24 63 6f 6d  AM( [string]$com
08a0: 6d 61 6e 64 20 29 0d 0a 20 20 20 23 20 61 6c 69  mand )..   # ali
08b0: 61 73 65 73 2c 20 66 75 6e 63 74 69 6f 6e 73 2c  ases, functions,
08c0: 20 63 6d 64 6c 65 74 73 2c 20 73 63 72 69 70 74   cmdlets, script
08d0: 73 2c 20 65 78 65 63 75 74 61 62 6c 65 73 2c 20  s, executables, 
08e0: 6e 6f 72 6d 61 6c 20 66 69 6c 65 73 0d 0a 20 20  normal files..  
08f0: 20 24 63 6d 64 73 20 3d 20 40 28 47 65 74 2d 43   $cmds = @(Get-C
0900: 6f 6d 6d 61 6e 64 20 24 63 6f 6d 6d 61 6e 64 20  ommand $command 
0910: 2d 45 41 20 22 53 69 6c 65 6e 74 6c 79 43 6f 6e  -EA "SilentlyCon
0920: 74 69 6e 75 65 22 29 0d 0a 20 20 20 69 66 28 24  tinue")..   if($
0930: 63 6d 64 73 2e 43 6f 75 6e 74 20 2d 67 74 20 31  cmds.Count -gt 1
0940: 29 20 7b 0d 0a 20 20 20 20 20 20 24 63 6d 64 20  ) {..      $cmd 
0950: 3d 20 40 28 20 24 63 6d 64 73 20 7c 20 57 68 65  = @( $cmds | Whe
0960: 72 65 2d 4f 62 6a 65 63 74 20 7b 20 24 5f 2e 4e  re-Object { $_.N
0970: 61 6d 65 20 2d 6d 61 74 63 68 20 22 5e 24 28 5b  ame -match "^$([
0980: 52 65 67 65 78 5d 3a 3a 45 73 63 61 70 65 28 24  Regex]::Escape($
0990: 63 6f 6d 6d 61 6e 64 29 29 22 20 7d 29 5b 30 5d  command))" })[0]
09a0: 0d 0a 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20  ..   } else {.. 
09b0: 20 20 20 20 20 24 63 6d 64 20 3d 20 24 63 6d 64       $cmd = $cmd
09c0: 73 5b 30 5d 0d 0a 20 20 20 7d 0d 0a 20 20 20 69  s[0]..   }..   i
09d0: 66 28 21 24 63 6d 64 29 20 7b 0d 0a 20 20 20 20  f(!$cmd) {..    
09e0: 20 20 24 63 6d 64 20 3d 20 40 28 47 65 74 2d 43    $cmd = @(Get-C
09f0: 6f 6d 6d 61 6e 64 20 22 47 65 74 2d 24 63 6f 6d  ommand "Get-$com
0a00: 6d 61 6e 64 22 20 2d 45 41 20 22 53 69 6c 65 6e  mand" -EA "Silen
0a10: 74 6c 79 43 6f 6e 74 69 6e 75 65 22 20 7c 20 57  tlyContinue" | W
0a20: 68 65 72 65 2d 4f 62 6a 65 63 74 20 7b 20 24 5f  here-Object { $_
0a30: 2e 4e 61 6d 65 20 2d 6d 61 74 63 68 20 22 5e 47  .Name -match "^G
0a40: 65 74 2d 24 28 5b 52 65 67 65 78 5d 3a 3a 45 73  et-$([Regex]::Es
0a50: 63 61 70 65 28 24 63 6f 6d 6d 61 6e 64 29 29 22  cape($command))"
0a60: 20 7d 29 5b 30 5d 0d 0a 20 20 20 7d 0d 0a 20 20   })[0]..   }..  
0a70: 20 69 66 28 20 24 63 6d 64 2e 43 6f 6d 6d 61 6e   if( $cmd.Comman
0a80: 64 54 79 70 65 20 2d 65 71 20 22 41 6c 69 61 73  dType -eq "Alias
0a90: 22 20 29 20 7b 0d 0a 20 20 20 20 20 20 24 63 6d  " ) {..      $cm
0aa0: 64 20 3d 20 77 68 69 63 68 20 24 63 6d 64 2e 44  d = which $cmd.D
0ab0: 65 66 69 6e 69 74 69 6f 6e 0d 0a 20 20 20 7d 0d  efinition..   }.
0ac0: 0a 20 20 20 72 65 74 75 72 6e 20 24 63 6d 64 0d  .   return $cmd.
0ad0: 0a 7d 0d 0a 0d 0a 66 75 6e 63 74 69 6f 6e 20 52  .}....function R
0ae0: 65 73 6f 6c 76 65 2d 41 6c 69 61 73 65 73 0d 0a  esolve-Aliases..
0af0: 7b 0d 0a 20 20 20 5b 43 6d 64 6c 65 74 42 69 6e  {..   [CmdletBin
0b00: 64 69 6e 67 28 43 6f 6e 66 69 72 6d 49 6d 70 61  ding(ConfirmImpa
0b10: 63 74 3d 22 6c 6f 77 22 2c 44 65 66 61 75 6c 74  ct="low",Default
0b20: 50 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d 65  ParameterSetName
0b30: 3d 22 46 69 6c 65 73 22 29 5d 0d 0a 20 20 20 50  ="Files")]..   P
0b40: 61 72 61 6d 20 28 0d 0a 20 20 20 20 20 20 5b 50  aram (..      [P
0b50: 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74 69 6f  arameter(Positio
0b60: 6e 3d 30 2c 20 4d 61 6e 64 61 74 6f 72 79 3d 24  n=0, Mandatory=$
0b70: 74 72 75 65 2c 20 56 61 6c 75 65 46 72 6f 6d 50  true, ValueFromP
0b80: 69 70 65 6c 69 6e 65 3d 24 74 72 75 65 2c 20 50  ipeline=$true, P
0b90: 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 3d  arameterSetName=
0ba0: 22 54 65 78 74 22 29 5d 0d 0a 20 20 20 20 20 20  "Text")]..      
0bb0: 5b 73 74 72 69 6e 67 5d 24 4c 69 6e 65 0d 0a 2c  [string]$Line..,
0bc0: 0d 0a 20 20 20 20 20 20 5b 50 61 72 61 6d 65 74  ..      [Paramet
0bd0: 65 72 28 50 6f 73 69 74 69 6f 6e 3d 30 2c 20 4d  er(Position=0, M
0be0: 61 6e 64 61 74 6f 72 79 3d 24 74 72 75 65 2c 20  andatory=$true, 
0bf0: 56 61 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e  ValueFromPipelin
0c00: 65 3d 24 74 72 75 65 2c 20 50 61 72 61 6d 65 74  e=$true, Paramet
0c10: 65 72 53 65 74 4e 61 6d 65 3d 22 46 69 6c 65 73  erSetName="Files
0c20: 22 29 5d 0d 0a 20 20 20 20 20 20 5b 41 6c 69 61  ")]..      [Alia
0c30: 73 28 22 46 75 6c 6c 4e 61 6d 65 22 2c 22 50 53  s("FullName","PS
0c40: 43 68 69 6c 64 4e 61 6d 65 22 2c 22 50 53 50 61  ChildName","PSPa
0c50: 74 68 22 29 5d 0d 0a 20 20 20 20 20 20 5b 49 4f  th")]..      [IO
0c60: 2e 46 69 6c 65 49 6e 66 6f 5d 24 46 69 6c 65 0d  .FileInfo]$File.
0c70: 0a 2c 0d 0a 20 20 20 20 20 20 5b 50 61 72 61 6d  .,..      [Param
0c80: 65 74 65 72 28 50 6f 73 69 74 69 6f 6e 3d 31 2c  eter(Position=1,
0c90: 20 50 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d   ParameterSetNam
0ca0: 65 3d 22 46 69 6c 65 73 22 29 5d 20 0d 0a 20 20  e="Files")] ..  
0cb0: 20 20 20 20 5b 53 77 69 74 63 68 5d 24 49 6e 50      [Switch]$InP
0cc0: 6c 61 63 65 0d 0a 20 20 20 29 0d 0a 20 20 20 42  lace..   )..   B
0cd0: 45 47 49 4e 20 7b 0d 0a 20 20 20 20 20 20 57 72  EGIN {..      Wr
0ce0: 69 74 65 2d 44 65 62 75 67 20 24 50 53 43 6d 64  ite-Debug $PSCmd
0cf0: 6c 65 74 2e 50 61 72 61 6d 65 74 65 72 53 65 74  let.ParameterSet
0d00: 4e 61 6d 65 0d 0a 20 20 20 7d 0d 0a 20 20 20 50  Name..   }..   P
0d10: 52 4f 43 45 53 53 20 7b 0d 0a 20 20 20 20 20 20  ROCESS {..      
0d20: 69 66 28 24 50 53 43 6d 64 6c 65 74 2e 50 61 72  if($PSCmdlet.Par
0d30: 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 20 2d 65  ameterSetName -e
0d40: 71 20 22 46 69 6c 65 73 22 29 20 7b 0d 0a 20 20  q "Files") {..  
0d50: 20 20 20 20 20 20 20 69 66 28 24 46 69 6c 65 20         if($File 
0d60: 2d 69 73 20 5b 53 79 73 74 65 6d 2e 49 4f 2e 46  -is [System.IO.F
0d70: 69 6c 65 49 6e 66 6f 5d 29 7b 0d 0a 20 20 20 20  ileInfo]){..    
0d80: 20 20 20 20 20 20 20 20 24 4c 69 6e 65 20 3d 20          $Line = 
0d90: 28 28 47 65 74 2d 43 6f 6e 74 65 6e 74 20 24 46  ((Get-Content $F
0da0: 69 6c 65 29 20 2d 6a 6f 69 6e 20 22 60 6e 22 29  ile) -join "`n")
0db0: 0d 0a 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  ..         } els
0dc0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..           
0dd0: 20 74 68 72 6f 77 20 22 57 65 20 63 61 6e 27 74   throw "We can't
0de0: 20 72 65 73 6f 6c 76 65 20 61 20 77 68 6f 6c 65   resolve a whole
0df0: 20 66 6f 6c 64 65 72 20 61 74 20 6f 6e 63 65 20   folder at once 
0e00: 79 65 74 22 20 0d 0a 20 20 20 20 20 20 20 20 20  yet" ..         
0e10: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....  
0e20: 20 20 20 20 24 54 6f 6b 65 6e 73 20 3d 20 5b 53      $Tokens = [S
0e30: 79 73 74 65 6d 2e 4d 61 6e 61 67 65 6d 65 6e 74  ystem.Management
0e40: 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 50 53 50 61  .Automation.PSPa
0e50: 72 73 65 72 5d 3a 3a 54 6f 6b 65 6e 69 7a 65 28  rser]::Tokenize(
0e60: 24 4c 69 6e 65 2c 5b 72 65 66 5d 24 6e 75 6c 6c  $Line,[ref]$null
0e70: 29 0d 0a 20 20 20 20 20 20 66 6f 72 28 24 74 20  )..      for($t 
0e80: 3d 20 24 54 6f 6b 65 6e 73 2e 43 6f 75 6e 74 3b  = $Tokens.Count;
0e90: 20 24 74 20 2d 67 65 20 30 3b 20 24 74 2d 2d 29   $t -ge 0; $t--)
0ea0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 24 74 6f   {..         $to
0eb0: 6b 65 6e 20 3d 20 24 54 6f 6b 65 6e 73 5b 24 74  ken = $Tokens[$t
0ec0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 23 20 44 45  ]..         # DE
0ed0: 42 55 47 20 24 74 6f 6b 65 6e 20 7c 20 66 6c 20  BUG $token | fl 
0ee0: 2a 20 7c 20 6f 75 74 2d 68 6f 73 74 0d 0a 20 20  * | out-host..  
0ef0: 20 20 20 20 20 20 20 73 77 69 74 63 68 28 24 74         switch($t
0f00: 6f 6b 65 6e 2e 54 79 70 65 29 20 7b 0d 0a 20 20  oken.Type) {..  
0f10: 20 20 20 20 20 20 20 20 20 20 22 43 6f 6d 6d 61            "Comma
0f20: 6e 64 22 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  nd" {..         
0f30: 20 20 20 20 20 20 24 63 6d 64 20 3d 20 77 68 69        $cmd = whi
0f40: 63 68 20 24 74 6f 6b 65 6e 2e 43 6f 6e 74 65 6e  ch $token.Conten
0f50: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
0f60: 20 20 57 72 69 74 65 2d 44 65 62 75 67 20 22 43    Write-Debug "C
0f70: 6f 6d 6d 61 6e 64 20 24 28 24 74 6f 6b 65 6e 2e  ommand $($token.
0f80: 43 6f 6e 74 65 6e 74 29 20 3d 3e 20 24 28 24 63  Content) => $($c
0f90: 6d 64 2e 4e 61 6d 65 29 22 0d 0a 20 20 20 20 20  md.Name)"..     
0fa0: 20 20 20 20 20 20 20 20 20 20 23 69 66 28 24 63            #if($c
0fb0: 6d 64 2e 43 6f 6d 6d 61 6e 64 54 79 70 65 20 2d  md.CommandType -
0fc0: 65 71 20 22 41 6c 69 61 73 22 29 20 7b 0d 0a 20  eq "Alias") {.. 
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 4c                $L
0fe0: 69 6e 65 20 3d 20 24 4c 69 6e 65 2e 52 65 6d 6f  ine = $Line.Remo
0ff0: 76 65 28 20 24 74 6f 6b 65 6e 2e 53 74 61 72 74  ve( $token.Start
1000: 2c 20 24 74 6f 6b 65 6e 2e 4c 65 6e 67 74 68 20  , $token.Length 
1010: 29 2e 49 6e 73 65 72 74 28 20 24 74 6f 6b 65 6e  ).Insert( $token
1020: 2e 53 74 61 72 74 2c 20 24 63 6d 64 2e 4e 61 6d  .Start, $cmd.Nam
1030: 65 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e )..           
1040: 20 20 20 20 23 7d 0d 0a 20 20 20 20 20 20 20 20      #}..        
1050: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1060: 20 20 20 22 43 6f 6d 6d 61 6e 64 50 61 72 61 6d     "CommandParam
1070: 65 74 65 72 22 20 7b 0d 0a 20 20 20 20 20 20 20  eter" {..       
1080: 20 20 20 20 20 20 20 20 57 72 69 74 65 2d 44 65          Write-De
1090: 62 75 67 20 22 50 61 72 61 6d 65 74 65 72 20 24  bug "Parameter $
10a0: 28 24 74 6f 6b 65 6e 2e 43 6f 6e 74 65 6e 74 29  ($token.Content)
10b0: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  "..             
10c0: 20 20 66 6f 72 28 24 63 20 3d 20 24 74 3b 20 24    for($c = $t; $
10d0: 63 20 2d 67 65 20 30 3b 20 24 63 2d 2d 29 20 7b  c -ge 0; $c--) {
10e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10f0: 20 20 20 20 69 66 28 20 24 54 6f 6b 65 6e 73 5b      if( $Tokens[
1100: 24 63 5d 2e 54 79 70 65 20 2d 65 71 20 22 43 6f  $c].Type -eq "Co
1110: 6d 6d 61 6e 64 22 20 29 20 7b 0d 0a 20 20 20 20  mmand" ) {..    
1120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1130: 20 24 63 6d 64 20 3d 20 77 68 69 63 68 20 24 54   $cmd = which $T
1140: 6f 6b 65 6e 73 5b 24 63 5d 2e 43 6f 6e 74 65 6e  okens[$c].Conten
1150: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
1160: 20 20 20 20 20 20 20 20 23 20 69 66 28 24 63 6d          # if($cm
1170: 64 2e 43 6f 6d 6d 61 6e 64 54 79 70 65 20 2d 65  d.CommandType -e
1180: 71 20 22 41 6c 69 61 73 22 29 20 7b 0d 0a 20 20  q "Alias") {..  
1190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a0: 20 20 20 20 20 20 23 20 24 63 6d 64 20 3d 20 40        # $cmd = @
11b0: 28 77 68 69 63 68 20 24 63 6d 64 2e 44 65 66 69  (which $cmd.Defi
11c0: 6e 69 74 69 6f 6e 29 5b 30 5d 0d 0a 20 20 20 20  nition)[0]..    
11d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e0: 20 23 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   # }..          
11f0: 20 20 20 20 20 20 20 20 20 20 20 24 73 68 6f 72             $shor
1200: 74 20 3d 20 24 74 6f 6b 65 6e 2e 43 6f 6e 74 65  t = $token.Conte
1210: 6e 74 20 2d 72 65 70 6c 61 63 65 20 22 5e 2d 3f  nt -replace "^-?
1220: 22 2c 22 5e 22 0d 0a 20 20 20 20 20 20 20 20 20  ","^"..         
1230: 20 20 20 20 20 20 20 20 20 20 20 20 57 72 69 74              Writ
1240: 65 2d 44 65 62 75 67 20 22 50 61 72 61 6d 65 74  e-Debug "Paramet
1250: 65 72 20 24 73 68 6f 72 74 22 0d 0a 20 20 20 20  er $short"..    
1260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1270: 20 24 70 61 72 61 6d 65 74 65 72 73 20 3d 20 24   $parameters = $
1280: 63 6d 64 2e 50 61 72 61 6d 65 74 65 72 53 65 74  cmd.ParameterSet
1290: 73 20 7c 20 53 65 6c 65 63 74 20 2d 65 78 70 61  s | Select -expa
12a0: 6e 64 20 50 61 72 61 6d 65 74 65 72 73 0d 0a 20  nd Parameters.. 
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c0: 20 20 20 20 24 70 61 72 61 6d 20 3d 20 40 28 24      $param = @($
12d0: 70 61 72 61 6d 65 74 65 72 73 20 7c 20 57 68 65  parameters | Whe
12e0: 72 65 2d 4f 62 6a 65 63 74 20 7b 20 24 5f 2e 4e  re-Object { $_.N
12f0: 61 6d 65 20 2d 6d 61 74 63 68 20 24 73 68 6f 72  ame -match $shor
1300: 74 20 2d 6f 72 20 24 5f 2e 41 6c 69 61 73 65 73  t -or $_.Aliases
1310: 20 2d 6d 61 74 63 68 20 24 73 68 6f 72 74 7d 20   -match $short} 
1320: 7c 20 53 65 6c 65 63 74 20 2d 45 78 70 61 6e 64  | Select -Expand
1330: 20 4e 61 6d 65 20 2d 55 6e 69 71 75 65 29 0d 0a   Name -Unique)..
1340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1350: 20 20 20 20 20 69 66 28 24 70 61 72 61 6d 2e 43       if($param.C
1360: 6f 75 6e 74 20 2d 65 71 20 31 29 20 7b 0d 0a 20  ount -eq 1) {.. 
1370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1380: 20 20 20 20 20 20 20 24 4c 69 6e 65 20 3d 20 24         $Line = $
1390: 4c 69 6e 65 2e 52 65 6d 6f 76 65 28 20 24 74 6f  Line.Remove( $to
13a0: 6b 65 6e 2e 53 74 61 72 74 2c 20 24 74 6f 6b 65  ken.Start, $toke
13b0: 6e 2e 4c 65 6e 67 74 68 20 29 2e 49 6e 73 65 72  n.Length ).Inser
13c0: 74 28 20 24 74 6f 6b 65 6e 2e 53 74 61 72 74 2c  t( $token.Start,
13d0: 20 22 2d 24 28 24 70 61 72 61 6d 5b 30 5d 29 22   "-$($param[0])"
13e0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
13f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 62 72 65 61 6b 0d 0a 20 20 20 20 20 20 20 20   break..        
1420: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1430: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1440: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1450: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1460: 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63  }....      switc
1470: 68 28 24 50 53 43 6d 64 6c 65 74 2e 50 61 72 61  h($PSCmdlet.Para
1480: 6d 65 74 65 72 53 65 74 4e 61 6d 65 29 20 7b 0d  meterSetName) {.
1490: 0a 20 20 20 20 20 20 20 20 20 22 54 65 78 74 22  .         "Text"
14a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14b0: 24 4c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20  $Line..         
14c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 22 46 69 6c  }..         "Fil
14d0: 65 73 22 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  es" {..         
14e0: 20 20 20 73 77 69 74 63 68 28 24 46 69 6c 65 2e     switch($File.
14f0: 47 65 74 54 79 70 65 28 29 29 20 7b 0d 0a 20 20  GetType()) {..  
1500: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 79               "Sy
1510: 73 74 65 6d 2e 49 4f 2e 46 69 6c 65 49 6e 66 6f  stem.IO.FileInfo
1520: 22 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " {..           
1530: 20 20 20 20 20 20 20 69 66 28 24 49 6e 50 6c 61         if($InPla
1540: 63 65 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ce) {..         
1550: 20 20 20 20 20 20 20 20 20 20 20 20 24 4c 69 6e              $Lin
1560: 65 20 7c 20 53 65 74 2d 43 6f 6e 74 65 6e 74 20  e | Set-Content 
1570: 24 46 69 6c 65 20 0d 0a 20 20 20 20 20 20 20 20  $File ..        
1580: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
1590: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15a0: 20 20 20 20 20 20 20 20 20 24 4c 69 6e 65 0d 0a           $Line..
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
15d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
15e0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 20        default { 
15f0: 74 68 72 6f 77 20 22 57 65 20 63 61 6e 27 74 20  throw "We can't 
1600: 72 65 73 6f 6c 76 65 20 61 20 77 68 6f 6c 65 20  resolve a whole 
1610: 66 6f 6c 64 65 72 20 61 74 20 6f 6e 63 65 20 79  folder at once y
1620: 65 74 22 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  et" }..         
1630: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 7d     }..         }
1640: 0d 0a 20 20 20 20 20 20 20 20 20 64 65 66 61 75  ..         defau
1650: 6c 74 20 7b 20 74 68 72 6f 77 20 22 50 61 72 61  lt { throw "Para
1660: 6d 65 74 65 72 53 65 74 3a 20 24 28 24 50 53 43  meterSet: $($PSC
1670: 6d 64 6c 65 74 2e 50 61 72 61 6d 65 74 65 72 53  mdlet.ParameterS
1680: 65 74 4e 61 6d 65 29 22 20 7d 0d 0a 20 20 20 20  etName)" }..    
1690: 20 20 7d 0d 0a 20 20 20 7d 0d 0a 7d 0d 0a          }..   }..}..