PoshCode Archive  Hex Artifact Content

Artifact dc385ea82657507ab52c724b24d6a83c94985fbceb8d3b41f3b55375e4b522d4:

  • File Send-HL7Message.ps1 — part of check-in [5e9b1ff91d] at 2018-06-10 14:15:59 on branch trunk — Send HL7 message to a remote host via TCP (MLLP framing) (user: Rob Holme size: 3868)

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: 65 6e 64 2d 48 4c 37 4d 65 73 73 61 67 65 0d 0a  end-HL7Message..
0040: 23 20 64 65 73 63 72 69 70 74 69 6f 6e 3a 20 53  # description: S
0050: 65 6e 64 20 48 4c 37 20 6d 65 73 73 61 67 65 20  end HL7 message 
0060: 74 6f 20 61 20 72 65 6d 6f 74 65 20 68 6f 73 74  to a remote host
0070: 20 76 69 61 20 54 43 50 20 28 4d 4c 4c 50 20 66   via TCP (MLLP f
0080: 72 61 6d 69 6e 67 29 0d 0a 23 20 76 65 72 73 69  raming)..# versi
0090: 6f 6e 3a 20 31 2e 30 0d 0a 23 20 74 79 70 65 3a  on: 1.0..# type:
00a0: 20 73 63 72 69 70 74 0d 0a 23 20 61 75 74 68 6f   script..# autho
00b0: 72 3a 20 52 6f 62 20 48 6f 6c 6d 65 0d 0a 23 20  r: Rob Holme..# 
00c0: 6c 69 63 65 6e 73 65 3a 20 43 43 30 0d 0a 23 20  license: CC0..# 
00d0: 78 2d 70 6f 73 68 63 6f 64 65 2d 69 64 3a 20 36  x-poshcode-id: 6
00e0: 34 34 36 0d 0a 23 20 78 2d 61 72 63 68 69 76 65  446..# x-archive
00f0: 64 3a 20 32 30 31 36 2d 30 38 2d 31 39 54 30 35  d: 2016-08-19T05
0100: 3a 33 35 3a 32 30 0d 0a 23 20 78 2d 70 75 62 6c  :35:20..# x-publ
0110: 69 73 68 65 64 3a 20 32 30 31 36 2d 30 37 2d 31  ished: 2016-07-1
0120: 33 54 30 37 3a 30 32 3a 30 30 0d 0a 23 0d 0a 23  3T07:02:00..#..#
0130: 0d 0a 3c 23 20 0d 0a 2e 4e 4f 54 45 53 20 20 0d  ..<# ...NOTES  .
0140: 0a 20 20 20 20 46 69 6c 65 20 4e 61 6d 65 20 20  .    File Name  
0150: 3a 20 73 65 6e 64 2d 48 4c 37 4d 65 73 73 61 67  : send-HL7Messag
0160: 65 2e 70 73 31 20 20 0d 0a 20 20 20 20 41 75 74  e.ps1  ..    Aut
0170: 68 6f 72 20 20 20 20 20 3a 20 52 6f 62 20 48 6f  hor     : Rob Ho
0180: 6c 6d 65 20 28 72 6f 62 40 68 6f 6c 6d 65 2e 63  lme (rob@holme.c
0190: 6f 6d 2e 61 75 29 20 0d 0a 20 20 20 20 56 65 72  om.au) ..    Ver
01a0: 73 69 6f 6e 20 20 20 20 3a 20 31 2e 30 20 28 31  sion    : 1.0 (1
01b0: 32 2f 30 37 2f 32 30 31 36 29 0d 0a 20 20 20 20  2/07/2016)..    
01c0: 52 65 71 75 69 72 65 73 20 20 20 3a 20 50 6f 77  Requires   : Pow
01d0: 65 72 53 68 65 6c 6c 20 56 32 0d 0a 0d 0a 2e 53  erShell V2.....S
01e0: 59 4e 4f 50 53 49 53 20 20 0d 0a 20 20 20 20 53  YNOPSIS  ..    S
01f0: 65 6e 64 20 61 20 48 4c 37 20 6d 65 73 73 61 67  end a HL7 messag
0200: 65 20 76 69 61 20 54 43 50 20 74 6f 20 61 20 72  e via TCP to a r
0210: 65 6d 6f 74 65 20 68 6f 73 74 20 28 4d 4c 4c 50  emote host (MLLP
0220: 20 66 72 61 6d 69 6e 67 29 0d 0a 09 0d 0a 2e 44   framing)......D
0230: 45 53 43 52 49 50 54 49 4f 4e 20 20 0d 0a 20 20  ESCRIPTION  ..  
0240: 20 20 53 65 6e 64 20 61 20 48 4c 37 20 6d 65 73    Send a HL7 mes
0250: 73 61 67 65 20 76 69 61 20 54 43 50 20 74 6f 20  sage via TCP to 
0260: 61 20 72 65 6d 6f 74 65 20 68 6f 73 74 20 28 4d  a remote host (M
0270: 4c 4c 50 20 66 72 61 6d 69 6e 67 29 0d 0a 09 0d  LLP framing)....
0280: 0a 2e 50 41 52 41 4d 45 54 45 52 20 48 6f 73 74  ..PARAMETER Host
0290: 4e 61 6d 65 0d 0a 20 20 20 20 54 68 65 20 72 65  Name..    The re
02a0: 6d 6f 74 65 20 68 6f 73 74 6e 61 6d 65 20 6f 72  mote hostname or
02b0: 20 49 50 20 61 64 64 72 65 73 73 20 72 65 63 65   IP address rece
02c0: 69 76 69 6e 67 20 74 68 65 20 48 4c 37 20 6d 65  iving the HL7 me
02d0: 73 73 61 67 65 0d 0a 0d 0a 2e 50 41 52 41 4d 45  ssage.....PARAME
02e0: 54 45 52 20 50 6f 72 74 0d 0a 20 20 20 20 54 68  TER Port..    Th
02f0: 65 20 72 65 6d 6f 74 65 20 70 6f 72 74 20 6f 66  e remote port of
0300: 20 74 68 65 20 6c 69 73 74 65 6e 65 72 20 72 65   the listener re
0310: 63 65 69 76 69 6e 67 20 74 68 65 20 6d 65 73 73  ceiving the mess
0320: 61 67 65 0d 0a 0d 0a 2e 50 41 52 41 4d 45 54 45  age.....PARAMETE
0330: 52 20 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  R FileName..    
0340: 54 68 65 20 70 61 74 68 20 61 6e 64 20 6e 61 6d  The path and nam
0350: 65 20 6f 66 20 74 68 65 20 66 69 6c 65 20 74 6f  e of the file to
0360: 20 73 65 6e 64 0d 0a 0d 0a 2e 50 41 52 41 4d 45   send.....PARAME
0370: 54 45 52 20 4e 6f 41 43 4b 0d 0a 20 20 20 20 49  TER NoACK..    I
0380: 66 20 74 68 65 20 2d 4e 6f 41 63 6b 20 73 77 69  f the -NoAck swi
0390: 74 63 68 20 69 73 20 73 65 74 20 74 68 65 20 73  tch is set the s
03a0: 63 72 69 70 74 20 77 69 6c 6c 20 6e 6f 74 20 77  cript will not w
03b0: 61 69 74 20 74 6f 20 72 65 63 65 69 76 65 20 61  ait to receive a
03c0: 6e 20 41 43 4b 20 6d 65 73 73 61 67 65 20 66 72  n ACK message fr
03d0: 6f 6d 20 74 68 65 20 72 65 6d 6f 74 65 20 68 6f  om the remote ho
03e0: 73 74 2e 0d 0a 0d 0a 2e 45 58 41 4d 50 4c 45 0d  st......EXAMPLE.
03f0: 0a 20 20 20 20 2e 5c 73 65 6e 64 2d 48 4c 37 4d  .    .\send-HL7M
0400: 65 73 73 61 67 65 20 2d 48 6f 73 74 4e 61 6d 65  essage -HostName
0410: 20 31 32 37 2e 30 2e 30 2e 31 20 2d 50 6f 72 74   127.0.0.1 -Port
0420: 20 31 32 33 34 20 2d 46 69 6c 65 4e 61 6d 65 20   1234 -FileName 
0430: 63 3a 5c 74 65 73 74 5c 6d 65 73 73 61 67 65 2e  c:\test\message.
0440: 68 6c 37 0d 0a 20 20 20 20 23 20 73 65 6e 64 20  hl7..    # send 
0450: 74 68 65 20 66 69 6c 65 20 63 3a 5c 74 65 73 74  the file c:\test
0460: 5c 6d 65 73 73 61 67 65 2e 68 6c 37 20 74 6f 20  \message.hl7 to 
0470: 31 32 37 2e 30 2e 30 2e 31 3a 31 32 33 34 2c 20  127.0.0.1:1234, 
0480: 77 61 69 74 20 66 6f 72 20 41 43 4b 0d 0a 0d 0a  wait for ACK....
0490: 2e 45 58 41 4d 50 4c 45 0d 0a 20 20 20 20 2e 5c  .EXAMPLE..    .\
04a0: 73 65 6e 64 2d 48 4c 37 4d 65 73 73 61 67 65 20  send-HL7Message 
04b0: 31 32 37 2e 30 2e 30 2e 31 20 31 32 33 34 20 63  127.0.0.1 1234 c
04c0: 3a 5c 74 65 73 74 5c 6d 65 73 73 61 67 65 2e 68  :\test\message.h
04d0: 6c 37 20 2d 4e 6f 41 43 4b 20 0d 0a 20 20 20 20  l7 -NoACK ..    
04e0: 23 20 73 65 6e 64 20 74 68 65 20 66 69 6c 65 20  # send the file 
04f0: 63 3a 5c 74 65 73 74 5c 6d 65 73 73 61 67 65 2e  c:\test\message.
0500: 68 6c 37 20 74 6f 20 31 32 37 2e 30 2e 30 2e 31  hl7 to 127.0.0.1
0510: 3a 31 32 33 34 2c 20 69 67 6e 6f 72 65 20 41 43  :1234, ignore AC
0520: 4b 0d 0a 23 3e 0d 0a 0d 0a 5b 43 6d 64 6c 65 74  K..#>....[Cmdlet
0530: 42 69 6e 64 69 6e 67 28 29 5d 0d 0a 50 61 72 61  Binding()]..Para
0540: 6d 28 0d 0a 20 20 20 20 20 20 20 20 5b 70 61 72  m(..        [par
0550: 61 6d 65 74 65 72 28 4d 61 6e 64 61 74 6f 72 79  ameter(Mandatory
0560: 3d 24 74 72 75 65 2c 20 50 6f 73 69 74 69 6f 6e  =$true, Position
0570: 3d 30 29 5d 0d 0a 20 20 20 20 20 20 20 20 5b 73  =0)]..        [s
0580: 74 72 69 6e 67 5d 20 24 48 6f 73 74 4e 61 6d 65  tring] $HostName
0590: 2c 0d 0a 20 20 20 20 20 20 20 20 5b 70 61 72 61  ,..        [para
05a0: 6d 65 74 65 72 28 4d 61 6e 64 61 74 6f 72 79 3d  meter(Mandatory=
05b0: 24 74 72 75 65 2c 20 50 6f 73 69 74 69 6f 6e 3d  $true, Position=
05c0: 31 29 5d 0d 0a 20 20 20 20 20 20 20 20 5b 73 74  1)]..        [st
05d0: 72 69 6e 67 5d 20 24 50 6f 72 74 2c 0d 0a 20 20  ring] $Port,..  
05e0: 20 20 20 20 20 20 5b 70 61 72 61 6d 65 74 65 72        [parameter
05f0: 28 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 75 65  (Mandatory=$true
0600: 2c 20 50 6f 73 69 74 69 6f 6e 3d 33 29 5d 0d 0a  , Position=3)]..
0610: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 5d          [string]
0620: 20 24 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20   $FileName,..   
0630: 20 20 20 20 20 5b 70 61 72 61 6d 65 74 65 72 28       [parameter(
0640: 4d 61 6e 64 61 74 6f 72 79 3d 24 66 61 6c 73 65  Mandatory=$false
0650: 2c 20 50 6f 73 69 74 69 6f 6e 3d 34 29 5d 0d 0a  , Position=4)]..
0660: 20 20 20 20 20 20 20 20 5b 73 77 69 74 63 68 5d          [switch]
0670: 20 24 4e 6f 41 43 4b 0d 0a 29 0d 0a 0d 0a 23 20   $NoACK..)....# 
0680: 57 61 72 6e 20 69 66 20 74 68 65 20 66 69 6c 65  Warn if the file
0690: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e   does not exist.
06a0: 0d 0a 49 66 20 28 21 28 54 65 73 74 2d 50 61 74  ..If (!(Test-Pat
06b0: 68 20 24 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 7b  h $FileName))..{
06c0: 0d 0a 20 20 20 20 77 72 69 74 65 2d 4f 75 74 70  ..    write-Outp
06d0: 75 74 20 22 60 6e 45 72 72 6f 72 3a 20 54 68 65  ut "`nError: The
06e0: 20 66 69 6c 65 20 24 46 69 6c 65 4e 61 6d 65 20   file $FileName 
06f0: 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 22  does not exist."
0700: 0d 0a 20 20 20 20 72 65 74 75 72 6e 0d 0a 7d 0d  ..    return..}.
0710: 0a 0d 0a 23 20 66 72 61 6d 65 20 74 68 65 20 6d  ...# frame the m
0720: 65 73 73 61 67 65 20 75 73 69 6e 67 20 4d 4c 4c  essage using MLL
0730: 50 20 63 6f 6e 74 72 6f 6c 20 63 68 61 72 61 63  P control charac
0740: 74 65 72 73 0d 0a 24 6d 65 73 73 61 67 65 20 3d  ters..$message =
0750: 20 5b 63 68 61 72 5d 30 78 30 42 0d 0a 66 6f 72   [char]0x0B..for
0760: 65 61 63 68 20 28 24 6c 69 6e 65 20 69 6e 20 67  each ($line in g
0770: 65 74 2d 63 6f 6e 74 65 6e 74 20 24 46 69 6c 65  et-content $File
0780: 4e 61 6d 65 29 0d 0a 7b 20 0d 0a 20 20 20 20 24  Name)..{ ..    $
0790: 6d 65 73 73 61 67 65 20 2b 3d 20 24 6c 69 6e 65  message += $line
07a0: 0d 0a 20 20 20 20 24 6d 65 73 73 61 67 65 20 2b  ..    $message +
07b0: 3d 20 5b 63 68 61 72 5d 30 78 30 44 0d 0a 7d 0d  = [char]0x0D..}.
07c0: 0a 24 6d 65 73 73 61 67 65 20 2b 3d 20 5b 63 68  .$message += [ch
07d0: 61 72 5d 30 78 31 43 0d 0a 24 6d 65 73 73 61 67  ar]0x1C..$messag
07e0: 65 20 2b 3d 20 5b 63 68 61 72 5d 30 78 30 44 0d  e += [char]0x0D.
07f0: 0a 0d 0a 23 20 63 72 65 61 74 65 20 61 20 54 43  ...# create a TC
0800: 50 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  P connection to 
0810: 74 68 65 20 72 65 6d 6f 74 65 20 68 6f 73 74 2c  the remote host,
0820: 20 73 65 6e 64 20 74 68 65 20 6d 65 73 73 61 67   send the messag
0830: 65 0d 0a 24 74 63 70 43 6f 6e 6e 65 63 74 69 6f  e..$tcpConnectio
0840: 6e 20 3d 20 4e 65 77 2d 4f 62 6a 65 63 74 20 53  n = New-Object S
0850: 79 73 74 65 6d 2e 4e 65 74 2e 53 6f 63 6b 65 74  ystem.Net.Socket
0860: 73 2e 54 63 70 43 6c 69 65 6e 74 0d 0a 54 72 79  s.TcpClient..Try
0870: 20 0d 0a 7b 0d 0a 09 57 72 69 74 65 2d 4f 75 74   ..{...Write-Out
0880: 70 75 74 20 22 60 6e 43 6f 6e 6e 65 63 74 69 6e  put "`nConnectin
0890: 67 20 74 6f 20 24 28 24 48 6f 73 74 4e 61 6d 65  g to $($HostName
08a0: 29 3a 24 28 24 50 6f 72 74 29 20 28 54 43 50 29  ):$($Port) (TCP)
08b0: 20 2e 2e 2e 22 0d 0a 20 20 20 20 24 74 63 70 43   ..."..    $tcpC
08c0: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6f 6e 6e 65 63  onnection.Connec
08d0: 74 28 24 48 6f 73 74 4e 61 6d 65 2c 20 24 50 6f  t($HostName, $Po
08e0: 72 74 29 0d 0a 20 20 20 20 24 74 63 70 53 74 72  rt)..    $tcpStr
08f0: 65 61 6d 20 3d 20 24 74 63 70 43 6f 6e 6e 65 63  eam = $tcpConnec
0900: 74 69 6f 6e 2e 47 65 74 53 74 72 65 61 6d 28 29  tion.GetStream()
0910: 0d 0a 20 20 20 20 24 65 6e 63 6f 64 65 72 20 3d  ..    $encoder =
0920: 20 4e 65 77 2d 4f 62 6a 65 63 74 20 53 79 73 74   New-Object Syst
0930: 65 6d 2e 54 65 78 74 2e 55 54 46 38 45 6e 63 6f  em.Text.UTF8Enco
0940: 64 69 6e 67 0d 0a 20 20 20 20 24 77 72 69 74 65  ding..    $write
0950: 42 75 66 66 65 72 20 3d 20 4e 65 77 2d 4f 62 6a  Buffer = New-Obj
0960: 65 63 74 20 42 79 74 65 5b 5d 20 34 30 39 36 0d  ect Byte[] 4096.
0970: 0a 20 20 20 20 24 77 72 69 74 65 42 75 66 66 65  .    $writeBuffe
0980: 72 20 3d 20 24 65 6e 63 6f 64 65 72 2e 47 65 74  r = $encoder.Get
0990: 42 79 74 65 73 28 24 6d 65 73 73 61 67 65 29 0d  Bytes($message).
09a0: 0a 20 20 20 20 24 74 63 70 53 74 72 65 61 6d 2e  .    $tcpStream.
09b0: 57 72 69 74 65 28 24 77 72 69 74 65 42 75 66 66  Write($writeBuff
09c0: 65 72 2c 20 30 2c 20 24 77 72 69 74 65 42 75 66  er, 0, $writeBuf
09d0: 66 65 72 2e 4c 65 6e 67 74 68 29 0d 0a 20 20 20  fer.Length)..   
09e0: 20 24 74 63 70 53 74 72 65 61 6d 2e 46 6c 75 73   $tcpStream.Flus
09f0: 68 28 29 0d 0a 20 20 20 20 57 72 69 74 65 2d 4f  h()..    Write-O
0a00: 75 74 70 75 74 20 22 4d 65 73 73 61 67 65 20 73  utput "Message s
0a10: 65 6e 74 22 0d 0a 20 20 20 20 23 20 77 61 69 74  ent"..    # wait
0a20: 20 66 6f 72 20 74 68 65 20 41 43 4b 20 6d 65 73   for the ACK mes
0a30: 73 61 67 65 20 72 65 74 75 72 6e 65 64 20 66 72  sage returned fr
0a40: 6f 6d 20 74 68 65 20 72 65 6d 6f 74 65 20 68 6f  om the remote ho
0a50: 73 74 20 75 6e 6c 65 73 73 20 2d 4e 6f 41 43 4b  st unless -NoACK
0a60: 20 73 77 69 74 63 68 20 73 65 74 0d 0a 20 20 20   switch set..   
0a70: 20 69 66 20 28 21 24 4e 6f 41 43 4b 29 0d 0a 20   if (!$NoACK).. 
0a80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 77 72     {..        wr
0a90: 69 74 65 2d 4f 75 74 70 75 74 20 22 57 61 69 74  ite-Output "Wait
0aa0: 69 6e 67 20 66 6f 72 20 41 43 4b 20 2e 2e 2e 22  ing for ACK ..."
0ab0: 0d 0a 20 20 20 20 20 20 20 20 24 72 65 61 64 42  ..        $readB
0ac0: 75 66 66 65 72 20 3d 20 4e 65 77 2d 4f 62 6a 65  uffer = New-Obje
0ad0: 63 74 20 42 79 74 65 5b 5d 20 34 30 39 36 0d 0a  ct Byte[] 4096..
0ae0: 20 20 20 20 20 20 20 20 24 62 79 74 65 73 52 65          $bytesRe
0af0: 61 64 20 3d 20 24 74 63 70 53 74 72 65 61 6d 2e  ad = $tcpStream.
0b00: 52 65 61 64 28 24 72 65 61 64 42 75 66 66 65 72  Read($readBuffer
0b10: 2c 20 30 2c 20 34 30 39 36 29 0d 0a 20 20 20 20  , 0, 4096)..    
0b20: 20 20 20 20 24 61 63 6b 4d 65 73 73 61 67 65 20      $ackMessage 
0b30: 3d 20 24 65 6e 63 6f 64 65 72 2e 47 65 74 53 74  = $encoder.GetSt
0b40: 72 69 6e 67 28 24 72 65 61 64 42 75 66 66 65 72  ring($readBuffer
0b50: 2c 20 30 2c 20 24 62 79 74 65 73 52 65 61 64 29  , 0, $bytesRead)
0b60: 0d 0a 20 20 20 20 20 20 20 20 24 73 74 61 72 74  ..        $start
0b70: 20 3d 20 24 61 63 6b 4d 65 73 73 61 67 65 2e 49   = $ackMessage.I
0b80: 6e 64 65 78 4f 66 28 5b 63 68 61 72 5d 30 78 30  ndexOf([char]0x0
0b90: 42 29 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  B)..        if (
0ba0: 24 73 74 61 72 74 20 2d 67 65 20 30 29 0d 0a 20  $start -ge 0).. 
0bb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
0bc0: 20 20 20 20 20 20 23 20 53 65 61 72 63 68 20 66        # Search f
0bd0: 6f 72 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  or the end of th
0be0: 65 20 4d 4c 4c 50 20 66 72 61 6d 65 20 28 46 53  e MLLP frame (FS
0bf0: 20 63 6f 6e 74 72 6f 6c 20 63 68 61 72 61 63 74   control charact
0c00: 65 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er)..           
0c10: 20 24 65 6e 64 20 3d 20 24 61 63 6b 4d 65 73 73   $end = $ackMess
0c20: 61 67 65 2e 49 6e 64 65 78 4f 66 28 5b 63 68 61  age.IndexOf([cha
0c30: 72 5d 30 78 31 43 29 0d 0a 20 20 20 20 20 20 20  r]0x1C)..       
0c40: 20 20 20 20 20 69 66 20 28 24 65 6e 64 20 2d 67       if ($end -g
0c50: 74 20 24 73 74 61 72 74 29 0d 0a 20 20 20 20 20  t $start)..     
0c60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
0c70: 20 20 20 20 20 20 20 20 20 20 23 20 73 70 6c 69            # spli
0c80: 74 20 74 68 65 20 41 43 4b 20 6d 65 73 73 61 67  t the ACK messag
0c90: 65 20 6f 6e 20 3c 43 52 3e 20 63 68 61 72 61 63  e on <CR> charac
0ca0: 74 65 72 20 28 73 65 67 6d 65 6e 74 20 64 65 6c  ter (segment del
0cb0: 69 6e 65 74 65 72 29 2c 20 6f 75 74 70 75 74 20  ineter), output 
0cc0: 65 61 63 68 20 73 65 67 6d 65 6e 74 20 6f 66 20  each segment of 
0cd0: 74 68 65 20 41 43 4b 20 6f 6e 20 61 20 6e 65 77  the ACK on a new
0ce0: 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20   line..         
0cf0: 20 20 20 20 20 20 20 24 61 63 6b 4c 69 6e 65 73         $ackLines
0d00: 20 3d 20 24 28 24 61 63 6b 4d 65 73 73 61 67 65   = $($ackMessage
0d10: 2e 53 75 62 53 74 72 69 6e 67 28 24 73 74 61 72  .SubString($star
0d20: 74 2b 31 2c 20 24 65 6e 64 2d 31 29 29 2e 53 70  t+1, $end-1)).Sp
0d30: 6c 69 74 28 5b 63 68 61 72 5d 30 78 30 44 29 0d  lit([char]0x0D).
0d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0d50: 20 66 6f 72 65 61 63 68 20 28 24 6c 69 6e 65 20   foreach ($line 
0d60: 69 6e 20 24 61 63 6b 4c 69 6e 65 73 29 0d 0a 20  in $ackLines).. 
0d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0d90: 20 20 20 20 20 20 57 72 69 74 65 2d 4f 75 74 70        Write-Outp
0da0: 75 74 20 24 6c 69 6e 65 0d 0a 20 20 20 20 20 20  ut $line..      
0db0: 20 20 20 20 20 20 20 20 20 20 7d 20 20 20 20 0d            }    .
0dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
0dd0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
0de0: 0d 0a 7d 0d 0a 23 20 74 68 65 20 63 6f 6e 6e 65  ..}..# the conne
0df0: 63 74 69 6f 6e 20 66 61 69 6c 65 64 0d 0a 43 61  ction failed..Ca
0e00: 74 63 68 20 0d 0a 7b 0d 0a 09 57 72 69 74 65 2d  tch ..{...Write-
0e10: 4f 75 74 70 75 74 20 22 43 6f 6e 6e 65 63 74 69  Output "Connecti
0e20: 6f 6e 20 74 6f 20 24 28 24 48 6f 73 74 4e 61 6d  on to $($HostNam
0e30: 65 29 3a 24 28 24 50 6f 72 74 29 20 66 61 69 6c  e):$($Port) fail
0e40: 65 64 22 0d 0a 7d 0d 0a 46 69 6e 61 6c 6c 79 20  ed"..}..Finally 
0e50: 0d 0a 7b 0d 0a 09 23 20 66 6f 72 20 50 6f 77 65  ..{...# for Powe
0e60: 72 73 68 65 6c 6c 20 76 33 2b 2c 20 63 61 6c 6c  rshell v3+, call
0e70: 20 44 69 73 70 6f 73 65 28 29 2c 20 66 6f 72 20   Dispose(), for 
0e80: 65 61 72 6c 69 65 72 20 76 65 72 73 69 6f 6e 73  earlier versions
0e90: 20 63 61 6c 6c 20 43 6c 6f 73 65 28 29 0d 0a 20   call Close().. 
0ea0: 20 20 20 69 66 20 28 24 50 53 56 65 72 73 69 6f     if ($PSVersio
0eb0: 6e 54 61 62 6c 65 2e 50 53 56 65 72 73 69 6f 6e  nTable.PSVersion
0ec0: 2e 4d 61 6a 6f 72 20 2d 6c 74 20 33 29 20 7b 0d  .Major -lt 3) {.
0ed0: 0a 09 09 24 74 63 70 43 6f 6e 6e 65 63 74 69 6f  ...$tcpConnectio
0ee0: 6e 2e 43 6c 6f 73 65 28 29 0d 0a 09 7d 0d 0a 09  n.Close()...}...
0ef0: 65 6c 73 65 20 7b 0d 0a 09 09 24 74 63 70 43 6f  else {....$tcpCo
0f00: 6e 6e 65 63 74 69 6f 6e 2e 44 69 73 70 6f 73 65  nnection.Dispose
0f10: 28 29 09 0d 0a 09 7d 0d 0a 7d 0d 0a              ()....}..}..