PoshCode Archive  Hex Artifact Content

Artifact d7888fdad4189d793aba690872bc65f81c3c0eaaa5797cb43fb71e376b9ee0d7:

  • File Write-Host.ps1 — part of check-in [fbeeafcdaa] at 2018-06-10 13:23:51 on branch trunk — Replacement of Write-Host function to work around an issue where use of Write-Host can cause an eventual problem with launching EXEs from within the same Powershell session. See https://connect.microsoft.com/PowerShell/feedback/details/496326/stability-problem-any-application-run-fails-with-lastexitcode-1073741502 for more info. (user: unknown size: 8444)

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 0d  hell..# title: .
0030: 0a 23 20 64 65 73 63 72 69 70 74 69 6f 6e 3a 20  .# description: 
0040: 52 65 70 6c 61 63 65 6d 65 6e 74 20 6f 66 20 57  Replacement of W
0050: 72 69 74 65 2d 48 6f 73 74 20 66 75 6e 63 74 69  rite-Host functi
0060: 6f 6e 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e  on to work aroun
0070: 64 20 61 6e 20 69 73 73 75 65 20 77 68 65 72 65  d an issue where
0080: 20 75 73 65 20 6f 66 20 57 72 69 74 65 2d 48 6f   use of Write-Ho
0090: 73 74 20 63 61 6e 20 63 61 75 73 65 20 61 6e 20  st can cause an 
00a0: 65 76 65 6e 74 75 61 6c 20 70 72 6f 62 6c 65 6d  eventual problem
00b0: 20 77 69 74 68 20 6c 61 75 6e 63 68 69 6e 67 20   with launching 
00c0: 45 58 45 73 20 66 72 6f 6d 20 77 69 74 68 69 6e  EXEs from within
00d0: 20 74 68 65 20 73 61 6d 65 20 50 6f 77 65 72 73   the same Powers
00e0: 68 65 6c 6c 20 73 65 73 73 69 6f 6e 2e 20 53 65  hell session. Se
00f0: 65 20 68 74 74 70 73 3a 2f 2f 63 6f 6e 6e 65 63  e https://connec
0100: 74 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f  t.microsoft.com/
0110: 50 6f 77 65 72 53 68 65 6c 6c 2f 66 65 65 64 62  PowerShell/feedb
0120: 61 63 6b 2f 64 65 74 61 69 6c 73 2f 34 39 36 33  ack/details/4963
0130: 32 36 2f 73 74 61 62 69 6c 69 74 79 2d 70 72 6f  26/stability-pro
0140: 62 6c 65 6d 2d 61 6e 79 2d 61 70 70 6c 69 63 61  blem-any-applica
0150: 74 69 6f 6e 2d 72 75 6e 2d 66 61 69 6c 73 2d 77  tion-run-fails-w
0160: 69 74 68 2d 6c 61 73 74 65 78 69 74 63 6f 64 65  ith-lastexitcode
0170: 2d 31 30 37 33 37 34 31 35 30 32 20 66 6f 72 20  -1073741502 for 
0180: 6d 6f 72 65 20 69 6e 66 6f 2e 0d 0a 23 20 76 65  more info...# ve
0190: 72 73 69 6f 6e 3a 20 30 2e 31 0d 0a 23 20 74 79  rsion: 0.1..# ty
01a0: 70 65 3a 20 66 75 6e 63 74 69 6f 6e 0d 0a 23 20  pe: function..# 
01b0: 6c 69 63 65 6e 73 65 3a 20 43 43 30 0d 0a 23 20  license: CC0..# 
01c0: 66 75 6e 63 74 69 6f 6e 3a 20 57 72 69 74 65 2d  function: Write-
01d0: 48 6f 73 74 0d 0a 23 20 78 2d 70 6f 73 68 63 6f  Host..# x-poshco
01e0: 64 65 2d 69 64 3a 20 33 33 31 34 0d 0a 23 20 78  de-id: 3314..# x
01f0: 2d 61 72 63 68 69 76 65 64 3a 20 32 30 31 36 2d  -archived: 2016-
0200: 30 35 2d 31 39 54 30 33 3a 32 33 3a 30 37 0d 0a  05-19T03:23:07..
0210: 23 0d 0a 23 0d 0a 66 75 6e 63 74 69 6f 6e 20 57  #..#..function W
0220: 72 69 74 65 2d 48 6f 73 74 0d 0a 7b 0d 0a 20 20  rite-Host..{..  
0230: 20 20 3c 23 0d 0a 20 20 20 20 2e 53 59 4e 4f 50    <#..    .SYNOP
0240: 53 49 53 0d 0a 20 20 20 20 20 20 20 20 52 65 70  SIS..        Rep
0250: 6c 61 63 65 6d 65 6e 74 20 6f 66 20 57 72 69 74  lacement of Writ
0260: 65 2d 48 6f 73 74 20 66 75 6e 63 74 69 6f 6e 20  e-Host function 
0270: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 61  to work around a
0280: 6e 20 69 73 73 75 65 20 77 68 65 72 65 20 75 73  n issue where us
0290: 65 20 6f 66 20 57 72 69 74 65 2d 48 6f 73 74 20  e of Write-Host 
02a0: 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 63 61 75  can..        cau
02b0: 73 65 20 61 6e 20 65 76 65 6e 74 75 61 6c 20 70  se an eventual p
02c0: 72 6f 62 6c 65 6d 20 77 69 74 68 20 6c 61 75 6e  roblem with laun
02d0: 63 68 69 6e 67 20 45 58 45 73 20 66 72 6f 6d 20  ching EXEs from 
02e0: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
02f0: 50 6f 77 65 72 73 68 65 6c 6c 20 73 65 73 73 69  Powershell sessi
0300: 6f 6e 2e 0d 0a 0d 0a 20 20 20 20 2e 44 45 53 43  on.....    .DESC
0310: 52 49 50 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  RIPTION..       
0320: 20 54 68 69 73 20 57 72 69 74 65 2d 48 6f 73 74   This Write-Host
0330: 20 72 65 70 6c 61 63 65 6d 65 6e 74 20 63 61 6e   replacement can
0340: 20 61 63 74 20 61 73 20 61 20 74 65 6d 70 6f 72   act as a tempor
0350: 61 72 79 20 77 6f 72 6b 61 72 6f 75 6e 64 20 74  ary workaround t
0360: 6f 20 61 6e 20 69 73 73 75 65 20 77 69 74 68 20  o an issue with 
0370: 73 6f 6d 65 20 0d 0a 20 20 20 20 20 20 20 20 50  some ..        P
0380: 6f 77 65 72 53 68 65 6c 6c 20 76 65 72 73 69 6f  owerShell versio
0390: 6e 73 20 63 75 72 72 65 6e 74 6c 79 20 72 65 6c  ns currently rel
03a0: 65 61 73 65 64 2e 20 54 68 65 20 68 69 67 68 2d  eased. The high-
03b0: 6c 65 76 65 6c 20 64 65 73 63 72 69 70 74 69 6f  level descriptio
03c0: 6e 20 6f 66 20 74 68 65 20 70 72 6f 62 6c 65 6d  n of the problem
03d0: 20 0d 0a 20 20 20 20 20 20 20 20 69 73 20 74 68   ..        is th
03e0: 61 74 20 65 78 63 65 73 73 69 76 65 20 75 73 65  at excessive use
03f0: 20 6f 66 20 57 72 69 74 65 2d 48 6f 73 74 20 65   of Write-Host e
0400: 76 65 6e 74 75 61 6c 6c 79 20 6c 65 61 64 73 20  ventually leads 
0410: 74 6f 20 66 61 69 6c 75 72 65 73 20 74 6f 20 65  to failures to e
0420: 78 65 63 75 74 65 20 45 58 45 73 0d 0a 20 20 20  xecute EXEs..   
0430: 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 73 61       from the sa
0440: 6d 65 20 50 6f 77 65 72 53 68 65 6c 6c 20 73 65  me PowerShell se
0450: 73 73 69 6f 6e 2e 20 0d 0a 0d 0a 20 20 20 20 20  ssion. ....     
0460: 20 20 20 46 6f 72 20 70 6c 61 74 66 6f 72 6d 73     For platforms
0470: 20 77 68 65 72 65 20 74 68 65 20 70 72 6f 62 6c   where the probl
0480: 65 6d 20 65 78 69 73 74 73 2c 20 74 68 65 20 66  em exists, the f
0490: 6f 6c 6c 6f 77 69 6e 67 20 68 61 73 20 62 65 65  ollowing has bee
04a0: 6e 20 73 65 65 6e 20 74 6f 20 72 65 70 72 6f 64  n seen to reprod
04b0: 75 63 65 20 74 68 65 20 69 73 73 75 65 3a 0d 0a  uce the issue:..
04c0: 20 20 20 20 20 20 20 20 66 6f 72 28 20 24 69 20          for( $i 
04d0: 3d 20 30 3b 20 24 69 20 2d 6c 74 20 31 30 30 30  = 0; $i -lt 1000
04e0: 3b 20 24 69 20 2b 3d 20 31 20 29 20 7b 20 57 72  ; $i += 1 ) { Wr
04f0: 69 74 65 2d 48 6f 73 74 20 6c 69 6e 65 20 7d 3b  ite-Host line };
0500: 20 77 68 6f 61 6d 69 2e 65 78 65 3b 20 22 30 78   whoami.exe; "0x
0510: 7b 30 3a 58 7d 22 20 2d 66 20 24 4c 41 53 54 45  {0:X}" -f $LASTE
0520: 58 49 54 43 4f 44 45 0d 0a 0d 0a 20 20 20 20 20  XITCODE....     
0530: 20 20 20 4f 6e 20 72 65 70 72 6f 2c 20 74 68 65     On repro, the
0540: 20 24 4c 41 53 54 45 58 49 54 43 4f 44 45 20 77   $LASTEXITCODE w
0550: 69 6c 6c 20 62 65 20 30 78 43 30 30 30 30 31 34  ill be 0xC000014
0560: 32 2e 20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 54  2. ....        T
0570: 68 69 73 20 69 73 73 75 65 20 69 73 20 64 65 73  his issue is des
0580: 63 72 69 62 65 64 20 62 79 20 74 68 65 20 66 6f  cribed by the fo
0590: 6c 6c 6f 77 69 6e 67 20 43 6f 6e 6e 65 63 74 20  llowing Connect 
05a0: 61 72 74 69 63 6c 65 3a 0d 0a 20 20 20 20 20 20  article:..      
05b0: 20 20 68 74 74 70 73 3a 2f 2f 63 6f 6e 6e 65 63    https://connec
05c0: 74 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f  t.microsoft.com/
05d0: 50 6f 77 65 72 53 68 65 6c 6c 2f 66 65 65 64 62  PowerShell/feedb
05e0: 61 63 6b 2f 64 65 74 61 69 6c 73 2f 34 39 36 33  ack/details/4963
05f0: 32 36 2f 73 74 61 62 69 6c 69 74 79 2d 70 72 6f  26/stability-pro
0600: 62 6c 65 6d 2d 61 6e 79 2d 61 70 70 6c 69 63 61  blem-any-applica
0610: 74 69 6f 6e 2d 72 75 6e 2d 66 61 69 6c 73 2d 77  tion-run-fails-w
0620: 69 74 68 2d 6c 61 73 74 65 78 69 74 63 6f 64 65  ith-lastexitcode
0630: 2d 31 30 37 33 37 34 31 35 30 32 0d 0a 0d 0a 20  -1073741502.... 
0640: 20 20 20 20 20 20 20 53 6f 6d 65 20 66 6f 6c 6b         Some folk
0650: 73 20 77 6f 72 6b 61 72 6f 75 6e 64 20 74 68 65  s workaround the
0660: 20 69 73 73 75 65 20 62 79 20 73 69 6d 70 6c 79   issue by simply
0670: 20 75 73 69 6e 67 20 70 69 70 65 6c 69 6e 65 20   using pipeline 
0680: 6f 75 74 70 75 74 20 74 6f 20 64 69 73 70 6c 61  output to displa
0690: 79 20 73 74 61 74 75 73 20 6d 65 73 73 61 67 65  y status message
06a0: 73 2e 20 0d 0a 20 20 20 20 20 20 20 20 55 73 65  s. ..        Use
06b0: 20 74 68 65 20 70 69 70 65 6c 69 6e 65 20 69 6e   the pipeline in
06c0: 20 74 68 69 73 20 6d 61 6e 6e 65 72 20 6d 61 79   this manner may
06d0: 20 62 65 20 69 64 65 61 6c 20 66 6f 72 20 73 69   be ideal for si
06e0: 74 75 61 74 69 6f 6e 73 20 77 68 65 72 65 20 69  tuations where i
06f0: 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 66 6f  t is not used fo
0700: 72 20 6f 74 68 65 72 0d 0a 20 20 20 20 20 20 20  r other..       
0710: 20 70 75 72 70 6f 73 65 73 2e 0d 0a 20 20 20 20   purposes...    
0720: 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20 49 66      ..        If
0730: 20 79 6f 75 20 68 61 76 65 20 73 63 72 69 70 74   you have script
0740: 73 20 74 68 61 74 20 75 73 65 20 74 68 65 20 70  s that use the p
0750: 69 70 65 6c 69 6e 65 20 66 6f 72 20 6f 74 68 65  ipeline for othe
0760: 72 20 70 75 72 70 6f 73 65 73 2c 20 61 6e 64 20  r purposes, and 
0770: 72 65 6c 79 20 6f 6e 20 57 72 69 74 65 2d 48 6f  rely on Write-Ho
0780: 73 74 20 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  st ..        for
0790: 20 6e 6f 6e 2d 70 69 70 65 6c 69 6e 65 20 73 74   non-pipeline st
07a0: 61 74 75 73 20 6f 75 74 70 75 74 2c 20 77 68 65  atus output, whe
07b0: 72 65 20 79 6f 75 72 20 73 63 72 69 70 74 73 20  re your scripts 
07c0: 68 69 74 20 74 68 69 73 20 69 73 73 75 65 2c 20  hit this issue, 
07d0: 70 65 72 68 61 70 73 20 74 68 69 73 20 77 6f 72  perhaps this wor
07e0: 6b 61 72 6f 75 6e 64 0d 0a 20 20 20 20 20 20 20  karound..       
07f0: 20 6d 61 79 20 62 65 20 6f 66 20 75 73 65 2e 20   may be of use. 
0800: 0d 0a 0d 0a 20 20 20 20 2e 50 41 52 41 4d 45 54  ....    .PARAMET
0810: 45 52 20 4f 62 6a 65 63 74 0d 0a 20 20 20 20 20  ER Object..     
0820: 20 20 20 4f 62 6a 65 63 74 20 74 6f 20 62 65 20     Object to be 
0830: 6f 75 74 70 75 74 65 64 20 74 6f 20 73 74 64 6f  outputed to stdo
0840: 75 74 2e 0d 0a 0d 0a 20 20 20 20 2e 50 41 52 41  ut.....    .PARA
0850: 4d 45 54 45 52 20 4e 6f 4e 65 77 4c 69 6e 65 0d  METER NoNewLine.
0860: 0a 20 20 20 20 20 20 20 20 53 70 65 63 69 66 79  .        Specify
0870: 20 74 68 69 73 20 66 6c 61 67 20 69 66 20 79 6f   this flag if yo
0880: 75 20 64 6f 6e 27 74 20 77 68 61 74 20 74 68 65  u don't what the
0890: 20 6f 75 74 70 75 74 20 74 6f 20 65 6e 64 20 77   output to end w
08a0: 69 74 68 20 4e 65 77 4c 69 6e 65 20 63 68 61 72  ith NewLine char
08b0: 61 63 74 65 72 0d 0a 0d 0a 20 20 20 20 2e 50 41  acter....    .PA
08c0: 52 41 4d 45 54 45 52 20 46 6f 72 65 67 72 6f 75  RAMETER Foregrou
08d0: 6e 64 43 6f 6c 6f 72 0d 0a 20 20 20 20 20 20 20  ndColor..       
08e0: 20 53 70 65 63 69 66 69 65 73 20 74 68 65 20 74   Specifies the t
08f0: 65 78 74 20 63 6f 6c 6f 72 2e 20 54 68 65 72 65  ext color. There
0900: 20 69 73 20 6e 6f 20 64 65 66 61 75 6c 74 2e 0d   is no default..
0910: 0a 20 20 20 20 20 20 20 20 55 73 65 20 47 65 74  .        Use Get
0920: 2d 43 6f 6c 6f 72 73 20 63 6f 6d 6d 61 6e 64 20  -Colors command 
0930: 74 6f 20 6f 75 74 70 75 74 20 61 6c 6c 20 61 76  to output all av
0940: 61 69 6c 61 62 6c 65 20 63 6f 6c 6f 72 73 20 69  ailable colors i
0950: 6e 20 63 6f 6c 6f 72 2e 0d 0a 0d 0a 20 20 20 20  n color.....    
0960: 20 20 20 20 50 6f 73 73 69 62 6c 65 20 63 6f 6c      Possible col
0970: 6f 72 20 6e 61 6d 65 73 20 74 61 6b 65 6e 20 66  or names taken f
0980: 72 6f 6d 20 27 5b 43 6f 6e 73 6f 6c 65 43 6f 6c  rom '[ConsoleCol
0990: 6f 72 5d 20 7c 20 67 6d 20 2d 53 74 61 74 69 63  or] | gm -Static
09a0: 27 20 61 72 65 3a 0d 0a 20 20 20 20 20 20 20 20  ' are:..        
09b0: 20 20 20 20 42 6c 75 65 20 20 20 20 7c 20 44 61      Blue    | Da
09c0: 72 6b 42 6c 75 65 0d 0a 20 20 20 20 20 20 20 20  rkBlue..        
09d0: 20 20 20 20 43 79 61 6e 20 20 20 20 7c 20 44 61      Cyan    | Da
09e0: 72 6b 43 79 61 6e 0d 0a 20 20 20 20 20 20 20 20  rkCyan..        
09f0: 20 20 20 20 47 72 61 79 20 20 20 20 7c 20 44 61      Gray    | Da
0a00: 72 6b 47 72 61 79 0d 0a 20 20 20 20 20 20 20 20  rkGray..        
0a10: 20 20 20 20 47 72 65 65 6e 20 20 20 7c 20 44 61      Green   | Da
0a20: 72 6b 47 72 65 65 6e 0d 0a 20 20 20 20 20 20 20  rkGreen..       
0a30: 20 20 20 20 20 4d 61 67 65 6e 74 61 20 7c 20 44       Magenta | D
0a40: 61 72 6b 4d 61 67 65 6e 74 61 0d 0a 20 20 20 20  arkMagenta..    
0a50: 20 20 20 20 20 20 20 20 52 65 64 20 20 20 20 20          Red     
0a60: 7c 20 44 61 72 6b 52 65 64 0d 0a 20 20 20 20 20  | DarkRed..     
0a70: 20 20 20 20 20 20 20 59 65 6c 6c 6f 77 20 20 7c         Yellow  |
0a80: 20 44 61 72 6b 59 65 6c 6c 6f 77 0d 0a 20 20 20   DarkYellow..   
0a90: 20 20 20 20 20 20 20 20 20 57 68 69 74 65 20 20           White  
0aa0: 20 7c 20 42 6c 61 63 6b 0d 0a 0d 0a 20 20 20 20   | Black....    
0ab0: 2e 50 41 52 41 4d 45 54 45 52 20 42 61 63 6b 67  .PARAMETER Backg
0ac0: 72 6f 75 6e 64 43 6f 6c 6f 72 0d 0a 20 20 20 20  roundColor..    
0ad0: 20 20 20 20 53 70 65 63 69 66 69 65 73 20 74 68      Specifies th
0ae0: 65 20 62 61 63 6b 67 72 6f 75 6e 64 20 63 6f 6c  e background col
0af0: 6f 72 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20  or. There is no 
0b00: 64 65 66 61 75 6c 74 2e 0d 0a 20 20 20 20 20 20  default...      
0b10: 20 20 55 73 65 20 47 65 74 2d 43 6f 6c 6f 72 73    Use Get-Colors
0b20: 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 6f 75 74 70   command to outp
0b30: 75 74 20 61 6c 6c 20 61 76 61 69 6c 61 62 6c 65  ut all available
0b40: 20 63 6f 6c 6f 72 73 20 69 6e 20 63 6f 6c 6f 72   colors in color
0b50: 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 50 6f 73  .....        Pos
0b60: 73 69 62 6c 65 20 63 6f 6c 6f 72 20 6e 61 6d 65  sible color name
0b70: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 27 5b 43  s taken from '[C
0b80: 6f 6e 73 6f 6c 65 43 6f 6c 6f 72 5d 20 7c 20 67  onsoleColor] | g
0b90: 6d 20 2d 53 74 61 74 69 63 27 20 61 72 65 3a 0d  m -Static' are:.
0ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 42 6c 75  .            Blu
0bb0: 65 20 20 20 20 7c 20 44 61 72 6b 42 6c 75 65 0d  e    | DarkBlue.
0bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 79 61  .            Cya
0bd0: 6e 20 20 20 20 7c 20 44 61 72 6b 43 79 61 6e 0d  n    | DarkCyan.
0be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 72 61  .            Gra
0bf0: 79 20 20 20 20 7c 20 44 61 72 6b 47 72 61 79 0d  y    | DarkGray.
0c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 72 65  .            Gre
0c10: 65 6e 20 20 20 7c 20 44 61 72 6b 47 72 65 65 6e  en   | DarkGreen
0c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61  ..            Ma
0c30: 67 65 6e 74 61 20 7c 20 44 61 72 6b 4d 61 67 65  genta | DarkMage
0c40: 6e 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nta..           
0c50: 20 52 65 64 20 20 20 20 20 7c 20 44 61 72 6b 52   Red     | DarkR
0c60: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
0c70: 59 65 6c 6c 6f 77 20 20 7c 20 44 61 72 6b 59 65  Yellow  | DarkYe
0c80: 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 20 20 20 20  llow..          
0c90: 20 20 57 68 69 74 65 20 20 20 7c 20 42 6c 61 63    White   | Blac
0ca0: 6b 0d 0a 0d 0a 20 20 20 20 2e 45 58 41 4d 50 4c  k....    .EXAMPL
0cb0: 45 0d 0a 20 20 20 20 20 20 20 20 57 72 69 74 65  E..        Write
0cc0: 2d 43 6f 6e 73 6f 6c 65 20 22 3d 29 22 2c 20 22  -Console "=)", "
0cd0: 74 65 73 74 22 20 2d 46 6f 72 65 67 72 6f 75 6e  test" -Foregroun
0ce0: 64 43 6f 6c 6f 72 20 47 72 65 65 6e 20 2d 4e 6f  dColor Green -No
0cf0: 4e 65 77 4c 69 6e 65 0d 0a 0d 0a 20 20 20 20 20  NewLine....     
0d00: 20 20 20 50 72 69 6e 74 73 20 61 6c 6c 20 69 74     Prints all it
0d10: 65 6d 73 20 69 6e 20 70 61 73 73 65 64 20 73 74  ems in passed st
0d20: 72 69 6e 67 20 61 72 72 61 79 20 74 6f 20 73 74  ring array to st
0d30: 64 6f 75 74 20 77 69 74 68 20 67 72 65 65 6e 20  dout with green 
0d40: 63 6f 6c 6f 72 20 75 73 65 64 20 69 6e 20 63 6f  color used in co
0d50: 6e 73 6f 6c 65 2e 0d 0a 0d 0a 20 20 20 20 2e 4c  nsole.....    .L
0d60: 49 4e 4b 0d 0a 20 20 20 20 20 20 20 20 57 72 69  INK..        Wri
0d70: 74 65 2d 43 6f 6c 6f 72 69 7a 65 64 0d 0a 20 20  te-Colorized..  
0d80: 20 20 20 20 20 20 57 72 69 74 65 2d 48 6f 73 74        Write-Host
0d90: 0d 0a 20 20 20 20 20 20 20 20 47 65 74 2d 43 6f  ..        Get-Co
0da0: 6c 6f 72 73 0d 0a 20 20 20 20 23 3e 0d 0a 0d 0a  lors..    #>....
0db0: 20 20 20 20 70 61 72 61 6d 0d 0a 20 20 20 20 28      param..    (
0dc0: 0d 0a 20 20 20 20 20 20 20 20 5b 50 61 72 61 6d  ..        [Param
0dd0: 65 74 65 72 28 4d 61 6e 64 61 74 6f 72 79 20 3d  eter(Mandatory =
0de0: 20 24 74 72 75 65 2c 20 50 6f 73 69 74 69 6f 6e   $true, Position
0df0: 20 3d 20 30 2c 20 56 61 6c 75 65 46 72 6f 6d 52   = 0, ValueFromR
0e00: 65 6d 61 69 6e 69 6e 67 41 72 67 75 6d 65 6e 74  emainingArgument
0e10: 73 20 3d 20 24 74 72 75 65 2c 20 56 61 6c 75 65  s = $true, Value
0e20: 46 72 6f 6d 50 69 70 65 6c 69 6e 65 20 3d 20 24  FromPipeline = $
0e30: 74 72 75 65 29 5d 0d 0a 20 20 20 20 20 20 20 20  true)]..        
0e40: 5b 6f 62 6a 65 63 74 5d 20 24 4f 62 6a 65 63 74  [object] $Object
0e50: 2c 0d 0a 20 20 20 20 20 20 20 20 5b 6f 62 6a 65  ,..        [obje
0e60: 63 74 5d 20 24 53 65 70 61 72 61 74 6f 72 20 3d  ct] $Separator =
0e70: 20 22 20 22 2c 0d 0a 20 20 20 20 20 20 20 20 5b   " ",..        [
0e80: 43 6f 6e 73 6f 6c 65 43 6f 6c 6f 72 5d 20 24 46  ConsoleColor] $F
0e90: 6f 72 65 67 72 6f 75 6e 64 43 6f 6c 6f 72 2c 0d  oregroundColor,.
0ea0: 0a 20 20 20 20 20 20 20 20 5b 43 6f 6e 73 6f 6c  .        [Consol
0eb0: 65 43 6f 6c 6f 72 5d 20 24 42 61 63 6b 67 72 6f  eColor] $Backgro
0ec0: 75 6e 64 43 6f 6c 6f 72 2c 0d 0a 20 20 20 20 20  undColor,..     
0ed0: 20 20 20 5b 73 77 69 74 63 68 5d 20 24 4e 6f 4e     [switch] $NoN
0ee0: 65 77 4c 69 6e 65 0d 0a 20 20 20 20 29 0d 0a 0d  ewLine..    )...
0ef0: 0a 20 20 20 20 62 65 67 69 6e 0d 0a 20 20 20 20  .    begin..    
0f00: 7b 0d 0a 20 20 20 20 20 20 20 20 66 75 6e 63 74  {..        funct
0f10: 69 6f 6e 20 70 72 69 6e 74 4f 62 6a 65 63 74 28  ion printObject(
0f20: 24 6f 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  $o)..        {..
0f30: 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6e 63              func
0f40: 74 69 6f 6e 20 57 72 69 74 65 4f 62 6a 65 63 74  tion WriteObject
0f50: 28 5b 73 74 72 69 6e 67 5d 24 73 29 0d 0a 20 20  ([string]$s)..  
0f60: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
0f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
0f80: 28 24 73 2e 4c 65 6e 67 74 68 20 2d 67 74 20 30  ($s.Length -gt 0
0f90: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
0fa0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
0fb0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 24 63            if ($c
0fc0: 6f 6e 73 6f 6c 65 48 6f 73 74 29 20 7b 0d 0a 20  onsoleHost) {.. 
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fe0: 20 20 20 20 20 20 20 5b 43 6f 6e 73 6f 6c 65 5d         [Console]
0ff0: 3a 3a 57 72 69 74 65 28 24 73 29 3b 0d 0a 20 20  ::Write($s);..  
1000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1010: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..    
1020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1030: 20 20 20 20 24 68 6f 73 74 2e 55 49 2e 57 72 69      $host.UI.Wri
1040: 74 65 28 24 46 6f 72 65 67 72 6f 75 6e 64 43 6f  te($ForegroundCo
1050: 6c 6f 72 2c 20 24 42 61 63 6b 67 72 6f 75 6e 64  lor, $Background
1060: 43 6f 6c 6f 72 2c 20 24 73 29 0d 0a 20 20 20 20  Color, $s)..    
1070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1080: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1090: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
10a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
10b0: 20 20 20 23 20 49 66 20 6e 75 6c 6c 2c 20 65 78     # If null, ex
10c0: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  it...           
10d0: 20 69 66 20 28 24 6f 20 2d 65 71 20 24 6e 75 6c   if ($o -eq $nul
10e0: 6c 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  l) {..          
10f0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20        return;.. 
1100: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1110: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 49 66              # If
1120: 20 74 79 70 65 20 69 73 20 64 69 72 65 63 74 6c   type is directl
1130: 79 20 61 20 73 74 72 69 6e 67 2c 20 77 72 69 74  y a string, writ
1140: 65 20 69 74 20 64 69 72 65 63 74 6c 79 2e 0d 0a  e it directly...
1150: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1160: 24 6f 20 2d 69 73 20 5b 73 74 72 69 6e 67 5d 29  $o -is [string])
1170: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1180: 20 20 20 20 57 72 69 74 65 4f 62 6a 65 63 74 20      WriteObject 
1190: 24 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  $o..            
11a0: 7d 20 65 6c 73 65 20 7b 0d 0a 0d 0a 20 20 20 20  } else {....    
11b0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4f 62              # Ob
11c0: 6a 65 63 74 20 69 73 20 6e 6f 74 20 61 20 73 74  ject is not a st
11d0: 72 69 6e 67 2e 20 53 65 65 20 69 66 20 69 74 20  ring. See if it 
11e0: 69 73 20 65 6e 75 6d 65 72 61 62 6c 65 2e 0d 0a  is enumerable...
11f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1200: 69 66 20 28 24 6f 20 2d 69 73 20 5b 53 79 73 74  if ($o -is [Syst
1210: 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 49  em.Collections.I
1220: 45 6e 75 6d 65 72 61 62 6c 65 5d 29 20 7b 0d 0a  Enumerable]) {..
1230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1240: 20 20 20 20 23 20 41 63 63 65 73 73 20 74 68 65      # Access the
1250: 20 65 6e 75 6d 65 72 61 74 6f 72 20 61 6e 64 20   enumerator and 
1260: 70 72 69 6e 74 20 65 61 63 68 20 69 74 65 6d 20  print each item 
1270: 77 69 74 68 20 61 6e 79 20 64 65 66 69 6e 65 64  with any defined
1280: 20 73 65 70 61 72 61 74 69 6f 6e 2e 0d 0a 20 20   separation...  
1290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a0: 20 20 24 6f 62 6a 65 63 74 45 6e 75 6d 65 72 61    $objectEnumera
12b0: 74 6f 72 20 3d 20 24 6f 2e 47 65 74 45 6e 75 6d  tor = $o.GetEnum
12c0: 65 72 61 74 6f 72 28 29 3b 0d 0a 20 20 20 20 20  erator();..     
12d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $
12e0: 70 72 69 6e 74 53 65 70 61 72 61 74 6f 72 20 3d  printSeparator =
12f0: 20 24 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20   $false;..      
1300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
1310: 72 65 61 63 68 20 28 24 65 6c 65 6d 65 6e 74 20  reach ($element 
1320: 69 6e 20 24 6f 62 6a 65 63 74 45 6e 75 6d 65 72  in $objectEnumer
1330: 61 74 6f 72 29 20 7b 0d 0a 0d 0a 20 20 20 20 20  ator) {....     
1340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1350: 20 20 20 23 20 49 66 20 73 65 70 61 72 61 74 6f     # If separato
1360: 72 20 64 65 66 69 6e 65 64 2c 20 70 72 69 6e 74  r defined, print
1370: 20 69 74 20 69 66 20 74 68 69 73 20 69 73 20 6e   it if this is n
1380: 6f 74 20 66 69 72 73 74 20 69 74 65 6d 2e 0d 0a  ot first item...
1390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a0: 20 20 20 20 20 20 20 20 69 66 20 28 24 53 65 70          if ($Sep
13b0: 61 72 61 74 6f 72 20 2d 6e 65 20 24 6e 75 6c 6c  arator -ne $null
13c0: 20 2d 61 6e 64 20 24 70 72 69 6e 74 53 65 70 61   -and $printSepa
13d0: 72 61 74 6f 72 29 20 7b 0d 0a 20 20 20 20 20 20  rator) {..      
13e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f0: 20 20 20 20 20 20 57 72 69 74 65 4f 62 6a 65 63        WriteObjec
1400: 74 20 24 53 65 70 61 72 61 74 6f 72 0d 0a 20 20  t $Separator..  
1410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1420: 20 20 20 20 20 20 7d 20 0d 0a 0d 0a 20 20 20 20        } ....    
1430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1440: 20 20 20 20 23 20 52 65 63 75 72 73 69 76 65 2e      # Recursive.
1450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1460: 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 4f            printO
1470: 62 6a 65 63 74 20 24 65 6c 65 6d 65 6e 74 0d 0a  bject $element..
1480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1490: 20 20 20 20 20 20 20 20 20 20 23 20 50 72 69 6e            # Prin
14a0: 74 20 73 65 70 61 72 61 74 6f 72 20 61 66 74 65  t separator afte
14b0: 72 20 66 69 72 73 74 20 69 74 65 6d 2e 20 0d 0a  r first item. ..
14c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d0: 20 20 20 20 20 20 20 20 24 70 72 69 6e 74 53 65          $printSe
14e0: 70 61 72 61 74 6f 72 20 3d 20 24 74 72 75 65 3b  parator = $true;
14f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1500: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1510: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
1520: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1530: 20 20 20 0d 0a 20 20 20 20 20 20 20 20 20 20 20     ..           
1540: 20 20 20 20 20 20 20 20 20 23 20 4f 62 6a 65 63           # Objec
1550: 74 20 77 61 73 20 6e 6f 74 20 61 20 73 74 72 69  t was not a stri
1560: 6e 67 2c 20 61 6e 64 20 69 74 20 64 69 64 20 6e  ng, and it did n
1570: 6f 74 20 68 61 76 65 20 61 0d 0a 20 20 20 20 20  ot have a..     
1580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
1590: 20 47 65 74 45 6e 75 6d 65 72 61 74 6f 72 28 29   GetEnumerator()
15a0: 20 6d 65 74 68 6f 64 2c 20 73 6f 20 73 69 6d 70   method, so simp
15b0: 6c 79 20 75 73 65 20 74 68 65 20 6f 62 6a 65 63  ly use the objec
15c0: 74 27 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t's..           
15d0: 20 20 20 20 20 20 20 20 20 23 20 54 6f 53 74 72           # ToStr
15e0: 69 6e 67 28 29 20 6d 65 74 68 6f 64 20 74 6f 20  ing() method to 
15f0: 61 63 63 65 73 73 20 74 68 65 20 70 72 69 6e 74  access the print
1600: 61 62 6c 65 20 63 6f 6e 74 65 6e 74 2e 0d 0a 20  able content... 
1610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1620: 20 20 20 57 72 69 74 65 4f 62 6a 65 63 74 20 24     WriteObject $
1630: 6f 2e 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20  o.ToString()..  
1640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1660: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1670: 20 20 20 20 20 24 63 6f 6e 73 6f 6c 65 48 6f 73       $consoleHos
1680: 74 20 3d 20 24 68 6f 73 74 2e 4e 61 6d 65 20 2d  t = $host.Name -
1690: 65 71 20 22 43 6f 6e 73 6f 6c 65 48 6f 73 74 22  eq "ConsoleHost"
16a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24  ..        if (!$
16b0: 63 6f 6e 73 6f 6c 65 48 6f 73 74 29 0d 0a 20 20  consoleHost)..  
16c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16d0: 20 20 20 20 20 69 66 20 28 21 24 46 6f 72 65 67       if (!$Foreg
16e0: 72 6f 75 6e 64 43 6f 6c 6f 72 29 0d 0a 20 20 20  roundColor)..   
16f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1700: 20 20 20 20 20 20 20 20 20 20 20 20 24 46 6f 72              $For
1710: 65 67 72 6f 75 6e 64 43 6f 6c 6f 72 20 3d 20 24  egroundColor = $
1720: 68 6f 73 74 2e 55 49 2e 52 61 77 55 49 2e 46 6f  host.UI.RawUI.Fo
1730: 72 65 67 72 6f 75 6e 64 43 6f 6c 6f 72 0d 0a 20  regroundColor.. 
1740: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1750: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 24            if (!$
1760: 42 61 63 6b 67 72 6f 75 6e 64 43 6f 6c 6f 72 29  BackgroundColor)
1770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1790: 20 24 42 61 63 6b 67 72 6f 75 6e 64 43 6f 6c 6f   $BackgroundColo
17a0: 72 20 3d 20 24 68 6f 73 74 2e 75 69 2e 52 61 77  r = $host.ui.Raw
17b0: 55 49 2e 42 61 63 6b 67 72 6f 75 6e 64 43 6f 6c  UI.BackgroundCol
17c0: 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
17d0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
17e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 63 65    }....    proce
17f0: 73 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ss..    {..     
1800: 20 20 20 69 66 20 28 24 63 6f 6e 73 6f 6c 65 48     if ($consoleH
1810: 6f 73 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ost)..        {.
1820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
1830: 20 24 46 6f 72 65 67 72 6f 75 6e 64 43 6f 6c 6f   $ForegroundColo
1840: 72 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r )..           
1850: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1860: 20 20 20 20 24 70 72 65 76 69 6f 75 73 46 6f 72      $previousFor
1870: 65 67 72 6f 75 6e 64 43 6f 6c 6f 72 20 3d 20 5b  egroundColor = [
1880: 43 6f 6e 73 6f 6c 65 5d 3a 3a 46 6f 72 65 67 72  Console]::Foregr
1890: 6f 75 6e 64 43 6f 6c 6f 72 0d 0a 20 20 20 20 20  oundColor..     
18a0: 20 20 20 20 20 20 20 20 20 20 20 5b 43 6f 6e 73             [Cons
18b0: 6f 6c 65 5d 3a 3a 46 6f 72 65 67 72 6f 75 6e 64  ole]::Foreground
18c0: 43 6f 6c 6f 72 20 3d 20 24 46 6f 72 65 67 72 6f  Color = $Foregro
18d0: 75 6e 64 43 6f 6c 6f 72 0d 0a 20 20 20 20 20 20  undColor..      
18e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
18f0: 20 20 20 20 20 20 20 69 66 28 20 24 42 61 63 6b         if( $Back
1900: 67 72 6f 75 6e 64 43 6f 6c 6f 72 20 29 0d 0a 20  groundColor ).. 
1910: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70                $p
1930: 72 65 76 69 6f 75 73 42 61 63 6b 67 72 6f 75 6e  reviousBackgroun
1940: 64 43 6f 6c 6f 72 20 3d 20 5b 43 6f 6e 73 6f 6c  dColor = [Consol
1950: 65 5d 3a 3a 42 61 63 6b 67 72 6f 75 6e 64 43 6f  e]::BackgroundCo
1960: 6c 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lor..           
1970: 20 20 20 20 20 5b 43 6f 6e 73 6f 6c 65 5d 3a 3a       [Console]::
1980: 42 61 63 6b 67 72 6f 75 6e 64 43 6f 6c 6f 72 20  BackgroundColor 
1990: 3d 20 24 42 61 63 6b 67 72 6f 75 6e 64 43 6f 6c  = $BackgroundCol
19a0: 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
19b0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
19c0: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
19d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19e0: 20 20 20 20 70 72 69 6e 74 4f 62 6a 65 63 74 20      printObject 
19f0: 24 4f 62 6a 65 63 74 20 24 63 6f 6e 73 6f 6c 65  $Object $console
1a00: 48 6f 73 74 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Host....        
1a10: 20 20 20 20 69 66 28 20 24 4e 6f 4e 65 77 4c 69      if( $NoNewLi
1a20: 6e 65 20 2d 65 71 20 24 66 61 6c 73 65 29 0d 0a  ne -eq $false)..
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
1a50: 43 6f 6e 73 6f 6c 65 5d 3a 3a 57 72 69 74 65 4c  Console]::WriteL
1a60: 69 6e 65 28 27 27 29 20 23 20 50 61 72 61 6d 65  ine('') # Parame
1a70: 74 65 72 6c 65 73 73 20 57 72 69 74 65 4c 69 6e  terless WriteLin
1a80: 65 20 73 65 65 6d 73 20 74 6f 20 6e 6f 74 20 70  e seems to not p
1a90: 72 69 6e 74 20 61 20 6e 65 77 6c 69 6e 65 20 66  rint a newline f
1aa0: 72 6f 6d 20 49 53 45 20 77 68 65 72 65 61 73 20  rom ISE whereas 
1ab0: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 77 6f 72  empty string wor
1ac0: 6b 73 20 6f 6e 20 62 6f 74 68 20 63 6d 64 20 6c  ks on both cmd l
1ad0: 69 6e 65 2f 49 53 45 2e 0d 0a 20 20 20 20 20 20  ine/ISE...      
1ae0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1af0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
1b00: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b  nally..        {
1b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1b20: 20 28 24 63 6f 6e 73 6f 6c 65 48 6f 73 74 29 0d   ($consoleHost).
1b30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b50: 69 66 28 20 24 46 6f 72 65 67 72 6f 75 6e 64 43  if( $ForegroundC
1b60: 6f 6c 6f 72 20 29 0d 0a 20 20 20 20 20 20 20 20  olor )..        
1b70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
1b90: 43 6f 6e 73 6f 6c 65 5d 3a 3a 46 6f 72 65 67 72  Console]::Foregr
1ba0: 6f 75 6e 64 43 6f 6c 6f 72 20 3d 20 24 70 72 65  oundColor = $pre
1bb0: 76 69 6f 75 73 46 6f 72 65 67 72 6f 75 6e 64 43  viousForegroundC
1bc0: 6f 6c 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  olor..          
1bd0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1be0: 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 24             if( $
1bf0: 42 61 63 6b 67 72 6f 75 6e 64 43 6f 6c 6f 72 20  BackgroundColor 
1c00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1c20: 20 20 20 20 20 20 20 20 20 20 5b 43 6f 6e 73 6f            [Conso
1c30: 6c 65 5d 3a 3a 42 61 63 6b 67 72 6f 75 6e 64 43  le]::BackgroundC
1c40: 6f 6c 6f 72 20 3d 20 24 70 72 65 76 69 6f 75 73  olor = $previous
1c50: 42 61 63 6b 67 72 6f 75 6e 64 43 6f 6c 6f 72 0d  BackgroundColor.
1c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1c80: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
1c90: 20 20 7d 0d 0a 7d 0d 0a 0d 0a 23 20 53 69 6d 70    }..}....# Simp
1ca0: 6c 65 20 74 65 73 74 2e 2e 2e 0d 0a 66 75 6e 63  le test.....func
1cb0: 74 69 6f 6e 20 54 65 73 74 2d 57 72 69 74 65 43  tion Test-WriteC
1cc0: 6f 6e 73 6f 6c 65 20 7b 0d 0a 0d 0a 20 20 20 20  onsole {....    
1cd0: 57 72 69 74 65 2d 48 6f 73 74 20 20 27 6e 65 77  Write-Host  'new
1ce0: 20 63 6f 6e 73 6f 6c 65 20 77 72 69 74 65 27 3b   console write';
1cf0: 0d 0a 20 20 20 20 57 72 69 74 65 2d 48 6f 73 74  ..    Write-Host
1d00: 20 20 40 28 31 2c 32 2c 33 2c 34 29 20 2d 53 65    @(1,2,3,4) -Se
1d10: 70 61 72 61 74 6f 72 20 27 2d 73 65 70 2d 27 0d  parator '-sep-'.
1d20: 0a 20 20 20 20 57 72 69 74 65 2d 48 6f 73 74 20  .    Write-Host 
1d30: 20 40 28 31 2c 32 2c 33 2c 34 29 20 2d 53 65 70   @(1,2,3,4) -Sep
1d40: 61 72 61 74 6f 72 20 27 2d 73 65 70 2d 27 20 2d  arator '-sep-' -
1d50: 46 6f 72 65 67 72 6f 75 6e 64 43 6f 6c 6f 72 20  ForegroundColor 
1d60: 59 65 6c 6c 6f 77 0d 0a 20 20 20 20 57 72 69 74  Yellow..    Writ
1d70: 65 2d 48 6f 73 74 20 20 40 28 31 2c 32 2c 33 2c  e-Host  @(1,2,3,
1d80: 34 29 20 2d 53 65 70 61 72 61 74 6f 72 20 27 2d  4) -Separator '-
1d90: 73 65 70 2d 27 20 2d 46 6f 72 65 67 72 6f 75 6e  sep-' -Foregroun
1da0: 64 43 6f 6c 6f 72 20 42 6c 61 63 6b 20 2d 42 61  dColor Black -Ba
1db0: 63 6b 67 72 6f 75 6e 64 43 6f 6c 6f 72 20 57 68  ckgroundColor Wh
1dc0: 69 74 65 0d 0a 20 20 20 20 57 72 69 74 65 2d 48  ite..    Write-H
1dd0: 6f 73 74 20 20 28 5b 69 6e 74 33 32 5d 31 32 33  ost  ([int32]123
1de0: 29 20 2d 53 65 70 61 72 61 74 6f 72 20 27 2d 73  ) -Separator '-s
1df0: 65 70 2d 27 20 2d 46 6f 72 65 67 72 6f 75 6e 64  ep-' -Foreground
1e00: 43 6f 6c 6f 72 20 43 79 61 6e 20 2d 42 61 63 6b  Color Cyan -Back
1e10: 67 72 6f 75 6e 64 43 6f 6c 6f 72 20 44 61 72 6b  groundColor Dark
1e20: 47 72 65 65 6e 0d 0a 20 20 20 20 57 72 69 74 65  Green..    Write
1e30: 2d 48 6f 73 74 20 20 27 31 32 33 27 20 2d 53 65  -Host  '123' -Se
1e40: 70 61 72 61 74 6f 72 20 27 2d 73 65 70 2d 27 20  parator '-sep-' 
1e50: 2d 46 6f 72 65 67 72 6f 75 6e 64 43 6f 6c 6f 72  -ForegroundColor
1e60: 20 47 72 65 65 6e 20 2d 42 61 63 6b 67 72 6f 75   Green -Backgrou
1e70: 6e 64 43 6f 6c 6f 72 20 42 6c 61 63 6b 0d 0a 20  ndColor Black.. 
1e80: 20 20 20 57 72 69 74 65 2d 48 6f 73 74 20 20 40     Write-Host  @
1e90: 28 5b 69 6e 74 33 32 5d 31 32 33 2c 5b 69 6e 74  ([int32]123,[int
1ea0: 33 32 5d 31 32 33 2c 5b 69 6e 74 33 32 5d 31 32  32]123,[int32]12
1eb0: 33 2c 5b 69 6e 74 33 32 5d 31 32 33 2c 5b 69 6e  3,[int32]123,[in
1ec0: 74 33 32 5d 31 32 33 29 20 2d 53 65 70 61 72 61  t32]123) -Separa
1ed0: 74 6f 72 20 27 2d 73 65 70 2d 27 20 2d 46 6f 72  tor '-sep-' -For
1ee0: 65 67 72 6f 75 6e 64 43 6f 6c 6f 72 20 43 79 61  egroundColor Cya
1ef0: 6e 20 2d 42 61 63 6b 67 72 6f 75 6e 64 43 6f 6c  n -BackgroundCol
1f00: 6f 72 20 44 61 72 6b 47 72 65 65 6e 0d 0a 20 20  or DarkGreen..  
1f10: 20 20 57 72 69 74 65 2d 48 6f 73 74 20 27 54 68    Write-Host 'Th
1f20: 69 73 20 69 73 20 6f 6e 65 20 77 72 69 74 65 2e  is is one write.
1f30: 20 27 20 2d 4e 6f 4e 65 77 4c 69 6e 65 3b 0d 0a   ' -NoNewLine;..
1f40: 20 20 20 20 57 72 69 74 65 2d 48 6f 73 74 20 27      Write-Host '
1f50: 54 68 69 73 20 69 73 20 61 6e 6f 74 68 65 72 20  This is another 
1f60: 77 72 69 74 65 20 6f 6e 20 74 68 65 20 73 61 6d  write on the sam
1f70: 65 20 6c 69 6e 65 2e 20 27 20 2d 4e 6f 4e 65 77  e line. ' -NoNew
1f80: 4c 69 6e 65 20 2d 46 6f 72 65 67 72 6f 75 6e 64  Line -Foreground
1f90: 43 6f 6c 6f 72 20 42 6c 61 63 6b 20 2d 42 61 63  Color Black -Bac
1fa0: 6b 67 72 6f 75 6e 64 43 6f 6c 6f 72 20 57 68 69  kgroundColor Whi
1fb0: 74 65 0d 0a 20 20 20 20 57 72 69 74 65 2d 48 6f  te..    Write-Ho
1fc0: 73 74 20 40 28 27 61 62 63 27 2c 20 5b 75 69 6e  st @('abc', [uin
1fd0: 74 33 32 5d 31 32 33 2c 20 27 64 65 66 27 2c 20  t32]123, 'def', 
1fe0: 27 20 61 72 72 61 79 20 6f 6e 20 73 61 6d 65 20  ' array on same 
1ff0: 6c 69 6e 65 2e 20 27 29 20 2d 53 65 70 61 72 61  line. ') -Separa
2000: 74 6f 72 20 27 2c 27 20 2d 4e 6f 4e 65 77 4c 69  tor ',' -NoNewLi
2010: 6e 65 20 2d 46 6f 72 65 67 72 6f 75 6e 64 43 6f  ne -ForegroundCo
2020: 6c 6f 72 20 43 79 61 6e 20 2d 42 61 63 6b 67 72  lor Cyan -Backgr
2030: 6f 75 6e 64 43 6f 6c 6f 72 20 44 61 72 6b 4d 61  oundColor DarkMa
2040: 67 65 6e 74 61 0d 0a 20 20 20 20 57 72 69 74 65  genta..    Write
2050: 2d 48 6f 73 74 20 27 54 68 69 73 20 69 73 20 74  -Host 'This is t
2060: 68 65 20 6c 61 73 74 20 73 65 6e 74 65 6e 63 65  he last sentence
2070: 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 2e 27 0d   on this line.'.
2080: 0a 20 20 20 20 57 72 69 74 65 2d 48 6f 73 74 20  .    Write-Host 
2090: 27 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20  'This should be 
20a0: 6f 6e 20 61 20 6e 65 77 20 6c 69 6e 65 2e 27 3b  on a new line.';
20b0: 0d 0a 20 20 20 20 31 2e 2e 35 20 7c 20 57 72 69  ..    1..5 | Wri
20c0: 74 65 2d 48 6f 73 74 0d 0a 20 20 20 20 57 72 69  te-Host..    Wri
20d0: 74 65 2d 48 6f 73 74 20 31 20 32 20 33 20 34 20  te-Host 1 2 3 4 
20e0: 35 0d 0a 7d 20 0d 0a 0d 0a 54 65 73 74 2d 57 72  5..} ....Test-Wr
20f0: 69 74 65 43 6f 6e 73 6f 6c 65 0d 0a              iteConsole..