PoshCode Archive  Hex Artifact Content

Artifact 2482c65aacdac58ab14baa0cd75720568afda9d6a43490062ae74b52ea9184de:

  • File scriptable-telnet-client.ps1 — part of check-in [3fa2a9cb52] at 2018-06-10 14:02:11 on branch trunk — I wrote this a while back to be able to automate stuff on a hp san and ilo. It’s pretty much mritten ad-hoc so please feel free to improve on it. Anyway, might be useful for someone out there. The function send-command logs on to a telnet server and executes the piped in commands. (user: yavu305z size: 2348)

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 73  hell..# title: s
0030: 63 72 69 70 74 61 62 6c 65 20 74 65 6c 6e 65 74  criptable telnet
0040: 20 63 6c 69 65 6e 74 0d 0a 23 20 64 65 73 63 72   client..# descr
0050: 69 70 74 69 6f 6e 3a 20 49 20 77 72 6f 74 65 20  iption: I wrote 
0060: 74 68 69 73 20 61 20 77 68 69 6c 65 20 62 61 63  this a while bac
0070: 6b 20 74 6f 20 62 65 20 61 62 6c 65 20 74 6f 20  k to be able to 
0080: 61 75 74 6f 6d 61 74 65 20 73 74 75 66 66 20 6f  automate stuff o
0090: 6e 20 61 20 68 70 20 73 61 6e 20 61 6e 64 20 69  n a hp san and i
00a0: 6c 6f 2e 20 49 74 e2 80 99 73 20 70 72 65 74 74  lo. It...s prett
00b0: 79 20 6d 75 63 68 20 6d 72 69 74 74 65 6e 20 61  y much mritten a
00c0: 64 2d 68 6f 63 20 73 6f 20 70 6c 65 61 73 65 20  d-hoc so please 
00d0: 66 65 65 6c 20 66 72 65 65 20 74 6f 20 69 6d 70  feel free to imp
00e0: 72 6f 76 65 20 6f 6e 20 69 74 2e 20 41 6e 79 77  rove on it. Anyw
00f0: 61 79 2c 20 6d 69 67 68 74 20 62 65 20 75 73 65  ay, might be use
0100: 66 75 6c 20 66 6f 72 20 73 6f 6d 65 6f 6e 65 20  ful for someone 
0110: 6f 75 74 20 74 68 65 72 65 2e 20 54 68 65 20 66  out there. The f
0120: 75 6e 63 74 69 6f 6e 20 73 65 6e 64 2d 63 6f 6d  unction send-com
0130: 6d 61 6e 64 20 6c 6f 67 73 20 6f 6e 20 74 6f 20  mand logs on to 
0140: 61 20 74 65 6c 6e 65 74 20 73 65 72 76 65 72 20  a telnet server 
0150: 61 6e 64 20 65 78 65 63 75 74 65 73 20 74 68 65  and executes the
0160: 20 70 69 70 65 64 20 69 6e 20 63 6f 6d 6d 61 6e   piped in comman
0170: 64 73 2e 0d 0a 23 20 76 65 72 73 69 6f 6e 3a 20  ds...# version: 
0180: 30 2e 31 0d 0a 23 20 74 79 70 65 3a 20 66 75 6e  0.1..# type: fun
0190: 63 74 69 6f 6e 0d 0a 23 20 61 75 74 68 6f 72 3a  ction..# author:
01a0: 20 79 61 76 75 33 30 35 7a 0d 0a 23 20 6c 69 63   yavu305z..# lic
01b0: 65 6e 73 65 3a 20 43 43 30 0d 0a 23 20 66 75 6e  ense: CC0..# fun
01c0: 63 74 69 6f 6e 3a 20 72 65 61 64 2d 73 74 72 65  ction: read-stre
01d0: 61 6d 0d 0a 23 20 78 2d 70 6f 73 68 63 6f 64 65  am..# x-poshcode
01e0: 2d 69 64 3a 20 35 38 32 39 0d 0a 23 20 78 2d 61  -id: 5829..# x-a
01f0: 72 63 68 69 76 65 64 3a 20 32 30 31 35 2d 30 34  rchived: 2015-04
0200: 2d 31 39 54 30 36 3a 35 38 3a 30 36 0d 0a 23 20  -19T06:58:06..# 
0210: 78 2d 70 75 62 6c 69 73 68 65 64 3a 20 32 30 31  x-published: 201
0220: 35 2d 30 34 2d 31 36 54 30 38 3a 31 34 3a 30 30  5-04-16T08:14:00
0230: 0d 0a 23 0d 0a 23 20 45 78 61 6d 70 6c 65 3a 0d  ..#..# Example:.
0240: 0a 23 20 47 65 74 2d 63 6f 6e 74 65 6e 74 20 63  .# Get-content c
0250: 6f 6d 6d 61 6e 64 73 2e 74 78 74 20 7c 20 73 65  ommands.txt | se
0260: 6e 64 2d 63 6f 6d 6d 61 6e 64 20 2d 68 6f 73 74  nd-command -host
0270: 6e 61 6d 65 20 74 65 6c 6e 65 74 73 65 72 76 65  name telnetserve
0280: 72 2e 73 6f 6d 65 77 68 65 72 65 2e 63 6f 6d 20  r.somewhere.com 
0290: 2d 75 73 65 72 20 73 6f 6d 65 75 73 65 72 20 2d  -user someuser -
02a0: 70 61 73 73 77 6f 72 64 20 73 6f 6d 65 70 61 73  password somepas
02b0: 73 77 6f 72 64 0d 0a 23 0d 0a 66 75 6e 63 74 69  sword..#..functi
02c0: 6f 6e 20 72 65 61 64 2d 73 74 72 65 61 6d 20 28  on read-stream (
02d0: 5b 50 61 72 61 6d 65 74 65 72 28 50 6f 73 69 73  [Parameter(Posis
02e0: 74 69 6f 6e 3d 30 2c 4d 61 6e 64 61 74 6f 72 79  tion=0,Mandatory
02f0: 3d 24 74 72 75 65 29 5d 5b 76 61 6c 69 64 61 74  =$true)][validat
0300: 65 6e 6f 74 6e 75 6c 6c 28 29 5d 0d 0a 09 09 5b  enotnull()]....[
0310: 53 79 73 74 65 6d 2e 4e 65 74 2e 53 6f 63 6b 65  System.Net.Socke
0320: 74 73 2e 4e 65 74 77 6f 72 6b 53 74 72 65 61 6d  ts.NetworkStream
0330: 5d 24 73 74 72 65 61 6d 2c 0d 0a 09 09 5b 53 74  ]$stream,....[St
0340: 72 69 6e 67 5d 24 65 78 70 65 63 74 20 3d 20 22  ring]$expect = "
0350: 22 29 0d 0a 7b 0d 0a 09 24 62 75 66 66 65 72 20  ")..{...$buffer 
0360: 3d 20 6e 65 77 2d 6f 62 6a 65 63 74 20 73 79 73  = new-object sys
0370: 74 65 6d 2e 62 79 74 65 5b 5d 20 31 30 32 34 0d  tem.byte[] 1024.
0380: 0a 09 24 65 6e 63 20 3d 20 6e 65 77 2d 6f 62 6a  ..$enc = new-obj
0390: 65 63 74 20 73 79 73 74 65 6d 2e 74 65 78 74 2e  ect system.text.
03a0: 61 73 63 69 69 45 6e 63 6f 64 69 6e 67 0d 0a 0d  asciiEncoding...
03b0: 0a 09 23 23 20 52 65 61 64 20 61 6c 6c 20 74 68  ..## Read all th
03c0: 65 20 64 61 74 61 20 61 76 61 69 6c 61 62 6c 65  e data available
03d0: 20 66 72 6f 6d 20 74 68 65 20 73 74 72 65 61 6d   from the stream
03e0: 2c 20 77 72 69 74 69 6e 67 20 69 74 20 74 6f 20  , writing it to 
03f0: 74 68 65 20 0d 0a 09 23 23 20 73 63 72 65 65 6e  the ...## screen
0400: 20 77 68 65 6e 20 64 6f 6e 65 2e 0d 0a 0d 0a 09   when done......
0410: 23 23 20 41 6c 6c 6f 77 20 64 61 74 61 20 74 6f  ## Allow data to
0420: 20 62 75 66 66 65 72 0d 0a 09 73 74 61 72 74 2d   buffer...start-
0430: 73 6c 65 65 70 20 2d 6d 20 31 30 30 0d 0a 09 24  sleep -m 100...$
0440: 6f 75 74 70 75 74 20 3d 20 22 22 0d 0a 09 77 68  output = ""...wh
0450: 69 6c 65 28 24 73 74 72 65 61 6d 2e 44 61 74 61  ile($stream.Data
0460: 41 76 61 69 6c 61 62 6c 65 20 2d 6f 72 20 24 6f  Available -or $o
0470: 75 74 70 75 74 20 2d 6e 6f 74 6d 61 74 63 68 20  utput -notmatch 
0480: 24 65 78 70 65 63 74 29 0d 0a 09 7b 20 20 20 0d  $expect)...{   .
0490: 0a 09 09 24 72 65 61 64 20 3d 20 24 73 74 72 65  ...$read = $stre
04a0: 61 6d 2e 52 65 61 64 28 24 62 75 66 66 65 72 2c  am.Read($buffer,
04b0: 20 30 2c 20 31 30 32 34 29 20 20 20 20 0d 0a 09   0, 1024)    ...
04c0: 09 24 6f 75 74 70 75 74 20 3d 20 22 24 6f 75 74  .$output = "$out
04d0: 70 75 74 24 28 24 65 6e 63 2e 47 65 74 53 74 72  put$($enc.GetStr
04e0: 69 6e 67 28 24 62 75 66 66 65 72 2c 20 30 2c 20  ing($buffer, 0, 
04f0: 24 72 65 61 64 29 29 22 0d 0a 09 09 23 23 20 41  $read))"....## A
0500: 6c 6c 6f 77 20 64 61 74 61 20 74 6f 20 62 75 66  llow data to buf
0510: 66 65 72 20 66 6f 72 20 61 20 62 69 74 20 0d 0a  fer for a bit ..
0520: 09 09 73 74 61 72 74 2d 73 6c 65 65 70 20 2d 6d  ..start-sleep -m
0530: 20 31 30 30 0d 0a 09 7d 0d 0a 09 24 6f 75 74 70   100...}...$outp
0540: 75 74 2e 73 70 6c 69 74 28 22 60 6e 22 29 0d 0a  ut.split("`n")..
0550: 7d 0d 0a 0d 0a 66 75 6e 63 74 69 6f 6e 20 73 65  }....function se
0560: 6e 64 2d 63 6f 6d 6d 61 6e 64 20 28 5b 70 61 72  nd-command ([par
0570: 61 6d 65 74 65 72 28 70 6f 73 69 74 69 6f 6e 3d  ameter(position=
0580: 30 2c 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 75  0,Mandatory=$tru
0590: 65 29 5d 5b 76 61 6c 69 64 61 74 65 6e 6f 74 6e  e)][validatenotn
05a0: 75 6c 6c 28 29 5d 0d 0a 09 09 5b 53 74 72 69 6e  ull()]....[Strin
05b0: 67 5d 24 68 6f 73 74 6e 61 6d 65 2c 0d 0a 09 5b  g]$hostname,...[
05c0: 70 61 72 61 6d 65 74 65 72 28 70 6f 73 69 74 69  parameter(positi
05d0: 6f 6e 3d 31 2c 4d 61 6e 64 61 74 6f 72 79 3d 24  on=1,Mandatory=$
05e0: 74 72 75 65 29 5d 5b 76 61 6c 69 64 61 74 65 6e  true)][validaten
05f0: 6f 74 6e 75 6c 6c 28 29 5d 0d 0a 09 09 5b 53 74  otnull()]....[St
0600: 72 69 6e 67 5d 24 55 73 65 72 2c 0d 0a 09 5b 70  ring]$User,...[p
0610: 61 72 61 6d 65 74 65 72 28 70 6f 73 69 74 69 6f  arameter(positio
0620: 6e 3d 32 2c 4d 61 6e 64 61 74 6f 72 79 3d 24 74  n=2,Mandatory=$t
0630: 72 75 65 29 5d 5b 76 61 6c 69 64 61 74 65 6e 6f  rue)][validateno
0640: 74 6e 75 6c 6c 28 29 5d 0d 0a 09 09 5b 53 74 72  tnull()]....[Str
0650: 69 6e 67 5d 24 50 61 73 73 77 6f 72 64 2c 20 0d  ing]$Password, .
0660: 0a 09 5b 70 61 72 61 6d 65 74 65 72 28 70 6f 73  ..[parameter(pos
0670: 69 74 69 6f 6e 3d 33 2c 4d 61 6e 64 61 74 6f 72  ition=3,Mandator
0680: 79 3d 24 74 72 75 65 2c 76 61 6c 75 65 66 72 6f  y=$true,valuefro
0690: 6d 70 69 70 65 6c 69 6e 65 3d 24 74 72 75 65 29  mpipeline=$true)
06a0: 5d 5b 76 61 6c 69 64 61 74 65 6e 6f 74 6e 75 6c  ][validatenotnul
06b0: 6c 28 29 5d 0d 0a 09 09 5b 53 74 72 69 6e 67 5d  l()]....[String]
06c0: 24 49 6e 70 75 74 4f 62 6a 65 63 74 2c 0d 0a 09  $InputObject,...
06d0: 09 5b 73 74 72 69 6e 67 5d 24 45 78 70 65 63 74  .[string]$Expect
06e0: 20 3d 20 22 22 29 0d 0a 7b 0d 0a 09 62 65 67 69   = "")..{...begi
06f0: 6e 0d 0a 09 7b 0d 0a 09 09 0d 0a 09 09 24 73 6f  n...{........$so
0700: 63 6b 20 3d 20 6e 65 77 2d 6f 62 6a 65 63 74 20  ck = new-object 
0710: 73 79 73 74 65 6d 2e 6e 65 74 2e 73 6f 63 6b 65  system.net.socke
0720: 74 73 2e 74 63 70 63 6c 69 65 6e 74 28 24 68 6f  ts.tcpclient($ho
0730: 73 74 6e 61 6d 65 2c 32 33 29 0d 0a 09 09 24 73  stname,23)....$s
0740: 74 72 20 3d 20 24 73 6f 63 6b 2e 47 65 74 53 74  tr = $sock.GetSt
0750: 72 65 61 6d 28 29 0d 0a 09 09 24 77 72 74 20 3d  ream()....$wrt =
0760: 20 6e 65 77 2d 6f 62 6a 65 63 74 20 73 79 73 74   new-object syst
0770: 65 6d 2e 69 6f 2e 73 74 72 65 61 6d 77 72 69 74  em.io.streamwrit
0780: 65 72 28 24 73 74 72 29 0d 0a 09 09 0d 0a 09 09  er($str)........
0790: 72 65 61 64 2d 73 74 72 65 61 6d 28 24 73 74 72  read-stream($str
07a0: 29 0d 0a 09 09 24 77 72 74 2e 77 72 69 74 65 6c  )....$wrt.writel
07b0: 69 6e 65 28 24 75 73 65 72 29 0d 0a 09 09 24 77  ine($user)....$w
07c0: 72 74 2e 66 6c 75 73 68 28 29 0d 0a 09 09 72 65  rt.flush()....re
07d0: 61 64 2d 73 74 72 65 61 6d 28 24 73 74 72 29 0d  ad-stream($str).
07e0: 0a 09 09 24 77 72 74 2e 77 72 69 74 65 6c 69 6e  ...$wrt.writelin
07f0: 65 28 24 70 61 73 73 77 6f 72 64 29 0d 0a 09 09  e($password)....
0800: 24 77 72 74 2e 66 6c 75 73 68 28 29 0d 0a 09 09  $wrt.flush()....
0810: 72 65 61 64 2d 73 74 72 65 61 6d 28 24 73 74 72  read-stream($str
0820: 2c 20 24 65 78 70 65 63 74 29 0d 0a 09 7d 0d 0a  , $expect)...}..
0830: 09 70 72 6f 63 65 73 73 0d 0a 09 7b 0d 0a 09 09  .process...{....
0840: 24 77 72 74 2e 77 72 69 74 65 6c 69 6e 65 28 24  $wrt.writeline($
0850: 49 6e 70 75 74 4f 62 6a 65 63 74 29 0d 0a 09 09  InputObject)....
0860: 24 77 72 74 2e 66 6c 75 73 68 28 29 0d 0a 09 09  $wrt.flush()....
0870: 72 65 61 64 2d 73 74 72 65 61 6d 28 24 73 74 72  read-stream($str
0880: 2c 20 24 65 78 70 65 63 74 29 0d 0a 09 7d 0d 0a  , $expect)...}..
0890: 09 65 6e 64 0d 0a 09 7b 0d 0a 09 09 24 77 72 74  .end...{....$wrt
08a0: 2e 77 72 69 74 65 6c 69 6e 65 28 22 65 78 69 74  .writeline("exit
08b0: 22 29 0d 0a 09 09 24 77 72 74 2e 66 6c 75 73 68  ")....$wrt.flush
08c0: 28 29 0d 0a 09 09 72 65 61 64 2d 73 74 72 65 61  ()....read-strea
08d0: 6d 28 24 73 74 72 29 0d 0a 0d 0a 09 09 23 23 20  m($str)......## 
08e0: 43 6c 6f 73 65 20 74 68 65 20 73 74 72 65 61 6d  Close the stream
08f0: 73 20 0d 0a 09 09 24 77 72 74 2e 43 6c 6f 73 65  s ....$wrt.Close
0900: 28 29 0d 0a 09 09 24 73 74 72 2e 43 6c 6f 73 65  ()....$str.Close
0910: 28 29 0d 0a 09 09 24 73 6f 63 6b 2e 63 6c 6f 73  ()....$sock.clos
0920: 65 28 29 0d 0a 09 7d 0d 0a 7d 0d 0a              e()...}..}..