PoshCode Archive  Hex Artifact Content

Artifact d16b26dfb9bbfef03af8622cb909465a1f18c717fbc63e57e336b380ac711c93:

  • File UIAutomation.ps1 — part of check-in [94cc72b800] at 2018-06-10 13:21:39 on branch trunk — I really am still working on this replacement for the WASP module ;-) (user: Joel Bennett size: 27494)

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 63 73 68 61 72 70  i..# api: csharp
0020: 0d 0a 23 20 74 69 74 6c 65 3a 20 55 49 41 75 74  ..# title: UIAut
0030: 6f 6d 61 74 69 6f 6e 0d 0a 23 20 64 65 73 63 72  omation..# descr
0040: 69 70 74 69 6f 6e 3a 20 49 20 72 65 61 6c 6c 79  iption: I really
0050: 20 61 6d 20 73 74 69 6c 6c 20 77 6f 72 6b 69 6e   am still workin
0060: 67 20 6f 6e 20 74 68 69 73 20 72 65 70 6c 61 63  g on this replac
0070: 65 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 57 41  ement for the WA
0080: 53 50 20 6d 6f 64 75 6c 65 20 3b 2d 29 0d 0a 23  SP module ;-)..#
0090: 20 76 65 72 73 69 6f 6e 3a 20 31 2e 38 0d 0a 23   version: 1.8..#
00a0: 20 74 79 70 65 3a 20 6d 6f 64 75 6c 65 0d 0a 23   type: module..#
00b0: 20 61 75 74 68 6f 72 3a 20 4a 6f 65 6c 20 42 65   author: Joel Be
00c0: 6e 6e 65 74 74 0d 0a 23 20 6c 69 63 65 6e 73 65  nnett..# license
00d0: 3a 20 43 43 30 0d 0a 23 20 66 75 6e 63 74 69 6f  : CC0..# functio
00e0: 6e 3a 20 47 65 74 2d 43 6c 69 63 6b 61 62 6c 65  n: Get-Clickable
00f0: 50 6f 69 6e 74 0d 0a 23 20 78 2d 70 6f 73 68 63  Point..# x-poshc
0100: 6f 64 65 2d 69 64 3a 20 33 31 37 35 0d 0a 23 20  ode-id: 3175..# 
0110: 78 2d 64 65 72 69 76 65 64 2d 66 72 6f 6d 2d 69  x-derived-from-i
0120: 64 3a 20 33 31 38 39 0d 0a 23 20 78 2d 61 72 63  d: 3189..# x-arc
0130: 68 69 76 65 64 3a 20 32 30 31 32 2d 30 38 2d 30  hived: 2012-08-0
0140: 31 54 30 35 3a 30 39 3a 35 36 0d 0a 23 20 78 2d  1T05:09:56..# x-
0150: 70 75 62 6c 69 73 68 65 64 3a 20 32 30 31 32 2d  published: 2012-
0160: 30 31 2d 31 37 54 32 31 3a 31 30 3a 30 30 0d 0a  01-17T21:10:00..
0170: 23 0d 0a 23 20 54 68 69 73 20 76 65 72 73 69 6f  #..# This versio
0180: 6e 20 66 69 78 65 73 20 73 6f 6d 65 20 70 72 6f  n fixes some pro
0190: 62 6c 65 6d 73 20 77 69 74 68 20 50 6f 77 65 72  blems with Power
01a0: 53 68 65 6c 6c 20 32 20 76 73 20 50 6f 77 65 72  Shell 2 vs Power
01b0: 53 68 65 6c 6c 20 33 20 63 68 61 6e 67 65 73 20  Shell 3 changes 
01c0: 28 69 74 20 77 6f 72 6b 73 20 69 6e 20 62 6f 74  (it works in bot
01d0: 68 20 6e 6f 77 29 2e 0d 0a 23 0d 0a 23 23 20 55  h now)...#..## U
01e0: 49 20 41 75 74 6f 6d 61 74 69 6f 6e 20 76 20 31  I Automation v 1
01f0: 2e 38 20 2d 2d 20 52 45 51 55 49 52 45 53 20 74  .8 -- REQUIRES t
0200: 68 65 20 52 65 66 6c 65 63 74 69 6f 6e 20 6d 6f  he Reflection mo
0210: 64 75 6c 65 20 28 63 75 72 72 65 6e 74 20 76 65  dule (current ve
0220: 72 73 69 6f 6e 3a 20 68 74 74 70 3a 2f 2f 70 6f  rsion: http://po
0230: 73 68 63 6f 64 65 2e 6f 72 67 2f 33 31 37 34 20  shcode.org/3174 
0240: 29 0d 0a 23 23 20 0d 0a 23 20 57 41 53 50 20 32  )..## ..# WASP 2
0250: 2e 30 20 69 73 20 67 65 74 74 69 6e 67 20 63 6c  .0 is getting cl
0260: 6f 73 65 72 2c 20 62 75 74 20 74 68 69 73 20 69  oser, but this i
0270: 73 20 73 74 69 6c 6c 20 6a 75 73 74 20 61 20 70  s still just a p
0280: 72 65 76 69 65 77 3a 0d 0a 23 20 2d 2d 20 61 20  review:..# -- a 
0290: 6c 6f 74 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61  lot of the comma
02a0: 6e 64 73 20 68 61 76 65 20 77 65 69 72 64 20 6e  nds have weird n
02b0: 61 6d 65 73 20 73 74 69 6c 6c 20 62 65 63 61 75  ames still becau
02c0: 73 65 20 74 68 65 79 27 72 65 20 62 65 69 6e 67  se they're being
02d0: 20 67 65 6e 65 72 61 74 65 64 20 69 67 6e 6f 72   generated ignor
02e0: 61 6e 74 6c 79 0d 0a 23 20 2d 2d 20 65 67 3a 20  antly..# -- eg: 
02f0: 49 6e 76 6f 6b 65 2d 54 6f 67 67 6c 65 2e 54 6f  Invoke-Toggle.To
0300: 67 67 6c 65 20 61 6e 64 20 20 49 6e 76 6f 6b 65  ggle and  Invoke
0310: 2d 49 6e 76 6f 6b 65 2e 49 6e 76 6f 6b 65 0d 0a  -Invoke.Invoke..
0320: 0d 0a 23 20 76 20 31 2e 37 20 2d 20 46 69 78 65  ..# v 1.7 - Fixe
0330: 73 20 75 73 69 6e 67 20 6d 75 6c 74 69 70 6c 65  s using multiple
0340: 20 63 68 65 63 6b 73 20 6c 69 6b 65 3a 20 53 65   checks like: Se
0350: 6c 65 63 74 2d 55 49 45 6c 65 6d 65 6e 74 20 52  lect-UIElement R
0360: 65 64 3a 20 45 64 69 74 0d 0a 23 20 76 20 31 2e  ed: Edit..# v 1.
0370: 38 20 2d 20 46 69 78 65 73 20 2e 4e 65 74 20 76  8 - Fixes .Net v
0380: 65 72 73 69 6f 6e 20 70 72 6f 62 6c 65 6d 73 3a  ersion problems:
0390: 20 73 70 65 63 69 66 79 69 6e 67 20 43 53 68 61   specifying CSha
03a0: 72 70 56 65 72 73 69 6f 6e 33 20 77 68 65 6e 20  rpVersion3 when 
03b0: 69 6e 20 50 6f 77 65 72 53 68 65 6c 6c 20 32 0d  in PowerShell 2.
03c0: 0a 0d 0a 23 20 49 46 20 79 6f 75 72 20 50 6f 77  ...# IF your Pow
03d0: 65 72 53 68 65 6c 6c 20 69 73 20 72 75 6e 6e 69  erShell is runni
03e0: 6e 67 20 69 6e 20 2e 4e 65 74 20 34 0d 0a 69 66  ng in .Net 4..if
03f0: 28 24 50 53 56 65 72 73 69 6f 6e 54 61 62 6c 65  ($PSVersionTable
0400: 2e 43 4c 52 56 65 72 73 69 6f 6e 20 2d 67 74 20  .CLRVersion -gt 
0410: 22 34 2e 30 22 29 20 7b 0d 0a 20 20 20 20 24 4c  "4.0") {..    $L
0420: 61 6e 67 75 61 67 65 20 3d 20 22 43 53 68 61 72  anguage = "CShar
0430: 70 22 20 23 20 56 65 72 73 69 6f 6e 20 34 0d 0a  p" # Version 4..
0440: 20 20 20 20 41 64 64 2d 54 79 70 65 20 2d 41 73      Add-Type -As
0450: 73 65 6d 62 6c 79 4e 61 6d 65 20 22 55 49 41 75  semblyName "UIAu
0460: 74 6f 6d 61 74 69 6f 6e 43 6c 69 65 6e 74 2c 20  tomationClient, 
0470: 56 65 72 73 69 6f 6e 3d 34 2e 30 2e 30 2e 30 2c  Version=4.0.0.0,
0480: 20 43 75 6c 74 75 72 65 3d 6e 65 75 74 72 61 6c   Culture=neutral
0490: 2c 20 50 75 62 6c 69 63 4b 65 79 54 6f 6b 65 6e  , PublicKeyToken
04a0: 3d 33 31 62 66 33 38 35 36 61 64 33 36 34 65 33  =31bf3856ad364e3
04b0: 35 22 0d 0a 20 20 20 20 41 64 64 2d 54 79 70 65  5"..    Add-Type
04c0: 20 2d 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 22   -AssemblyName "
04d0: 55 49 41 75 74 6f 6d 61 74 69 6f 6e 54 79 70 65  UIAutomationType
04e0: 73 2c 20 56 65 72 73 69 6f 6e 3d 34 2e 30 2e 30  s, Version=4.0.0
04f0: 2e 30 2c 20 43 75 6c 74 75 72 65 3d 6e 65 75 74  .0, Culture=neut
0500: 72 61 6c 2c 20 50 75 62 6c 69 63 4b 65 79 54 6f  ral, PublicKeyTo
0510: 6b 65 6e 3d 33 31 62 66 33 38 35 36 61 64 33 36  ken=31bf3856ad36
0520: 34 65 33 35 22 0d 0a 7d 20 65 6c 73 65 20 7b 0d  4e35"..} else {.
0530: 0a 20 20 20 20 23 20 49 6e 20 50 6f 77 65 72 53  .    # In PowerS
0540: 68 65 6c 6c 20 32 2c 20 77 65 20 6e 65 65 64 20  hell 2, we need 
0550: 74 6f 20 75 73 65 20 74 68 65 20 2e 4e 65 74 20  to use the .Net 
0560: 33 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 24  3 version..    $
0570: 4c 61 6e 67 75 61 67 65 20 3d 20 22 43 53 68 61  Language = "CSha
0580: 72 70 56 65 72 73 69 6f 6e 33 22 20 0d 0a 20 20  rpVersion3" ..  
0590: 20 20 41 64 64 2d 54 79 70 65 20 2d 41 73 73 65    Add-Type -Asse
05a0: 6d 62 6c 79 4e 61 6d 65 20 22 55 49 41 75 74 6f  mblyName "UIAuto
05b0: 6d 61 74 69 6f 6e 43 6c 69 65 6e 74 2c 20 56 65  mationClient, Ve
05c0: 72 73 69 6f 6e 3d 33 2e 30 2e 30 2e 30 2c 20 43  rsion=3.0.0.0, C
05d0: 75 6c 74 75 72 65 3d 6e 65 75 74 72 61 6c 2c 20  ulture=neutral, 
05e0: 50 75 62 6c 69 63 4b 65 79 54 6f 6b 65 6e 3d 33  PublicKeyToken=3
05f0: 31 62 66 33 38 35 36 61 64 33 36 34 65 33 35 22  1bf3856ad364e35"
0600: 0d 0a 20 20 20 20 41 64 64 2d 54 79 70 65 20 2d  ..    Add-Type -
0610: 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 22 55 49  AssemblyName "UI
0620: 41 75 74 6f 6d 61 74 69 6f 6e 54 79 70 65 73 2c  AutomationTypes,
0630: 20 56 65 72 73 69 6f 6e 3d 33 2e 30 2e 30 2e 30   Version=3.0.0.0
0640: 2c 20 43 75 6c 74 75 72 65 3d 6e 65 75 74 72 61  , Culture=neutra
0650: 6c 2c 20 50 75 62 6c 69 63 4b 65 79 54 6f 6b 65  l, PublicKeyToke
0660: 6e 3d 33 31 62 66 33 38 35 36 61 64 33 36 34 65  n=31bf3856ad364e
0670: 33 35 22 0d 0a 7d 0d 0a 0d 0a 0d 0a 24 53 57 41  35"..}......$SWA
0680: 20 3d 20 22 53 79 73 74 65 6d 2e 57 69 6e 64 6f   = "System.Windo
0690: 77 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 22 0d 0a  ws.Automation"..
06a0: 23 20 20 41 64 64 2d 41 63 63 65 6c 65 72 61 74  #  Add-Accelerat
06b0: 6f 72 20 49 6e 76 6f 6b 65 50 61 74 74 65 72 6e  or InvokePattern
06c0: 20 20 20 20 20 20 22 24 53 57 41 2e 49 6e 76 6f        "$SWA.Invo
06d0: 6b 65 50 61 74 74 65 72 6e 22 20 20 20 20 20 20  kePattern"      
06e0: 20 20 20 20 20 20 20 20 20 20 2d 45 41 20 53 69            -EA Si
06f0: 6c 65 6e 74 6c 79 43 6f 6e 74 69 6e 75 65 0d 0a  lentlyContinue..
0700: 23 20 20 41 64 64 2d 41 63 63 65 6c 65 72 61 74  #  Add-Accelerat
0710: 6f 72 20 45 78 70 61 6e 64 50 61 74 74 65 72 6e  or ExpandPattern
0720: 20 20 20 20 20 20 22 24 53 57 41 2e 45 78 70 61        "$SWA.Expa
0730: 6e 64 43 6f 6c 6c 61 70 73 65 50 61 74 74 65 72  ndCollapsePatter
0740: 6e 22 20 20 20 20 20 20 20 20 2d 45 41 20 53 69  n"        -EA Si
0750: 6c 65 6e 74 6c 79 43 6f 6e 74 69 6e 75 65 0d 0a  lentlyContinue..
0760: 23 20 20 41 64 64 2d 41 63 63 65 6c 65 72 61 74  #  Add-Accelerat
0770: 6f 72 20 57 69 6e 64 6f 77 50 61 74 74 65 72 6e  or WindowPattern
0780: 20 20 20 20 20 20 22 24 53 57 41 2e 57 69 6e 64        "$SWA.Wind
0790: 6f 77 50 61 74 74 65 72 6e 22 20 20 20 20 20 20  owPattern"      
07a0: 20 20 20 20 20 20 20 20 20 20 2d 45 41 20 53 69            -EA Si
07b0: 6c 65 6e 74 6c 79 43 6f 6e 74 69 6e 75 65 0d 0a  lentlyContinue..
07c0: 23 20 20 41 64 64 2d 41 63 63 65 6c 65 72 61 74  #  Add-Accelerat
07d0: 6f 72 20 54 72 61 6e 73 66 6f 72 6d 50 61 74 74  or TransformPatt
07e0: 65 72 6e 20 20 20 22 24 53 57 41 2e 54 72 61 6e  ern   "$SWA.Tran
07f0: 73 66 6f 72 6d 50 61 74 74 65 72 6e 22 20 20 20  sformPattern"   
0800: 20 20 20 20 20 20 20 20 20 20 2d 45 41 20 53 69            -EA Si
0810: 6c 65 6e 74 6c 79 43 6f 6e 74 69 6e 75 65 0d 0a  lentlyContinue..
0820: 23 20 20 41 64 64 2d 41 63 63 65 6c 65 72 61 74  #  Add-Accelerat
0830: 6f 72 20 56 61 6c 75 65 50 61 74 74 65 72 6e 20  or ValuePattern 
0840: 20 20 20 20 20 20 22 24 53 57 41 2e 56 61 6c 75        "$SWA.Valu
0850: 65 50 61 74 74 65 72 6e 22 20 20 20 20 20 20 20  ePattern"       
0860: 20 20 20 20 20 20 20 20 20 20 2d 45 41 20 53 69            -EA Si
0870: 6c 65 6e 74 6c 79 43 6f 6e 74 69 6e 75 65 0d 0a  lentlyContinue..
0880: 23 20 20 41 64 64 2d 41 63 63 65 6c 65 72 61 74  #  Add-Accelerat
0890: 6f 72 20 54 65 78 74 50 61 74 74 65 72 6e 20 20  or TextPattern  
08a0: 20 20 20 20 20 20 22 24 53 57 41 2e 54 65 78 74        "$SWA.Text
08b0: 50 61 74 74 65 72 6e 22 20 20 20 20 20 20 20 20  Pattern"        
08c0: 20 20 20 20 20 20 20 20 20 20 2d 45 41 20 53 69            -EA Si
08d0: 6c 65 6e 74 6c 79 43 6f 6e 74 69 6e 75 65 0d 0a  lentlyContinue..
08e0: 0d 0a 23 20 54 68 69 73 20 69 73 20 77 68 61 74  ..# This is what
08f0: 20 72 65 71 75 69 72 65 73 20 74 68 65 20 52 65   requires the Re
0900: 66 6c 65 63 74 69 6f 6e 20 6d 6f 64 75 6c 65 3a  flection module:
0910: 0d 0a 41 64 64 2d 41 63 63 65 6c 65 72 61 74 6f  ..Add-Accelerato
0920: 72 20 41 75 74 6f 6d 61 74 69 6f 6e 20 20 20 20  r Automation    
0930: 20 20 20 20 20 22 24 53 57 41 2e 41 75 74 6f 6d       "$SWA.Autom
0940: 61 74 69 6f 6e 22 20 20 20 20 20 20 20 20 20 20  ation"          
0950: 20 20 20 20 20 20 20 20 20 2d 45 41 20 53 69 6c           -EA Sil
0960: 65 6e 74 6c 79 43 6f 6e 74 69 6e 75 65 0d 0a 41  entlyContinue..A
0970: 64 64 2d 41 63 63 65 6c 65 72 61 74 6f 72 20 41  dd-Accelerator A
0980: 75 74 6f 6d 61 74 69 6f 6e 45 6c 65 6d 65 6e 74  utomationElement
0990: 20 20 22 24 53 57 41 2e 41 75 74 6f 6d 61 74 69    "$SWA.Automati
09a0: 6f 6e 45 6c 65 6d 65 6e 74 22 20 20 20 20 20 20  onElement"      
09b0: 20 20 20 20 20 20 2d 45 41 20 53 69 6c 65 6e 74        -EA Silent
09c0: 6c 79 43 6f 6e 74 69 6e 75 65 0d 0a 41 64 64 2d  lyContinue..Add-
09d0: 41 63 63 65 6c 65 72 61 74 6f 72 20 54 65 78 74  Accelerator Text
09e0: 52 61 6e 67 65 20 20 20 20 20 20 20 20 20 20 22  Range          "
09f0: 24 53 57 41 2e 54 65 78 74 2e 54 65 78 74 50 61  $SWA.Text.TextPa
0a00: 74 74 65 72 6e 52 61 6e 67 65 22 20 20 20 20 20  tternRange"     
0a10: 20 20 20 2d 45 41 20 53 69 6c 65 6e 74 6c 79 43     -EA SilentlyC
0a20: 6f 6e 74 69 6e 75 65 0d 0a 23 23 23 23 23 20 20  ontinue..#####  
0a30: 43 6f 6e 64 69 74 69 6f 6e 73 0d 0a 41 64 64 2d  Conditions..Add-
0a40: 41 63 63 65 6c 65 72 61 74 6f 72 20 43 6f 6e 64  Accelerator Cond
0a50: 69 74 69 6f 6e 20 20 20 20 20 20 20 20 20 20 22  ition          "
0a60: 24 53 57 41 2e 43 6f 6e 64 69 74 69 6f 6e 22 20  $SWA.Condition" 
0a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a80: 20 20 20 2d 45 41 20 53 69 6c 65 6e 74 6c 79 43     -EA SilentlyC
0a90: 6f 6e 74 69 6e 75 65 0d 0a 41 64 64 2d 41 63 63  ontinue..Add-Acc
0aa0: 65 6c 65 72 61 74 6f 72 20 41 6e 64 43 6f 6e 64  elerator AndCond
0ab0: 69 74 69 6f 6e 20 20 20 20 20 20 20 22 24 53 57  ition       "$SW
0ac0: 41 2e 41 6e 64 43 6f 6e 64 69 74 69 6f 6e 22 20  A.AndCondition" 
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ae0: 2d 45 41 20 53 69 6c 65 6e 74 6c 79 43 6f 6e 74  -EA SilentlyCont
0af0: 69 6e 75 65 0d 0a 41 64 64 2d 41 63 63 65 6c 65  inue..Add-Accele
0b00: 72 61 74 6f 72 20 4f 72 43 6f 6e 64 69 74 69 6f  rator OrConditio
0b10: 6e 20 20 20 20 20 20 20 20 22 24 53 57 41 2e 4f  n        "$SWA.O
0b20: 72 43 6f 6e 64 69 74 69 6f 6e 22 20 20 20 20 20  rCondition"     
0b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 45 41               -EA
0b40: 20 53 69 6c 65 6e 74 6c 79 43 6f 6e 74 69 6e 75   SilentlyContinu
0b50: 65 0d 0a 41 64 64 2d 41 63 63 65 6c 65 72 61 74  e..Add-Accelerat
0b60: 6f 72 20 4e 6f 74 43 6f 6e 64 69 74 69 6f 6e 20  or NotCondition 
0b70: 20 20 20 20 20 20 22 24 53 57 41 2e 4e 6f 74 43        "$SWA.NotC
0b80: 6f 6e 64 69 74 69 6f 6e 22 20 20 20 20 20 20 20  ondition"       
0b90: 20 20 20 20 20 20 20 20 20 20 2d 45 41 20 53 69            -EA Si
0ba0: 6c 65 6e 74 6c 79 43 6f 6e 74 69 6e 75 65 0d 0a  lentlyContinue..
0bb0: 41 64 64 2d 41 63 63 65 6c 65 72 61 74 6f 72 20  Add-Accelerator 
0bc0: 50 72 6f 70 65 72 74 79 43 6f 6e 64 69 74 69 6f  PropertyConditio
0bd0: 6e 20 20 22 24 53 57 41 2e 50 72 6f 70 65 72 74  n  "$SWA.Propert
0be0: 79 43 6f 6e 64 69 74 69 6f 6e 22 20 20 20 20 20  yCondition"     
0bf0: 20 20 20 20 20 20 20 2d 45 41 20 53 69 6c 65 6e         -EA Silen
0c00: 74 6c 79 43 6f 6e 74 69 6e 75 65 0d 0a 23 23 23  tlyContinue..###
0c10: 23 23 20 20 49 44 65 6e 74 69 66 69 65 72 73 0d  ##  IDentifiers.
0c20: 0a 41 64 64 2d 41 63 63 65 6c 65 72 61 74 6f 72  .Add-Accelerator
0c30: 20 41 75 74 6f 45 6c 65 6d 65 6e 74 49 64 73 20   AutoElementIds 
0c40: 20 20 20 20 22 24 53 57 41 2e 41 75 74 6f 6d 61      "$SWA.Automa
0c50: 74 69 6f 6e 45 6c 65 6d 65 6e 74 49 64 65 6e 74  tionElementIdent
0c60: 69 66 69 65 72 73 22 20 2d 45 41 20 53 69 6c 65  ifiers" -EA Sile
0c70: 6e 74 6c 79 43 6f 6e 74 69 6e 75 65 0d 0a 41 64  ntlyContinue..Ad
0c80: 64 2d 41 63 63 65 6c 65 72 61 74 6f 72 20 54 72  d-Accelerator Tr
0c90: 61 6e 73 66 6f 72 6d 49 64 73 20 20 20 20 20 20  ansformIds      
0ca0: 20 22 24 53 57 41 2e 54 72 61 6e 73 66 6f 72 6d   "$SWA.Transform
0cb0: 50 61 74 74 65 72 6e 49 64 65 6e 74 69 66 69 65  PatternIdentifie
0cc0: 72 73 22 20 20 2d 45 41 20 53 69 6c 65 6e 74 6c  rs"  -EA Silentl
0cd0: 79 43 6f 6e 74 69 6e 75 65 0d 0a 0d 0a 23 23 23  yContinue....###
0ce0: 23 23 20 50 61 74 74 65 72 6e 73 3a 0d 0a 24 70  ## Patterns:..$p
0cf0: 61 74 74 65 72 6e 73 20 3d 20 47 65 74 2d 54 79  atterns = Get-Ty
0d00: 70 65 20 2d 41 73 73 65 6d 62 6c 79 20 55 49 41  pe -Assembly UIA
0d10: 75 74 6f 6d 61 74 69 6f 6e 43 6c 69 65 6e 74 20  utomationClient 
0d20: 2d 42 61 73 65 20 53 79 73 74 65 6d 2e 57 69 6e  -Base System.Win
0d30: 64 6f 77 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e  dows.Automation.
0d40: 42 61 73 65 50 61 74 74 65 72 6e 20 0d 0a 20 20  BasePattern ..  
0d50: 20 20 20 20 20 20 20 20 20 20 23 7c 20 57 68 65            #| Whe
0d60: 72 65 20 7b 20 24 5f 20 2d 6e 65 20 5b 53 79 73  re { $_ -ne [Sys
0d70: 74 65 6d 2e 57 69 6e 64 6f 77 73 2e 41 75 74 6f  tem.Windows.Auto
0d80: 6d 61 74 69 6f 6e 2e 49 6e 76 6f 6b 65 50 61 74  mation.InvokePat
0d90: 74 65 72 6e 5d 20 7d 0d 0a 0d 0a 0d 0a 41 64 64  tern] }......Add
0da0: 2d 54 79 70 65 20 2d 4c 61 6e 67 75 61 67 65 20  -Type -Language 
0db0: 24 4c 61 6e 67 75 61 67 65 20 2d 52 65 66 65 72  $Language -Refer
0dc0: 65 6e 63 65 64 41 73 73 65 6d 62 6c 69 65 73 20  encedAssemblies 
0dd0: 55 49 41 75 74 6f 6d 61 74 69 6f 6e 43 6c 69 65  UIAutomationClie
0de0: 6e 74 2c 20 55 49 41 75 74 6f 6d 61 74 69 6f 6e  nt, UIAutomation
0df0: 54 79 70 65 73 20 2d 54 79 70 65 44 65 66 69 6e  Types -TypeDefin
0e00: 69 74 69 6f 6e 20 40 22 0d 0a 75 73 69 6e 67 20  ition @"..using 
0e10: 53 79 73 74 65 6d 3b 0d 0a 75 73 69 6e 67 20 53  System;..using S
0e20: 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e 65 6e 74 4d  ystem.ComponentM
0e30: 6f 64 65 6c 3b 0d 0a 75 73 69 6e 67 20 53 79 73  odel;..using Sys
0e40: 74 65 6d 2e 4d 61 6e 61 67 65 6d 65 6e 74 2e 41  tem.Management.A
0e50: 75 74 6f 6d 61 74 69 6f 6e 3b 0d 0a 75 73 69 6e  utomation;..usin
0e60: 67 20 53 79 73 74 65 6d 2e 52 65 66 6c 65 63 74  g System.Reflect
0e70: 69 6f 6e 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74  ion;..using Syst
0e80: 65 6d 2e 54 65 78 74 2e 52 65 67 75 6c 61 72 45  em.Text.RegularE
0e90: 78 70 72 65 73 73 69 6f 6e 73 3b 0d 0a 75 73 69  xpressions;..usi
0ea0: 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77  ng System.Window
0eb0: 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 3b 0d 0a 75  s.Automation;..u
0ec0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0ed0: 69 6d 65 2e 49 6e 74 65 72 6f 70 53 65 72 76 69  ime.InteropServi
0ee0: 63 65 73 3b 0d 0a 0d 0a 0d 0a 5b 41 74 74 72 69  ces;......[Attri
0ef0: 62 75 74 65 55 73 61 67 65 28 41 74 74 72 69 62  buteUsage(Attrib
0f00: 75 74 65 54 61 72 67 65 74 73 2e 46 69 65 6c 64  uteTargets.Field
0f10: 20 7c 20 41 74 74 72 69 62 75 74 65 54 61 72 67   | AttributeTarg
0f20: 65 74 73 2e 50 72 6f 70 65 72 74 79 29 5d 0d 0a  ets.Property)]..
0f30: 70 75 62 6c 69 63 20 63 6c 61 73 73 20 53 74 61  public class Sta
0f40: 74 69 63 46 69 65 6c 64 41 74 74 72 69 62 75 74  ticFieldAttribut
0f50: 65 20 3a 20 41 72 67 75 6d 65 6e 74 54 72 61 6e  e : ArgumentTran
0f60: 73 66 6f 72 6d 61 74 69 6f 6e 41 74 74 72 69 62  sformationAttrib
0f70: 75 74 65 20 7b 0d 0a 20 20 20 70 72 69 76 61 74  ute {..   privat
0f80: 65 20 54 79 70 65 20 5f 63 6c 61 73 73 3b 0d 0a  e Type _class;..
0f90: 0d 0a 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  ..   public over
0fa0: 72 69 64 65 20 73 74 72 69 6e 67 20 54 6f 53 74  ride string ToSt
0fb0: 72 69 6e 67 28 29 20 7b 0d 0a 20 20 20 20 20 20  ring() {..      
0fc0: 72 65 74 75 72 6e 20 73 74 72 69 6e 67 2e 46 6f  return string.Fo
0fd0: 72 6d 61 74 28 22 5b 53 74 61 74 69 63 46 69 65  rmat("[StaticFie
0fe0: 6c 64 28 4f 66 43 6c 61 73 73 3d 27 7b 30 7d 27  ld(OfClass='{0}'
0ff0: 29 5d 22 2c 20 4f 66 43 6c 61 73 73 2e 46 75 6c  )]", OfClass.Ful
1000: 6c 4e 61 6d 65 29 3b 0d 0a 20 20 20 7d 0d 0a 0d  lName);..   }...
1010: 0a 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72  .   public overr
1020: 69 64 65 20 4f 62 6a 65 63 74 20 54 72 61 6e 73  ide Object Trans
1030: 66 6f 72 6d 28 20 45 6e 67 69 6e 65 49 6e 74 72  form( EngineIntr
1040: 69 6e 73 69 63 73 20 65 6e 67 69 6e 65 49 6e 74  insics engineInt
1050: 72 69 6e 73 69 63 73 2c 20 4f 62 6a 65 63 74 20  rinsics, Object 
1060: 69 6e 70 75 74 44 61 74 61 29 20 7b 0d 0a 20 20  inputData) {..  
1070: 20 20 20 20 69 66 28 69 6e 70 75 74 44 61 74 61      if(inputData
1080: 20 69 73 20 73 74 72 69 6e 67 20 26 26 20 21 73   is string && !s
1090: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
10a0: 70 74 79 28 69 6e 70 75 74 44 61 74 61 20 61 73  pty(inputData as
10b0: 20 73 74 72 69 6e 67 29 29 20 7b 0d 0a 20 20 20   string)) {..   
10c0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 52 65 66        System.Ref
10d0: 6c 65 63 74 69 6f 6e 2e 46 69 65 6c 64 49 6e 66  lection.FieldInf
10e0: 6f 20 66 69 65 6c 64 20 3d 20 5f 63 6c 61 73 73  o field = _class
10f0: 2e 47 65 74 46 69 65 6c 64 28 69 6e 70 75 74 44  .GetField(inputD
1100: 61 74 61 20 61 73 20 73 74 72 69 6e 67 2c 20 42  ata as string, B
1110: 69 6e 64 69 6e 67 46 6c 61 67 73 2e 53 74 61 74  indingFlags.Stat
1120: 69 63 20 7c 20 42 69 6e 64 69 6e 67 46 6c 61 67  ic | BindingFlag
1130: 73 2e 50 75 62 6c 69 63 29 3b 0d 0a 20 20 20 20  s.Public);..    
1140: 20 20 20 20 20 69 66 28 66 69 65 6c 64 20 21 3d       if(field !=
1150: 20 6e 75 6c 6c 29 20 7b 0d 0a 20 20 20 20 20 20   null) {..      
1160: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 69 65        return fie
1170: 6c 64 2e 47 65 74 56 61 6c 75 65 28 6e 75 6c 6c  ld.GetValue(null
1180: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 7d 0d 0a  );..         }..
1190: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 72        }..      r
11a0: 65 74 75 72 6e 20 69 6e 70 75 74 44 61 74 61 3b  eturn inputData;
11b0: 0d 0a 20 20 20 7d 0d 0a 20 20 20 0d 0a 20 20 20  ..   }..   ..   
11c0: 70 75 62 6c 69 63 20 53 74 61 74 69 63 46 69 65  public StaticFie
11d0: 6c 64 41 74 74 72 69 62 75 74 65 28 20 54 79 70  ldAttribute( Typ
11e0: 65 20 6f 66 43 6c 61 73 73 20 29 20 7b 0d 0a 20  e ofClass ) {.. 
11f0: 20 20 20 20 20 4f 66 43 6c 61 73 73 20 3d 20 6f       OfClass = o
1200: 66 43 6c 61 73 73 3b 0d 0a 20 20 20 7d 0d 0a 0d  fClass;..   }...
1210: 0a 20 20 20 70 75 62 6c 69 63 20 54 79 70 65 20  .   public Type 
1220: 4f 66 43 6c 61 73 73 20 7b 0d 0a 20 20 20 20 20  OfClass {..     
1230: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 63   get { return _c
1240: 6c 61 73 73 3b 20 7d 0d 0a 20 20 20 20 20 20 73  lass; }..      s
1250: 65 74 20 7b 20 5f 63 6c 61 73 73 20 3d 20 76 61  et { _class = va
1260: 6c 75 65 3b 20 7d 0d 0a 20 20 20 7d 20 20 20 0d  lue; }..   }   .
1270: 0a 7d 0d 0a 0d 0a 70 75 62 6c 69 63 20 73 74 61  .}....public sta
1280: 74 69 63 20 63 6c 61 73 73 20 55 49 41 75 74 6f  tic class UIAuto
1290: 6d 61 74 69 6f 6e 48 65 6c 70 65 72 20 7b 0d 0a  mationHelper {..
12a0: 0d 0a 20 20 20 5b 44 6c 6c 49 6d 70 6f 72 74 20  ..   [DllImport 
12b0: 28 22 75 73 65 72 33 32 2e 64 6c 6c 22 2c 20 43  ("user32.dll", C
12c0: 68 61 72 53 65 74 20 3d 20 43 68 61 72 53 65 74  harSet = CharSet
12d0: 2e 41 75 74 6f 29 5d 0d 0a 20 20 20 73 74 61 74  .Auto)]..   stat
12e0: 69 63 20 65 78 74 65 72 6e 20 49 6e 74 50 74 72  ic extern IntPtr
12f0: 20 46 69 6e 64 57 69 6e 64 6f 77 20 28 73 74 72   FindWindow (str
1300: 69 6e 67 20 6c 70 43 6c 61 73 73 4e 61 6d 65 2c  ing lpClassName,
1310: 20 73 74 72 69 6e 67 20 6c 70 57 69 6e 64 6f 77   string lpWindow
1320: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 5b 44 6c  Name);....   [Dl
1330: 6c 49 6d 70 6f 72 74 20 28 22 75 73 65 72 33 32  lImport ("user32
1340: 2e 64 6c 6c 22 2c 20 43 68 61 72 53 65 74 20 3d  .dll", CharSet =
1350: 20 43 68 61 72 53 65 74 2e 41 75 74 6f 29 5d 0d   CharSet.Auto)].
1360: 0a 20 20 20 73 74 61 74 69 63 20 65 78 74 65 72  .   static exter
1370: 6e 20 62 6f 6f 6c 20 41 74 74 61 63 68 54 68 72  n bool AttachThr
1380: 65 61 64 49 6e 70 75 74 20 28 69 6e 74 20 69 64  eadInput (int id
1390: 41 74 74 61 63 68 2c 20 69 6e 74 20 69 64 41 74  Attach, int idAt
13a0: 74 61 63 68 54 6f 2c 20 62 6f 6f 6c 20 66 41 74  tachTo, bool fAt
13b0: 74 61 63 68 29 3b 0d 0a 0d 0a 20 20 20 5b 44 6c  tach);....   [Dl
13c0: 6c 49 6d 70 6f 72 74 20 28 22 75 73 65 72 33 32  lImport ("user32
13d0: 2e 64 6c 6c 22 2c 20 43 68 61 72 53 65 74 20 3d  .dll", CharSet =
13e0: 20 43 68 61 72 53 65 74 2e 41 75 74 6f 29 5d 0d   CharSet.Auto)].
13f0: 0a 20 20 20 73 74 61 74 69 63 20 65 78 74 65 72  .   static exter
1400: 6e 20 69 6e 74 20 47 65 74 57 69 6e 64 6f 77 54  n int GetWindowT
1410: 68 72 65 61 64 50 72 6f 63 65 73 73 49 64 20 28  hreadProcessId (
1420: 49 6e 74 50 74 72 20 68 57 6e 64 2c 20 49 6e 74  IntPtr hWnd, Int
1430: 50 74 72 20 6c 70 64 77 50 72 6f 63 65 73 73 49  Ptr lpdwProcessI
1440: 64 29 3b 0d 0a 0d 0a 20 20 20 5b 44 6c 6c 49 6d  d);....   [DllIm
1450: 70 6f 72 74 20 28 22 75 73 65 72 33 32 2e 64 6c  port ("user32.dl
1460: 6c 22 2c 20 43 68 61 72 53 65 74 20 3d 20 43 68  l", CharSet = Ch
1470: 61 72 53 65 74 2e 41 75 74 6f 29 5d 0d 0a 20 20  arSet.Auto)]..  
1480: 20 73 74 61 74 69 63 20 65 78 74 65 72 6e 20 49   static extern I
1490: 6e 74 50 74 72 20 53 65 74 46 6f 72 65 67 72 6f  ntPtr SetForegro
14a0: 75 6e 64 57 69 6e 64 6f 77 20 28 49 6e 74 50 74  undWindow (IntPt
14b0: 72 20 68 57 6e 64 29 3b 0d 0a 0d 0a 20 20 20 70  r hWnd);....   p
14c0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 41 75 74  ublic static Aut
14d0: 6f 6d 61 74 69 6f 6e 45 6c 65 6d 65 6e 74 20 52  omationElement R
14e0: 6f 6f 74 45 6c 65 6d 65 6e 74 20 7b 0d 0a 20 20  ootElement {..  
14f0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1500: 20 41 75 74 6f 6d 61 74 69 6f 6e 45 6c 65 6d 65   AutomationEleme
1510: 6e 74 2e 52 6f 6f 74 45 6c 65 6d 65 6e 74 3b 20  nt.RootElement; 
1520: 7d 0d 0a 20 20 20 7d 0d 0a 0d 0a 0d 0a 20 20 20  }..   }......   
1530: 2f 2f 2f 3c 73 79 6e 6f 70 73 69 73 3e 55 73 69  ///<synopsis>Usi
1540: 6e 67 20 57 69 6e 33 32 20 74 6f 20 73 65 74 20  ng Win32 to set 
1550: 66 6f 72 65 67 72 6f 75 6e 64 20 77 69 6e 64 6f  foreground windo
1560: 77 20 62 65 63 61 75 73 65 20 41 75 74 6f 6d 61  w because Automa
1570: 74 69 6f 6e 45 6c 65 6d 65 6e 74 2e 53 65 74 46  tionElement.SetF
1580: 6f 63 75 73 28 29 20 69 73 20 75 6e 72 65 6c 69  ocus() is unreli
1590: 61 62 6c 65 3c 2f 73 79 6e 6f 70 73 69 73 3e 0d  able</synopsis>.
15a0: 0a 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69  .   public stati
15b0: 63 20 62 6f 6f 6c 20 53 65 74 46 6f 72 65 67 72  c bool SetForegr
15c0: 6f 75 6e 64 28 74 68 69 73 20 41 75 74 6f 6d 61  ound(this Automa
15d0: 74 69 6f 6e 45 6c 65 6d 65 6e 74 20 65 6c 65 6d  tionElement elem
15e0: 65 6e 74 29 0d 0a 20 20 20 7b 0d 0a 20 20 20 20  ent)..   {..    
15f0: 20 20 69 66 28 65 6c 65 6d 65 6e 74 20 3d 3d 20    if(element == 
1600: 6e 75 6c 6c 29 20 7b 20 0d 0a 20 20 20 20 20 20  null) { ..      
1610: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
1620: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
1630: 6f 6e 28 22 65 6c 65 6d 65 6e 74 22 29 3b 0d 0a  on("element");..
1640: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1650: 20 2f 2f 20 47 65 74 20 68 61 6e 64 6c 65 20 74   // Get handle t
1660: 6f 20 74 68 65 20 65 6c 65 6d 65 6e 74 0d 0a 20  o the element.. 
1670: 20 20 20 20 20 49 6e 74 50 74 72 20 6f 74 68 65       IntPtr othe
1680: 72 20 3d 20 46 69 6e 64 57 69 6e 64 6f 77 20 28  r = FindWindow (
1690: 6e 75 6c 6c 2c 20 65 6c 65 6d 65 6e 74 2e 43 75  null, element.Cu
16a0: 72 72 65 6e 74 2e 4e 61 6d 65 29 3b 0d 0a 0d 0a  rrent.Name);....
16b0: 20 20 20 20 20 20 2f 2f 20 2f 2f 20 47 65 74 20        // // Get 
16c0: 74 68 65 20 50 72 6f 63 65 73 73 20 49 44 20 66  the Process ID f
16d0: 6f 72 20 74 68 65 20 65 6c 65 6d 65 6e 74 20 77  or the element w
16e0: 65 20 61 72 65 20 74 72 79 69 6e 67 20 74 6f 0d  e are trying to.
16f0: 0a 20 20 20 20 20 20 2f 2f 20 2f 2f 20 73 65 74  .      // // set
1700: 20 61 73 20 74 68 65 20 66 6f 72 65 67 72 6f 75   as the foregrou
1710: 6e 64 20 65 6c 65 6d 65 6e 74 0d 0a 20 20 20 20  nd element..    
1720: 20 20 2f 2f 20 69 6e 74 20 6f 74 68 65 72 5f 69    // int other_i
1730: 64 20 3d 20 47 65 74 57 69 6e 64 6f 77 54 68 72  d = GetWindowThr
1740: 65 61 64 50 72 6f 63 65 73 73 49 64 20 28 6f 74  eadProcessId (ot
1750: 68 65 72 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  her, IntPtr.Zero
1760: 29 3b 0d 0a 20 20 20 20 20 20 2f 2f 20 0d 0a 20  );..      // .. 
1770: 20 20 20 20 20 2f 2f 20 2f 2f 20 47 65 74 20 74       // // Get t
1780: 68 65 20 50 72 6f 63 65 73 73 20 49 44 20 66 6f  he Process ID fo
1790: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  r the current pr
17a0: 6f 63 65 73 73 0d 0a 20 20 20 20 20 20 2f 2f 20  ocess..      // 
17b0: 69 6e 74 20 74 68 69 73 5f 69 64 20 3d 20 47 65  int this_id = Ge
17c0: 74 57 69 6e 64 6f 77 54 68 72 65 61 64 50 72 6f  tWindowThreadPro
17d0: 63 65 73 73 49 64 20 28 50 72 6f 63 65 73 73 2e  cessId (Process.
17e0: 47 65 74 43 75 72 72 65 6e 74 50 72 6f 63 65 73  GetCurrentProces
17f0: 73 28 29 2e 48 61 6e 64 6c 65 2c 20 49 6e 74 50  s().Handle, IntP
1800: 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 20  tr.Zero);..     
1810: 20 2f 2f 20 0d 0a 20 20 20 20 20 20 2f 2f 20 2f   // ..      // /
1820: 2f 20 41 74 74 61 63 68 20 74 68 65 20 63 75 72  / Attach the cur
1830: 72 65 6e 74 20 70 72 6f 63 65 73 73 27 73 20 69  rent process's i
1840: 6e 70 75 74 20 74 6f 20 74 68 61 74 20 6f 66 20  nput to that of 
1850: 74 68 65 20 0d 0a 20 20 20 20 20 20 2f 2f 20 2f  the ..      // /
1860: 2f 20 67 69 76 65 6e 20 65 6c 65 6d 65 6e 74 2e  / given element.
1870: 20 57 65 20 68 61 76 65 20 74 6f 20 64 6f 20 74   We have to do t
1880: 68 69 73 20 6f 74 68 65 72 77 69 73 65 20 74 68  his otherwise th
1890: 65 0d 0a 20 20 20 20 20 20 2f 2f 20 2f 2f 20 57  e..      // // W
18a0: 4d 5f 53 45 54 46 4f 43 55 53 20 6d 65 73 73 61  M_SETFOCUS messa
18b0: 67 65 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72  ge will be ignor
18c0: 65 64 20 62 79 20 74 68 65 20 65 6c 65 6d 65 6e  ed by the elemen
18d0: 74 2e 0d 0a 20 20 20 20 20 20 2f 2f 20 62 6f 6f  t...      // boo
18e0: 6c 20 73 75 63 63 65 73 73 20 3d 20 41 74 74 61  l success = Atta
18f0: 63 68 54 68 72 65 61 64 49 6e 70 75 74 28 74 68  chThreadInput(th
1900: 69 73 5f 69 64 2c 20 6f 74 68 65 72 5f 69 64 2c  is_id, other_id,
1910: 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   true);....     
1920: 20 2f 2f 20 4d 61 6b 65 20 74 68 65 20 57 69 6e   // Make the Win
1930: 33 32 20 63 61 6c 6c 0d 0a 20 20 20 20 20 20 49  32 call..      I
1940: 6e 74 50 74 72 20 70 72 65 76 69 6f 75 73 20 3d  ntPtr previous =
1950: 20 53 65 74 46 6f 72 65 67 72 6f 75 6e 64 57 69   SetForegroundWi
1960: 6e 64 6f 77 28 6f 74 68 65 72 29 3b 0d 0a 0d 0a  ndow(other);....
1970: 20 20 20 20 20 20 72 65 74 75 72 6e 20 21 49 6e        return !In
1980: 74 50 74 72 2e 5a 65 72 6f 2e 45 71 75 61 6c 73  tPtr.Zero.Equals
1990: 28 70 72 65 76 69 6f 75 73 29 3b 0d 0a 20 20 20  (previous);..   
19a0: 7d 0d 0a 7d 0d 0a 22 40 0d 0a 20 20 20 20 20 20  }..}.."@..      
19b0: 20 20 20 20 20 20 0d 0a 23 23 20 54 4f 44 4f 3a        ..## TODO:
19c0: 20 57 72 69 74 65 20 47 65 74 2d 53 75 70 70 6f   Write Get-Suppo
19d0: 72 74 65 64 50 61 74 74 65 72 6e 73 20 6f 72 20  rtedPatterns or 
19e0: 72 61 74 68 65 72 20 2e 2e 2e 20 0d 0a 23 23 20  rather ... ..## 
19f0: 47 65 74 2d 53 75 70 70 6f 72 74 65 64 46 75 6e  Get-SupportedFun
1a00: 63 74 69 6f 6e 73 20 28 74 6f 20 72 65 74 75 72  ctions (to retur
1a10: 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74  n the names of t
1a20: 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f 72  he functions for
1a30: 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 70   the supported p
1a40: 61 74 74 65 72 6e 73 29 0d 0a 23 23 20 54 4f 44  atterns)..## TOD
1a50: 4f 3a 20 53 75 70 70 6f 72 74 20 61 6c 6c 20 74  O: Support all t
1a60: 68 65 20 22 50 72 6f 70 65 72 74 69 65 73 22 20  he "Properties" 
1a70: 74 6f 6f 0d 0a 23 23 20 54 4f 44 4f 3a 20 46 69  too..## TODO: Fi
1a80: 67 75 72 65 20 6f 75 74 20 77 68 79 20 4e 6f 74  gure out why Not
1a90: 65 70 61 64 20 64 6f 65 73 6e 27 74 20 73 75 70  epad doesn't sup
1aa0: 70 6f 72 74 20 53 65 74 56 61 6c 75 65 0d 0a 23  port SetValue..#
1ab0: 23 20 54 4f 44 4f 3a 20 46 69 67 75 72 65 20 6f  # TODO: Figure o
1ac0: 75 74 20 77 68 65 72 65 20 74 68 65 20 6d 65 6e  ut where the men
1ad0: 75 73 20 73 75 70 70 6f 72 74 20 77 65 6e 74 0d  us support went.
1ae0: 0a 46 6f 72 45 61 63 68 28 24 70 61 74 74 65 72  .ForEach($patter
1af0: 6e 20 69 6e 20 24 70 61 74 74 65 72 6e 73 29 7b  n in $patterns){
1b00: 0d 0a 20 20 20 24 70 61 74 74 65 72 6e 20 7c 20  ..   $pattern | 
1b10: 41 64 64 2d 41 63 63 65 6c 65 72 61 74 6f 72 0d  Add-Accelerator.
1b20: 0a 20 20 20 24 50 61 74 74 65 72 6e 46 75 6c 6c  .   $PatternFull
1b30: 4e 61 6d 65 20 3d 20 24 70 61 74 74 65 72 6e 2e  Name = $pattern.
1b40: 46 75 6c 6c 4e 61 6d 65 0d 0a 20 20 20 24 50 61  FullName..   $Pa
1b50: 74 74 65 72 6e 4e 61 6d 65 20 3d 20 24 50 61 74  tternName = $Pat
1b60: 74 65 72 6e 2e 4e 61 6d 65 20 2d 52 65 70 6c 61  tern.Name -Repla
1b70: 63 65 20 22 50 61 74 74 65 72 6e 22 2c 22 2e 22  ce "Pattern","."
1b80: 0d 0a 20 20 20 24 6e 65 77 6c 69 6e 65 20 3d 20  ..   $newline = 
1b90: 22 60 6e 60 74 60 74 22 0d 0a 20 20 20 0d 0a 20  "`n`t`t"..   .. 
1ba0: 20 20 4e 65 77 2d 49 74 65 6d 20 22 46 75 6e 63    New-Item "Func
1bb0: 74 69 6f 6e 3a 43 6f 6e 76 65 72 74 54 6f 2d 24  tion:ConvertTo-$
1bc0: 28 24 50 61 74 74 65 72 6e 2e 4e 61 6d 65 29 22  ($Pattern.Name)"
1bd0: 20 2d 56 61 6c 75 65 20 22 0d 0a 20 20 20 70 61   -Value "..   pa
1be0: 72 61 6d 28 0d 0a 20 20 20 20 20 20 5b 50 61 72  ram(..      [Par
1bf0: 61 6d 65 74 65 72 28 56 61 6c 75 65 46 72 6f 6d  ameter(ValueFrom
1c00: 50 69 70 65 6c 69 6e 65 3d 60 24 74 72 75 65 29  Pipeline=`$true)
1c10: 5d 5b 41 6c 69 61 73 28 27 45 6c 65 6d 65 6e 74  ][Alias('Element
1c20: 27 2c 27 41 75 74 6f 6d 61 74 69 6f 6e 45 6c 65  ','AutomationEle
1c30: 6d 65 6e 74 27 29 5d 5b 41 75 74 6f 6d 61 74 69  ment')][Automati
1c40: 6f 6e 45 6c 65 6d 65 6e 74 5d 60 24 49 6e 70 75  onElement]`$Inpu
1c50: 74 4f 62 6a 65 63 74 0d 0a 20 20 20 29 0d 0a 20  tObject..   ).. 
1c60: 20 20 70 72 6f 63 65 73 73 20 7b 20 0d 0a 20 20    process { ..  
1c70: 20 20 20 20 74 72 61 70 20 7b 20 0d 0a 20 20 20      trap { ..   
1c80: 20 20 20 20 20 20 69 66 28 60 24 5f 2e 45 78 63        if(`$_.Exc
1c90: 65 70 74 69 6f 6e 2e 4d 65 73 73 61 67 65 20 2d  eption.Message -
1ca0: 6c 69 6b 65 20 27 2a 55 6e 73 75 70 70 6f 72 74  like '*Unsupport
1cb0: 65 64 20 50 61 74 74 65 72 6e 2e 2a 27 29 20 7b  ed Pattern.*') {
1cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 57 72  ..            Wr
1cd0: 69 74 65 2d 45 72 72 6f 72 20 60 22 43 61 6e 6e  ite-Error `"Cann
1ce0: 6f 74 20 67 65 74 20 60 60 60 22 24 28 24 50 61  ot get ```"$($Pa
1cf0: 74 74 65 72 6e 2e 4e 61 6d 65 29 60 60 60 22 20  ttern.Name)```" 
1d00: 66 72 6f 6d 20 74 68 61 74 20 41 75 74 6f 6d 61  from that Automa
1d10: 74 69 6f 6e 45 6c 65 6d 65 6e 74 2c 20 60 24 28  tionElement, `$(
1d20: 60 24 5f 29 60 20 59 6f 75 20 73 68 6f 75 6c 64  `$_)` You should
1d30: 20 74 72 79 20 6f 6e 65 20 6f 66 3a 20 60 24 28   try one of: `$(
1d40: 60 24 49 6e 70 75 74 4f 62 6a 65 63 74 2e 47 65  `$InputObject.Ge
1d50: 74 53 75 70 70 6f 72 74 65 64 50 61 74 74 65 72  tSupportedPatter
1d60: 6e 73 28 29 7c 25 7b 60 60 60 22 27 60 60 60 22  ns()|%{```"'```"
1d70: 20 2b 20 28 60 24 5f 2e 50 72 6f 67 72 61 6d 6d   + (`$_.Programm
1d80: 61 74 69 63 4e 61 6d 65 2e 52 65 70 6c 61 63 65  aticName.Replace
1d90: 28 60 60 60 22 50 61 74 74 65 72 6e 49 64 65 6e  (```"PatternIden
1da0: 74 69 66 69 65 72 73 2e 50 61 74 74 65 72 6e 60  tifiers.Pattern`
1db0: 60 60 22 2c 60 60 60 22 60 60 60 22 29 29 20 2b  ``",```"```")) +
1dc0: 20 60 60 60 22 50 61 74 74 65 72 6e 27 60 60 60   ```"Pattern'```
1dd0: 22 7d 29 60 22 3b 20 63 6f 6e 74 69 6e 75 65 3b  "})`"; continue;
1de0: 0d 0a 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ..         }..  
1df0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 57 72 69      }..      Wri
1e00: 74 65 2d 4f 75 74 70 75 74 20 60 24 49 6e 70 75  te-Output `$Inpu
1e10: 74 4f 62 6a 65 63 74 2e 47 65 74 43 75 72 72 65  tObject.GetCurre
1e20: 6e 74 50 61 74 74 65 72 6e 28 5b 24 50 61 74 74  ntPattern([$Patt
1e30: 65 72 6e 46 75 6c 6c 4e 61 6d 65 5d 3a 3a 50 61  ernFullName]::Pa
1e40: 74 74 65 72 6e 29 2e 43 75 72 72 65 6e 74 0d 0a  ttern).Current..
1e50: 20 20 20 7d 22 0d 0a 20 20 20 0d 0a 20 20 20 24     }"..   ..   $
1e60: 70 61 74 74 65 72 6e 2e 47 65 74 4d 65 74 68 6f  pattern.GetMetho
1e70: 64 73 28 29 20 7c 20 0d 0a 20 20 20 57 68 65 72  ds() | ..   Wher
1e80: 65 20 7b 20 24 5f 2e 44 65 63 6c 61 72 69 6e 67  e { $_.Declaring
1e90: 54 79 70 65 20 2d 65 71 20 24 5f 2e 52 65 66 6c  Type -eq $_.Refl
1ea0: 65 63 74 65 64 54 79 70 65 20 2d 61 6e 64 20 21  ectedType -and !
1eb0: 24 5f 2e 49 73 53 70 65 63 69 61 6c 4e 61 6d 65  $_.IsSpecialName
1ec0: 20 7d 20 7c 20 0d 0a 20 20 20 46 6f 72 45 61 63   } | ..   ForEac
1ed0: 68 20 7b 0d 0a 20 20 20 20 20 20 24 46 75 6e 63  h {..      $Func
1ee0: 74 69 6f 6e 4e 61 6d 65 20 3d 20 22 46 75 6e 63  tionName = "Func
1ef0: 74 69 6f 6e 3a 49 6e 76 6f 6b 65 2d 24 50 61 74  tion:Invoke-$Pat
1f00: 74 65 72 6e 4e 61 6d 65 24 28 24 5f 2e 4e 61 6d  ternName$($_.Nam
1f10: 65 29 22 0d 0a 20 20 20 20 20 20 24 50 6f 73 69  e)"..      $Posi
1f20: 74 69 6f 6e 20 3d 20 31 0d 0a 20 20 20 20 20 20  tion = 1..      
1f30: 0d 0a 20 20 20 20 20 20 69 66 20 28 74 65 73 74  ..      if (test
1f40: 2d 70 61 74 68 20 24 46 75 6e 63 74 69 6f 6e 4e  -path $FunctionN
1f50: 61 6d 65 29 20 7b 20 72 65 6d 6f 76 65 2d 69 74  ame) { remove-it
1f60: 65 6d 20 24 46 75 6e 63 74 69 6f 6e 4e 61 6d 65  em $FunctionName
1f70: 20 7d 0d 0a 20 20 20 20 20 20 24 50 61 72 61 6d   }..      $Param
1f80: 65 74 65 72 73 20 3d 20 40 28 22 24 6e 65 77 6c  eters = @("$newl
1f90: 69 6e 65 5b 50 61 72 61 6d 65 74 65 72 28 56 61  ine[Parameter(Va
1fa0: 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d  lueFromPipeline=
1fb0: 60 24 74 72 75 65 29 5d 22 2b 0d 0a 20 20 20 20  `$true)]"+..    
1fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd0: 20 20 22 24 6e 65 77 6c 69 6e 65 5b 41 6c 69 61    "$newline[Alia
1fe0: 73 28 27 50 61 72 65 6e 74 27 2c 27 45 6c 65 6d  s('Parent','Elem
1ff0: 65 6e 74 27 2c 27 52 6f 6f 74 27 2c 27 41 75 74  ent','Root','Aut
2000: 6f 6d 61 74 69 6f 6e 45 6c 65 6d 65 6e 74 27 29  omationElement')
2010: 5d 22 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]"+..           
2020: 20 20 20 20 20 20 20 20 20 20 20 22 24 6e 65 77             "$new
2030: 6c 69 6e 65 5b 41 75 74 6f 6d 61 74 69 6f 6e 45  line[AutomationE
2040: 6c 65 6d 65 6e 74 5d 60 24 49 6e 70 75 74 4f 62  lement]`$InputOb
2050: 6a 65 63 74 22 0d 0a 20 20 20 20 20 20 20 20 20  ject"..         
2060: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 20 2b               ) +
2070: 20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ..             
2080: 20 20 20 20 20 20 20 40 28 0d 0a 20 20 20 20 20         @(..     
2090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a0: 20 22 5b 50 61 72 61 6d 65 74 65 72 28 29 5d 24   "[Parameter()]$
20b0: 6e 65 77 6c 69 6e 65 5b 53 77 69 74 63 68 5d 60  newline[Switch]`
20c0: 24 50 61 73 73 74 68 72 75 22 0d 0a 20 20 20 20  $Passthru"..    
20d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e0: 20 29 20 2b 20 0d 0a 20 20 20 20 20 20 20 20 20   ) + ..         
20f0: 20 20 20 20 20 20 20 20 20 20 20 40 28 24 5f 2e             @($_.
2100: 47 65 74 50 61 72 61 6d 65 74 65 72 73 28 29 20  GetParameters() 
2110: 7c 20 25 20 7b 20 22 5b 50 61 72 61 6d 65 74 65  | % { "[Paramete
2120: 72 28 50 6f 73 69 74 69 6f 6e 3d 24 28 24 50 6f  r(Position=$($Po
2130: 73 69 74 69 6f 6e 3b 20 24 50 6f 73 69 74 69 6f  sition; $Positio
2140: 6e 2b 2b 29 29 5d 24 6e 65 77 6c 69 6e 65 5b 24  n++))]$newline[$
2150: 28 24 5f 2e 50 61 72 61 6d 65 74 65 72 54 79 70  ($_.ParameterTyp
2160: 65 2e 46 75 6c 6c 4e 61 6d 65 29 5d 60 24 24 28  e.FullName)]`$$(
2170: 24 5f 2e 4e 61 6d 65 29 22 20 7d 29 0d 0a 20 20  $_.Name)" })..  
2180: 20 20 20 20 24 50 61 72 61 6d 65 74 65 72 73 20      $Parameters 
2190: 3d 20 24 50 61 72 61 6d 65 74 65 72 73 20 2d 4a  = $Parameters -J
21a0: 6f 69 6e 20 22 24 6e 65 77 6c 69 6e 65 2c 24 6e  oin "$newline,$n
21b0: 65 77 6c 69 6e 65 22 0d 0a 20 20 20 20 20 20 24  ewline"..      $
21c0: 50 61 72 61 6d 65 74 65 72 56 61 6c 75 65 73 20  ParameterValues 
21d0: 3d 20 27 24 27 20 2b 20 28 40 28 24 5f 2e 47 65  = '$' + (@($_.Ge
21e0: 74 50 61 72 61 6d 65 74 65 72 73 28 29 20 7c 20  tParameters() | 
21f0: 53 65 6c 65 63 74 2d 4f 62 6a 65 63 74 20 2d 45  Select-Object -E
2200: 78 70 61 6e 64 20 4e 61 6d 65 20 29 20 2d 4a 6f  xpand Name ) -Jo
2210: 69 6e 20 27 2c 20 24 27 29 0d 0a 0d 0a 20 20 20  in ', $')....   
2220: 20 20 20 24 64 65 66 69 6e 69 74 69 6f 6e 20 3d     $definition =
2230: 20 40 22 0d 0a 20 20 20 70 61 72 61 6d 28 0d 0a   @"..   param(..
2240: 20 20 20 20 20 20 24 50 61 72 61 6d 65 74 65 72        $Parameter
2250: 73 0d 0a 20 20 20 29 0d 0a 20 20 20 70 72 6f 63  s..   )..   proc
2260: 65 73 73 20 7b 20 0d 0a 20 20 20 20 20 20 23 23  ess { ..      ##
2270: 20 74 72 61 70 20 7b 20 57 72 69 74 65 2d 57 61   trap { Write-Wa
2280: 72 6e 69 6e 67 20 22 60 24 28 60 24 5f 29 22 3b  rning "`$(`$_)";
2290: 20 62 72 65 61 6b 20 7d 0d 0a 20 20 20 20 20 20   break }..      
22a0: 60 24 70 61 74 74 65 72 6e 20 3d 20 60 24 49 6e  `$pattern = `$In
22b0: 70 75 74 4f 62 6a 65 63 74 2e 47 65 74 43 75 72  putObject.GetCur
22c0: 72 65 6e 74 50 61 74 74 65 72 6e 28 5b 24 50 61  rentPattern([$Pa
22d0: 74 74 65 72 6e 46 75 6c 6c 4e 61 6d 65 5d 3a 3a  tternFullName]::
22e0: 50 61 74 74 65 72 6e 29 0d 0a 20 20 20 20 20 20  Pattern)..      
22f0: 69 66 28 60 24 70 61 74 74 65 72 6e 29 20 7b 0d  if(`$pattern) {.
2300: 0a 20 20 20 20 20 20 20 20 20 60 24 50 61 74 74  .         `$Patt
2310: 65 72 6e 2e 24 28 24 5f 2e 4e 61 6d 65 29 28 24  ern.$($_.Name)($
2320: 28 69 66 28 24 50 61 72 61 6d 65 74 65 72 56 61  (if($ParameterVa
2330: 6c 75 65 73 2e 4c 65 6e 67 74 68 20 2d 67 74 20  lues.Length -gt 
2340: 31 29 7b 20 24 50 61 72 61 6d 65 74 65 72 56 61  1){ $ParameterVa
2350: 6c 75 65 73 20 7d 29 29 0d 0a 20 20 20 20 20 20  lues }))..      
2360: 7d 0d 0a 20 20 20 20 20 20 69 66 28 60 24 70 61  }..      if(`$pa
2370: 73 73 74 68 72 75 29 20 7b 0d 0a 20 20 20 20 20  ssthru) {..     
2380: 20 20 20 20 60 24 49 6e 70 75 74 4f 62 6a 65 63      `$InputObjec
2390: 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 7d  t..      }..   }
23a0: 0d 0a 22 40 0d 0a 20 20 20 20 20 20 0d 0a 20 20  .."@..      ..  
23b0: 20 20 20 20 74 72 61 70 20 7b 0d 0a 20 20 20 20      trap {..    
23c0: 20 20 20 20 20 57 72 69 74 65 2d 57 61 72 6e 69       Write-Warni
23d0: 6e 67 20 24 5f 0d 0a 20 20 20 20 20 20 20 20 20  ng $_..         
23e0: 57 72 69 74 65 2d 48 6f 73 74 20 24 64 65 66 69  Write-Host $defi
23f0: 6e 69 74 69 6f 6e 20 2d 66 6f 72 65 20 63 79 61  nition -fore cya
2400: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  n..      }..    
2410: 20 20 4e 65 77 2d 49 74 65 6d 20 24 46 75 6e 63    New-Item $Func
2420: 74 69 6f 6e 4e 61 6d 65 20 2d 76 61 6c 75 65 20  tionName -value 
2430: 24 64 65 66 69 6e 69 74 69 6f 6e 0d 0a 20 20 20  $definition..   
2440: 7d 0d 0a 20 20 20 0d 0a 20 20 20 24 70 61 74 74  }..   ..   $patt
2450: 65 72 6e 2e 47 65 74 50 72 6f 70 65 72 74 69 65  ern.GetPropertie
2460: 73 28 29 20 7c 20 0d 0a 20 20 20 57 68 65 72 65  s() | ..   Where
2470: 20 7b 20 24 5f 2e 44 65 63 6c 61 72 69 6e 67 54   { $_.DeclaringT
2480: 79 70 65 20 2d 65 71 20 24 5f 2e 52 65 66 6c 65  ype -eq $_.Refle
2490: 63 74 65 64 54 79 70 65 20 2d 61 6e 64 20 24 5f  ctedType -and $_
24a0: 2e 4e 61 6d 65 20 2d 6e 6f 74 6d 61 74 63 68 20  .Name -notmatch 
24b0: 22 43 61 63 68 65 64 7c 43 75 72 72 65 6e 74 22  "Cached|Current"
24c0: 7d 20 7c 0d 0a 20 20 20 46 6f 72 45 61 63 68 20  } |..   ForEach 
24d0: 7b 0d 0a 20 20 20 20 20 20 24 46 75 6e 63 74 69  {..      $Functi
24e0: 6f 6e 4e 61 6d 65 20 3d 20 22 46 75 6e 63 74 69  onName = "Functi
24f0: 6f 6e 3a 47 65 74 2d 24 50 61 74 74 65 72 6e 4e  on:Get-$PatternN
2500: 61 6d 65 24 28 24 5f 2e 4e 61 6d 65 29 22 2e 54  ame$($_.Name)".T
2510: 72 69 6d 28 27 2e 27 29 0d 0a 20 20 20 20 20 20  rim('.')..      
2520: 69 66 20 28 74 65 73 74 2d 70 61 74 68 20 24 46  if (test-path $F
2530: 75 6e 63 74 69 6f 6e 4e 61 6d 65 29 20 7b 20 72  unctionName) { r
2540: 65 6d 6f 76 65 2d 69 74 65 6d 20 24 46 75 6e 63  emove-item $Func
2550: 74 69 6f 6e 4e 61 6d 65 20 7d 0d 0a 20 20 20 20  tionName }..    
2560: 20 20 4e 65 77 2d 49 74 65 6d 20 24 46 75 6e 63    New-Item $Func
2570: 74 69 6f 6e 4e 61 6d 65 20 2d 76 61 6c 75 65 20  tionName -value 
2580: 22 0d 0a 20 20 20 20 20 20 70 61 72 61 6d 28 0d  "..      param(.
2590: 0a 20 20 20 20 20 20 20 20 20 5b 50 61 72 61 6d  .         [Param
25a0: 65 74 65 72 28 56 61 6c 75 65 46 72 6f 6d 50 69  eter(ValueFromPi
25b0: 70 65 6c 69 6e 65 3d 60 24 74 72 75 65 29 5d 0d  peline=`$true)].
25c0: 0a 20 20 20 20 20 20 20 20 20 5b 41 75 74 6f 6d  .         [Autom
25d0: 61 74 69 6f 6e 45 6c 65 6d 65 6e 74 5d 60 24 41  ationElement]`$A
25e0: 75 74 6f 6d 61 74 69 6f 6e 45 6c 65 6d 65 6e 74  utomationElement
25f0: 0d 0a 20 20 20 20 20 20 29 20 20 20 20 20 20 0d  ..      )      .
2600: 0a 20 20 20 20 20 20 70 72 6f 63 65 73 73 20 7b  .      process {
2610: 20 0d 0a 20 20 20 20 20 20 20 20 20 74 72 61 70   ..         trap
2620: 20 7b 20 57 72 69 74 65 2d 57 61 72 6e 69 6e 67   { Write-Warning
2630: 20 60 22 24 50 61 74 74 65 72 6e 46 75 6c 6c 4e   `"$PatternFullN
2640: 61 6d 65 20 60 24 5f 60 22 3b 20 63 6f 6e 74 69  ame `$_`"; conti
2650: 6e 75 65 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  nue }..         
2660: 60 24 70 61 74 74 65 72 6e 20 3d 20 60 24 41 75  `$pattern = `$Au
2670: 74 6f 6d 61 74 69 6f 6e 45 6c 65 6d 65 6e 74 2e  tomationElement.
2680: 47 65 74 43 75 72 72 65 6e 74 50 61 74 74 65 72  GetCurrentPatter
2690: 6e 28 5b 24 50 61 74 74 65 72 6e 46 75 6c 6c 4e  n([$PatternFullN
26a0: 61 6d 65 5d 3a 3a 50 61 74 74 65 72 6e 29 0d 0a  ame]::Pattern)..
26b0: 20 20 20 20 20 20 20 20 20 69 66 28 60 24 70 61           if(`$pa
26c0: 74 74 65 72 6e 29 20 7b 0d 0a 20 20 20 20 20 20  ttern) {..      
26d0: 20 20 20 20 20 20 60 24 70 61 74 74 65 72 6e 2e        `$pattern.
26e0: 27 24 28 24 5f 2e 4e 61 6d 65 29 27 0d 0a 20 20  '$($_.Name)'..  
26f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2700: 7d 22 0d 0a 20 20 20 7d 0d 0a 20 20 20 23 23 20  }"..   }..   ## 
2710: 53 6f 20 66 61 72 20 74 68 69 73 20 73 65 65 6d  So far this seem
2720: 73 20 74 6f 20 62 65 20 72 65 73 74 72 69 63 74  s to be restrict
2730: 65 64 20 74 6f 20 54 65 78 74 20 28 44 6f 63 75  ed to Text (Docu
2740: 6d 65 6e 74 52 61 6e 67 65 29 20 65 6c 65 6d 65  mentRange) eleme
2750: 6e 74 73 0d 0a 20 20 20 24 70 61 74 74 65 72 6e  nts..   $pattern
2760: 2e 47 65 74 46 69 65 6c 64 73 28 29 20 7c 0d 0a  .GetFields() |..
2770: 20 20 20 57 68 65 72 65 20 7b 20 24 5f 2e 46 69     Where { $_.Fi
2780: 65 6c 64 54 79 70 65 2e 4e 61 6d 65 20 2d 6c 69  eldType.Name -li
2790: 6b 65 20 22 2a 54 65 78 74 41 74 74 72 69 62 75  ke "*TextAttribu
27a0: 74 65 22 7d 20 7c 0d 0a 20 20 20 46 6f 72 45 61  te"} |..   ForEa
27b0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 24 46 75 6e  ch {..      $Fun
27c0: 63 74 69 6f 6e 4e 61 6d 65 20 3d 20 22 46 75 6e  ctionName = "Fun
27d0: 63 74 69 6f 6e 3a 47 65 74 2d 54 65 78 74 24 28  ction:Get-Text$(
27e0: 24 5f 2e 4e 61 6d 65 20 2d 72 65 70 6c 61 63 65  $_.Name -replace
27f0: 20 27 41 74 74 72 69 62 75 74 65 27 29 22 0d 0a   'Attribute')"..
2800: 20 20 20 20 20 20 69 66 20 28 74 65 73 74 2d 70        if (test-p
2810: 61 74 68 20 24 46 75 6e 63 74 69 6f 6e 4e 61 6d  ath $FunctionNam
2820: 65 29 20 7b 20 72 65 6d 6f 76 65 2d 69 74 65 6d  e) { remove-item
2830: 20 24 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 20 7d   $FunctionName }
2840: 0d 0a 20 20 20 20 20 20 4e 65 77 2d 49 74 65 6d  ..      New-Item
2850: 20 24 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 20 2d   $FunctionName -
2860: 76 61 6c 75 65 20 22 0d 0a 20 20 20 20 20 20 70  value "..      p
2870: 61 72 61 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  aram(..         
2880: 5b 50 61 72 61 6d 65 74 65 72 28 56 61 6c 75 65  [Parameter(Value
2890: 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 60 24 74  FromPipeline=`$t
28a0: 72 75 65 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  rue)]..         
28b0: 5b 41 75 74 6f 6d 61 74 69 6f 6e 45 6c 65 6d 65  [AutomationEleme
28c0: 6e 74 5d 60 24 41 75 74 6f 6d 61 74 69 6f 6e 45  nt]`$AutomationE
28d0: 6c 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 29 0d  lement..      ).
28e0: 0a 20 20 20 20 20 20 70 72 6f 63 65 73 73 20 7b  .      process {
28f0: 20 0d 0a 20 20 20 20 20 20 20 20 20 74 72 61 70   ..         trap
2900: 20 7b 20 57 72 69 74 65 2d 57 61 72 6e 69 6e 67   { Write-Warning
2910: 20 60 22 24 50 61 74 74 65 72 6e 46 75 6c 6c 4e   `"$PatternFullN
2920: 61 6d 65 20 60 24 5f 60 22 3b 20 63 6f 6e 74 69  ame `$_`"; conti
2930: 6e 75 65 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  nue }..         
2940: 60 24 41 75 74 6f 6d 61 74 69 6f 6e 45 6c 65 6d  `$AutomationElem
2950: 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65  ent.GetAttribute
2960: 56 61 6c 75 65 28 5b 24 50 61 74 74 65 72 6e 46  Value([$PatternF
2970: 75 6c 6c 4e 61 6d 65 5d 3a 3a 24 28 24 5f 2e 4e  ullName]::$($_.N
2980: 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 7d 22 0d  ame))..      }".
2990: 0a 20 20 20 7d 0d 0a 20 20 20 0d 0a 20 20 20 24  .   }..   ..   $
29a0: 70 61 74 74 65 72 6e 2e 47 65 74 46 69 65 6c 64  pattern.GetField
29b0: 73 28 29 20 7c 20 57 68 65 72 65 20 7b 20 24 5f  s() | Where { $_
29c0: 2e 46 69 65 6c 64 54 79 70 65 20 2d 65 71 20 5b  .FieldType -eq [
29d0: 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73 2e 41  System.Windows.A
29e0: 75 74 6f 6d 61 74 69 6f 6e 2e 41 75 74 6f 6d 61  utomation.Automa
29f0: 74 69 6f 6e 45 76 65 6e 74 5d 20 7d 20 7c 0d 0a  tionEvent] } |..
2a00: 20 20 20 46 6f 72 45 61 63 68 20 7b 0d 0a 20 20     ForEach {..  
2a10: 20 20 20 20 24 4e 61 6d 65 20 3d 20 24 5f 2e 4e      $Name = $_.N
2a20: 61 6d 65 20 2d 72 65 70 6c 61 63 65 20 27 45 76  ame -replace 'Ev
2a30: 65 6e 74 24 27 0d 0a 20 20 20 20 20 20 24 46 75  ent$'..      $Fu
2a40: 6e 63 74 69 6f 6e 4e 61 6d 65 20 3d 20 22 46 75  nctionName = "Fu
2a50: 6e 63 74 69 6f 6e 3a 52 65 67 69 73 74 65 72 2d  nction:Register-
2a60: 24 28 24 50 61 74 74 65 72 6e 4e 61 6d 65 2e 54  $($PatternName.T
2a70: 72 69 6d 28 27 2e 27 29 29 24 4e 61 6d 65 22 0d  rim('.'))$Name".
2a80: 0a 20 20 20 20 20 20 69 66 20 28 74 65 73 74 2d  .      if (test-
2a90: 70 61 74 68 20 24 46 75 6e 63 74 69 6f 6e 4e 61  path $FunctionNa
2aa0: 6d 65 29 20 7b 20 72 65 6d 6f 76 65 2d 69 74 65  me) { remove-ite
2ab0: 6d 20 24 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 20  m $FunctionName 
2ac0: 7d 0d 0a 20 20 20 20 20 20 4e 65 77 2d 49 74 65  }..      New-Ite
2ad0: 6d 20 24 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 20  m $FunctionName 
2ae0: 2d 76 61 6c 75 65 20 22 0d 0a 20 20 20 20 20 20  -value "..      
2af0: 70 61 72 61 6d 28 0d 0a 20 20 20 20 20 20 20 20  param(..        
2b00: 20 5b 50 61 72 61 6d 65 74 65 72 28 56 61 6c 75   [Parameter(Valu
2b10: 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 60 24  eFromPipeline=`$
2b20: 74 72 75 65 29 5d 0d 0a 20 20 20 20 20 20 20 20  true)]..        
2b30: 20 5b 41 75 74 6f 6d 61 74 69 6f 6e 45 6c 65 6d   [AutomationElem
2b40: 65 6e 74 5d 60 24 41 75 74 6f 6d 61 74 69 6f 6e  ent]`$Automation
2b50: 45 6c 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 2c  Element..      ,
2b60: 0d 0a 20 20 20 20 20 20 20 20 20 5b 53 79 73 74  ..         [Syst
2b70: 65 6d 2e 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d  em.Windows.Autom
2b80: 61 74 69 6f 6e 2e 54 72 65 65 53 63 6f 70 65 5d  ation.TreeScope]
2b90: 60 24 54 72 65 65 53 63 6f 70 65 20 3d 20 27 45  `$TreeScope = 'E
2ba0: 6c 65 6d 65 6e 74 27 0d 0a 20 20 20 20 20 20 2c  lement'..      ,
2bb0: 0d 0a 20 20 20 20 20 20 20 20 20 5b 53 63 72 69  ..         [Scri
2bc0: 70 74 42 6c 6f 63 6b 5d 60 24 45 76 65 6e 74 48  ptBlock]`$EventH
2bd0: 61 6e 64 6c 65 72 0d 0a 20 20 20 20 20 20 29 0d  andler..      ).
2be0: 0a 20 20 20 20 20 20 70 72 6f 63 65 73 73 20 7b  .      process {
2bf0: 20 0d 0a 20 20 20 20 20 20 20 20 20 74 72 61 70   ..         trap
2c00: 20 7b 20 57 72 69 74 65 2d 57 61 72 6e 69 6e 67   { Write-Warning
2c10: 20 60 22 24 50 61 74 74 65 72 6e 46 75 6c 6c 4e   `"$PatternFullN
2c20: 61 6d 65 20 60 24 5f 60 22 3b 20 63 6f 6e 74 69  ame `$_`"; conti
2c30: 6e 75 65 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  nue }..         
2c40: 5b 41 75 74 6f 6d 61 74 69 6f 6e 5d 3a 3a 41 64  [Automation]::Ad
2c50: 64 41 75 74 6f 6d 61 74 69 6f 6e 45 76 65 6e 74  dAutomationEvent
2c60: 48 61 6e 64 6c 65 72 28 20 5b 24 50 61 74 74 65  Handler( [$Patte
2c70: 72 6e 46 75 6c 6c 4e 61 6d 65 5d 3a 3a 24 4e 61  rnFullName]::$Na
2c80: 6d 65 2c 20 60 24 41 75 74 6f 6d 61 74 69 6f 6e  me, `$Automation
2c90: 45 6c 65 6d 65 6e 74 2c 20 60 24 54 72 65 65 53  Element, `$TreeS
2ca0: 63 6f 70 65 2c 20 60 24 45 76 65 6e 74 48 61 6e  cope, `$EventHan
2cb0: 64 6c 65 72 20 29 0d 0a 20 20 20 20 20 20 7d 22  dler )..      }"
2cc0: 0d 0a 20 20 20 7d 0d 0a 7d 0d 0a 0d 0a 24 46 61  ..   }..}....$Fa
2cd0: 6c 73 65 43 6f 6e 64 69 74 69 6f 6e 20 3d 20 5b  lseCondition = [
2ce0: 43 6f 6e 64 69 74 69 6f 6e 5d 3a 3a 46 61 6c 73  Condition]::Fals
2cf0: 65 43 6f 6e 64 69 74 69 6f 6e 0d 0a 24 54 72 75  eCondition..$Tru
2d00: 65 43 6f 6e 64 69 74 69 6f 6e 20 20 3d 20 5b 43  eCondition  = [C
2d10: 6f 6e 64 69 74 69 6f 6e 5d 3a 3a 54 72 75 65 43  ondition]::TrueC
2d20: 6f 6e 64 69 74 69 6f 6e 0d 0a 0d 0a 41 64 64 2d  ondition....Add-
2d30: 54 79 70 65 20 2d 41 73 73 65 6d 62 6c 79 4e 61  Type -AssemblyNa
2d40: 6d 65 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77  me System.Window
2d50: 73 2e 46 6f 72 6d 73 0d 0a 41 64 64 2d 41 63 63  s.Forms..Add-Acc
2d60: 65 6c 65 72 61 74 6f 72 20 53 65 6e 64 4b 65 79  elerator SendKey
2d70: 73 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74  s           Syst
2d80: 65 6d 2e 57 69 6e 64 6f 77 73 2e 46 6f 72 6d 73  em.Windows.Forms
2d90: 2e 53 65 6e 64 4b 65 79 73 20 20 20 20 20 20 20  .SendKeys       
2da0: 2d 45 41 20 53 69 6c 65 6e 74 6c 79 43 6f 6e 74  -EA SilentlyCont
2db0: 69 6e 75 65 0d 0a 0d 0a 24 41 75 74 6f 6d 61 74  inue....$Automat
2dc0: 69 6f 6e 50 72 6f 70 65 72 74 69 65 73 20 3d 20  ionProperties = 
2dd0: 5b 73 79 73 74 65 6d 2e 77 69 6e 64 6f 77 73 2e  [system.windows.
2de0: 61 75 74 6f 6d 61 74 69 6f 6e 2e 61 75 74 6f 6d  automation.autom
2df0: 61 74 69 6f 6e 65 6c 65 6d 65 6e 74 2b 61 75 74  ationelement+aut
2e00: 6f 6d 61 74 69 6f 6e 65 6c 65 6d 65 6e 74 69 6e  omationelementin
2e10: 66 6f 72 6d 61 74 69 6f 6e 5d 2e 47 65 74 50 72  formation].GetPr
2e20: 6f 70 65 72 74 69 65 73 28 29 0d 0a 0d 0a 53 65  operties()....Se
2e30: 74 2d 41 6c 69 61 73 20 49 6e 76 6f 6b 65 2d 55  t-Alias Invoke-U
2e40: 49 45 6c 65 6d 65 6e 74 20 49 6e 76 6f 6b 65 2d  IElement Invoke-
2e50: 49 6e 76 6f 6b 65 2e 49 6e 76 6f 6b 65 0d 0a 0d  Invoke.Invoke...
2e60: 0a 66 75 6e 63 74 69 6f 6e 20 66 6f 72 6d 61 74  .function format
2e70: 74 65 72 20 20 7b 20 45 4e 44 20 7b 0d 0a 20 20  ter  { END {..  
2e80: 20 24 69 6e 70 75 74 20 7c 20 46 6f 72 6d 61 74   $input | Format
2e90: 2d 54 61 62 6c 65 20 40 7b 6c 3d 22 54 65 78 74  -Table @{l="Text
2ea0: 22 3b 65 3d 7b 24 5f 2e 54 65 78 74 2e 53 75 62  ";e={$_.Text.Sub
2eb0: 53 74 72 69 6e 67 28 30 2c 32 35 29 7d 7d 2c 20  String(0,25)}}, 
2ec0: 43 6c 61 73 73 4e 61 6d 65 2c 20 46 72 61 6d 65  ClassName, Frame
2ed0: 77 6f 72 6b 49 64 20 2d 41 75 74 6f 0d 0a 7d 7d  workId -Auto..}}
2ee0: 0d 0a 0d 0a 66 75 6e 63 74 69 6f 6e 20 47 65 74  ....function Get
2ef0: 2d 43 6c 69 63 6b 61 62 6c 65 50 6f 69 6e 74 20  -ClickablePoint 
2f00: 7b 0d 0a 5b 43 6d 64 6c 65 74 42 69 6e 64 69 6e  {..[CmdletBindin
2f10: 67 28 29 5d 0d 0a 70 61 72 61 6d 28 0d 0a 20 20  g()]..param(..  
2f20: 20 5b 50 61 72 61 6d 65 74 65 72 28 56 61 6c 75   [Parameter(Valu
2f30: 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 74  eFromPipeline=$t
2f40: 72 75 65 29 5d 0d 0a 20 20 20 5b 41 6c 69 61 73  rue)]..   [Alias
2f50: 28 22 50 61 72 65 6e 74 22 2c 22 45 6c 65 6d 65  ("Parent","Eleme
2f60: 6e 74 22 2c 22 52 6f 6f 74 22 29 5d 0d 0a 20 20  nt","Root")]..  
2f70: 20 5b 41 75 74 6f 6d 61 74 69 6f 6e 45 6c 65 6d   [AutomationElem
2f80: 65 6e 74 5d 24 49 6e 70 75 74 4f 62 6a 65 63 74  ent]$InputObject
2f90: 0d 0a 29 0d 0a 20 20 20 70 72 6f 63 65 73 73 20  ..)..   process 
2fa0: 7b 0d 0a 20 20 20 20 20 20 24 49 6e 70 75 74 4f  {..      $InputO
2fb0: 62 6a 65 63 74 2e 47 65 74 43 6c 69 63 6b 61 62  bject.GetClickab
2fc0: 6c 65 50 6f 69 6e 74 28 29 0d 0a 20 20 20 7d 0d  lePoint()..   }.
2fd0: 0a 7d 0d 0a 0d 0a 66 75 6e 63 74 69 6f 6e 20 53  .}....function S
2fe0: 68 6f 77 2d 57 69 6e 64 6f 77 20 7b 0d 0a 5b 43  how-Window {..[C
2ff0: 6d 64 6c 65 74 42 69 6e 64 69 6e 67 28 29 5d 0d  mdletBinding()].
3000: 0a 70 61 72 61 6d 28 0d 0a 20 20 20 5b 50 61 72  .param(..   [Par
3010: 61 6d 65 74 65 72 28 56 61 6c 75 65 46 72 6f 6d  ameter(ValueFrom
3020: 50 69 70 65 6c 69 6e 65 3d 24 74 72 75 65 29 5d  Pipeline=$true)]
3030: 0d 0a 20 20 20 5b 41 6c 69 61 73 28 22 50 61 72  ..   [Alias("Par
3040: 65 6e 74 22 2c 22 45 6c 65 6d 65 6e 74 22 2c 22  ent","Element","
3050: 52 6f 6f 74 22 29 5d 0d 0a 20 20 20 5b 41 75 74  Root")]..   [Aut
3060: 6f 6d 61 74 69 6f 6e 45 6c 65 6d 65 6e 74 5d 24  omationElement]$
3070: 49 6e 70 75 74 4f 62 6a 65 63 74 0d 0a 2c 0d 0a  InputObject..,..
3080: 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 29 5d     [Parameter()]
3090: 0d 0a 20 20 20 5b 53 77 69 74 63 68 5d 24 50 61  ..   [Switch]$Pa
30a0: 73 73 74 68 72 75 20 20 20 0d 0a 29 0d 0a 20 20  ssthru   ..)..  
30b0: 20 70 72 6f 63 65 73 73 20 7b 0d 0a 20 20 20 20   process {..    
30c0: 20 20 53 65 74 2d 55 49 46 6f 63 75 73 20 24 49    Set-UIFocus $I
30d0: 6e 70 75 74 4f 62 6a 65 63 74 0d 0a 20 20 20 20  nputObject..    
30e0: 20 20 69 66 28 24 70 61 73 73 74 68 72 75 29 20    if($passthru) 
30f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 24 49 6e 70  {..         $Inp
3100: 75 74 4f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20  utObject..      
3110: 7d 20 20 20 20 20 20 20 20 0d 0a 20 20 20 7d 0d  }        ..   }.
3120: 0a 7d 0d 0a 0d 0a 66 75 6e 63 74 69 6f 6e 20 53  .}....function S
3130: 65 74 2d 55 49 46 6f 63 75 73 20 7b 0d 0a 5b 43  et-UIFocus {..[C
3140: 6d 64 6c 65 74 42 69 6e 64 69 6e 67 28 29 5d 0d  mdletBinding()].
3150: 0a 70 61 72 61 6d 28 0d 0a 20 20 20 5b 50 61 72  .param(..   [Par
3160: 61 6d 65 74 65 72 28 56 61 6c 75 65 46 72 6f 6d  ameter(ValueFrom
3170: 50 69 70 65 6c 69 6e 65 3d 24 74 72 75 65 29 5d  Pipeline=$true)]
3180: 0d 0a 20 20 20 5b 41 6c 69 61 73 28 22 50 61 72  ..   [Alias("Par
3190: 65 6e 74 22 2c 22 45 6c 65 6d 65 6e 74 22 2c 22  ent","Element","
31a0: 52 6f 6f 74 22 29 5d 0d 0a 20 20 20 5b 41 75 74  Root")]..   [Aut
31b0: 6f 6d 61 74 69 6f 6e 45 6c 65 6d 65 6e 74 5d 24  omationElement]$
31c0: 49 6e 70 75 74 4f 62 6a 65 63 74 0d 0a 2c 0d 0a  InputObject..,..
31d0: 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 29 5d     [Parameter()]
31e0: 0d 0a 20 20 20 5b 53 77 69 74 63 68 5d 24 50 61  ..   [Switch]$Pa
31f0: 73 73 74 68 72 75 20 20 20 0d 0a 29 0d 0a 20 20  ssthru   ..)..  
3200: 20 70 72 6f 63 65 73 73 20 7b 0d 0a 20 20 20 20   process {..    
3210: 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20    try {..       
3220: 20 20 5b 55 49 41 75 74 6f 6d 61 74 69 6f 6e 48    [UIAutomationH
3230: 65 6c 70 65 72 5d 3a 3a 53 65 74 46 6f 72 65 67  elper]::SetForeg
3240: 72 6f 75 6e 64 28 20 24 49 6e 70 75 74 4f 62 6a  round( $InputObj
3250: 65 63 74 20 29 0d 0a 20 20 20 20 20 20 20 20 20  ect )..         
3260: 24 49 6e 70 75 74 4f 62 6a 65 63 74 2e 53 65 74  $InputObject.Set
3270: 46 6f 63 75 73 28 29 0d 0a 20 20 20 20 20 20 7d  Focus()..      }
3280: 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..      
3290: 20 20 20 57 72 69 74 65 2d 56 65 72 62 6f 73 65     Write-Verbose
32a0: 20 22 53 65 74 46 6f 63 75 73 20 66 61 69 6c 2c   "SetFocus fail,
32b0: 20 74 72 79 69 6e 67 20 53 65 74 46 6f 72 65 67   trying SetForeg
32c0: 72 6f 75 6e 64 22 0d 0a 20 20 20 20 20 20 7d 0d  round"..      }.
32d0: 0a 20 20 20 20 20 20 69 66 28 24 70 61 73 73 74  .      if($passt
32e0: 68 72 75 29 20 7b 0d 0a 20 20 20 20 20 20 20 20  hru) {..        
32f0: 20 24 49 6e 70 75 74 4f 62 6a 65 63 74 0d 0a 20   $InputObject.. 
3300: 20 20 20 20 20 7d 20 20 20 20 20 20 20 20 0d 0a       }        ..
3310: 20 20 20 7d 0d 0a 7d 0d 0a 0d 0a 66 75 6e 63 74     }..}....funct
3320: 69 6f 6e 20 53 65 6e 64 2d 55 49 4b 65 79 73 20  ion Send-UIKeys 
3330: 7b 0d 0a 5b 43 6d 64 6c 65 74 42 69 6e 64 69 6e  {..[CmdletBindin
3340: 67 28 29 5d 0d 0a 70 61 72 61 6d 28 0d 0a 20 20  g()]..param(..  
3350: 20 5b 50 61 72 61 6d 65 74 65 72 28 50 6f 73 69   [Parameter(Posi
3360: 74 69 6f 6e 3d 30 29 5d 0d 0a 20 20 20 5b 73 74  tion=0)]..   [st
3370: 72 69 6e 67 5d 24 4b 65 79 73 0d 0a 2c 0d 0a 20  ring]$Keys..,.. 
3380: 20 20 5b 50 61 72 61 6d 65 74 65 72 28 56 61 6c    [Parameter(Val
3390: 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24  ueFromPipeline=$
33a0: 74 72 75 65 29 5d 0d 0a 20 20 20 5b 41 6c 69 61  true)]..   [Alia
33b0: 73 28 22 50 61 72 65 6e 74 22 2c 22 45 6c 65 6d  s("Parent","Elem
33c0: 65 6e 74 22 2c 22 52 6f 6f 74 22 29 5d 0d 0a 20  ent","Root")].. 
33d0: 20 20 5b 41 75 74 6f 6d 61 74 69 6f 6e 45 6c 65    [AutomationEle
33e0: 6d 65 6e 74 5d 24 49 6e 70 75 74 4f 62 6a 65 63  ment]$InputObjec
33f0: 74 0d 0a 2c 0d 0a 20 20 20 5b 50 61 72 61 6d 65  t..,..   [Parame
3400: 74 65 72 28 29 5d 0d 0a 20 20 20 5b 53 77 69 74  ter()]..   [Swit
3410: 63 68 5d 24 50 61 73 73 74 68 72 75 0d 0a 2c 0d  ch]$Passthru..,.
3420: 0a 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 29  .   [Parameter()
3430: 5d 0d 0a 20 20 20 5b 53 77 69 74 63 68 5d 24 41  ]..   [Switch]$A
3440: 73 79 6e 63 0d 0a 29 0d 0a 20 20 20 70 72 6f 63  sync..)..   proc
3450: 65 73 73 20 7b 0d 0a 20 20 20 20 20 20 69 66 28  ess {..      if(
3460: 21 24 49 6e 70 75 74 4f 62 6a 65 63 74 2e 43 75  !$InputObject.Cu
3470: 72 72 65 6e 74 2e 49 73 45 6e 61 62 6c 65 64 29  rrent.IsEnabled)
3480: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
3490: 20 20 20 20 57 72 69 74 65 2d 57 61 72 6e 69 6e      Write-Warnin
34a0: 67 20 22 54 68 65 20 43 6f 6e 74 72 6f 6c 20 69  g "The Control i
34b0: 73 20 6e 6f 74 20 65 6e 61 62 6c 65 64 21 22 0d  s not enabled!".
34c0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
34d0: 69 66 28 21 24 49 6e 70 75 74 4f 62 6a 65 63 74  if(!$InputObject
34e0: 2e 43 75 72 72 65 6e 74 2e 49 73 4b 65 79 62 6f  .Current.IsKeybo
34f0: 61 72 64 46 6f 63 75 73 61 62 6c 65 29 0d 0a 20  ardFocusable).. 
3500: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3510: 20 57 72 69 74 65 2d 57 61 72 6e 69 6e 67 20 22   Write-Warning "
3520: 54 68 65 20 43 6f 6e 74 72 6f 6c 20 69 73 20 6e  The Control is n
3530: 6f 74 20 66 6f 63 75 73 61 62 6c 65 21 22 0d 0a  ot focusable!"..
3540: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 53        }..      S
3550: 65 74 2d 55 49 46 6f 63 75 73 20 24 49 6e 70 75  et-UIFocus $Inpu
3560: 74 4f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 0d  tObject..      .
3570: 0a 20 20 20 20 20 20 69 66 28 24 41 73 79 6e 63  .      if($Async
3580: 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 5b 53  ) {..         [S
3590: 65 6e 64 4b 65 79 73 5d 3a 3a 53 65 6e 64 28 20  endKeys]::Send( 
35a0: 24 4b 65 79 73 20 29 0d 0a 20 20 20 20 20 20 7d  $Keys )..      }
35b0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..       
35c0: 20 20 5b 53 65 6e 64 4b 65 79 73 5d 3a 3a 53 65    [SendKeys]::Se
35d0: 6e 64 57 61 69 74 28 20 24 4b 65 79 73 20 29 0d  ndWait( $Keys ).
35e0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
35f0: 0d 0a 20 20 20 20 20 20 69 66 28 24 70 61 73 73  ..      if($pass
3600: 74 68 72 75 29 20 7b 0d 0a 20 20 20 20 20 20 20  thru) {..       
3610: 20 20 24 49 6e 70 75 74 4f 62 6a 65 63 74 0d 0a    $InputObject..
3620: 20 20 20 20 20 20 7d 20 20 20 20 20 20 0d 0a 20        }      .. 
3630: 20 20 7d 0d 0a 7d 0d 0a 0d 0a 66 75 6e 63 74 69    }..}....functi
3640: 6f 6e 20 53 65 74 2d 55 49 54 65 78 74 20 7b 0d  on Set-UIText {.
3650: 0a 5b 43 6d 64 6c 65 74 42 69 6e 64 69 6e 67 28  .[CmdletBinding(
3660: 29 5d 0d 0a 70 61 72 61 6d 28 0d 0a 20 20 20 5b  )]..param(..   [
3670: 50 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74 69  Parameter(Positi
3680: 6f 6e 3d 30 29 5d 0d 0a 20 20 20 5b 73 74 72 69  on=0)]..   [stri
3690: 6e 67 5d 24 54 65 78 74 0d 0a 2c 0d 0a 20 20 20  ng]$Text..,..   
36a0: 5b 50 61 72 61 6d 65 74 65 72 28 56 61 6c 75 65  [Parameter(Value
36b0: 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 74 72  FromPipeline=$tr
36c0: 75 65 29 5d 0d 0a 20 20 20 5b 41 6c 69 61 73 28  ue)]..   [Alias(
36d0: 22 50 61 72 65 6e 74 22 2c 22 45 6c 65 6d 65 6e  "Parent","Elemen
36e0: 74 22 2c 22 52 6f 6f 74 22 29 5d 0d 0a 20 20 20  t","Root")]..   
36f0: 5b 41 75 74 6f 6d 61 74 69 6f 6e 45 6c 65 6d 65  [AutomationEleme
3700: 6e 74 5d 24 49 6e 70 75 74 4f 62 6a 65 63 74 0d  nt]$InputObject.
3710: 0a 2c 0d 0a 20 20 20 5b 50 61 72 61 6d 65 74 65  .,..   [Paramete
3720: 72 28 29 5d 0d 0a 20 20 20 5b 53 77 69 74 63 68  r()]..   [Switch
3730: 5d 24 50 61 73 73 74 68 72 75 20 20 20 0d 0a 29  ]$Passthru   ..)
3740: 0d 0a 20 20 20 70 72 6f 63 65 73 73 20 7b 0d 0a  ..   process {..
3750: 20 20 20 20 20 20 69 66 28 21 24 49 6e 70 75 74        if(!$Input
3760: 4f 62 6a 65 63 74 2e 43 75 72 72 65 6e 74 2e 49  Object.Current.I
3770: 73 45 6e 61 62 6c 65 64 29 0d 0a 20 20 20 20 20  sEnabled)..     
3780: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 57 72 69   {..         Wri
3790: 74 65 2d 57 61 72 6e 69 6e 67 20 22 54 68 65 20  te-Warning "The 
37a0: 43 6f 6e 74 72 6f 6c 20 69 73 20 6e 6f 74 20 65  Control is not e
37b0: 6e 61 62 6c 65 64 21 22 0d 0a 20 20 20 20 20 20  nabled!"..      
37c0: 7d 0d 0a 20 20 20 20 20 20 69 66 28 21 24 49 6e  }..      if(!$In
37d0: 70 75 74 4f 62 6a 65 63 74 2e 43 75 72 72 65 6e  putObject.Curren
37e0: 74 2e 49 73 4b 65 79 62 6f 61 72 64 46 6f 63 75  t.IsKeyboardFocu
37f0: 73 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 7b 0d  sable)..      {.
3800: 0a 20 20 20 20 20 20 20 20 20 57 72 69 74 65 2d  .         Write-
3810: 57 61 72 6e 69 6e 67 20 22 54 68 65 20 43 6f 6e  Warning "The Con
3820: 74 72 6f 6c 20 69 73 20 6e 6f 74 20 66 6f 63 75  trol is not focu
3830: 73 61 62 6c 65 21 22 0d 0a 20 20 20 20 20 20 7d  sable!"..      }
3840: 0d 0a 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20  ..      ..      
3850: 24 76 61 6c 75 65 50 61 74 74 65 72 6e 20 3d 20  $valuePattern = 
3860: 24 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 69 66 28  $null..      if(
3870: 24 49 6e 70 75 74 4f 62 6a 65 63 74 2e 54 72 79  $InputObject.Try
3880: 47 65 74 43 75 72 72 65 6e 74 50 61 74 74 65 72  GetCurrentPatter
3890: 6e 28 5b 56 61 6c 75 65 50 61 74 74 65 72 6e 5d  n([ValuePattern]
38a0: 3a 3a 50 61 74 74 65 72 6e 2c 5b 72 65 66 5d 24  ::Pattern,[ref]$
38b0: 76 61 6c 75 65 50 61 74 74 65 72 6e 29 29 20 7b  valuePattern)) {
38c0: 0d 0a 20 20 20 20 20 20 20 20 20 57 72 69 74 65  ..         Write
38d0: 2d 56 65 72 62 6f 73 65 20 22 53 65 74 20 76 69  -Verbose "Set vi
38e0: 61 20 56 61 6c 75 65 50 61 74 74 65 72 6e 21 22  a ValuePattern!"
38f0: 0d 0a 20 20 20 20 20 20 20 20 20 24 76 61 6c 75  ..         $valu
3900: 65 50 61 74 74 65 72 6e 2e 53 65 74 56 61 6c 75  ePattern.SetValu
3910: 65 28 20 24 54 65 78 74 20 29 0d 0a 20 20 20 20  e( $Text )..    
3920: 20 20 7d 20 0d 0a 20 20 20 20 20 20 65 6c 73 65    } ..      else
3930: 69 66 28 24 49 6e 70 75 74 4f 62 6a 65 63 74 2e  if($InputObject.
3940: 43 75 72 72 65 6e 74 2e 49 73 4b 65 79 62 6f 61  Current.IsKeyboa
3950: 72 64 46 6f 63 75 73 61 62 6c 65 29 20 0d 0a 20  rdFocusable) .. 
3960: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3970: 20 53 65 74 2d 55 49 46 6f 63 75 73 20 24 49 6e   Set-UIFocus $In
3980: 70 75 74 4f 62 6a 65 63 74 0d 0a 20 20 20 20 20  putObject..     
3990: 20 20 20 20 5b 53 65 6e 64 4b 65 79 73 5d 3a 3a      [SendKeys]::
39a0: 53 65 6e 64 57 61 69 74 28 22 5e 7b 48 4f 4d 45  SendWait("^{HOME
39b0: 7d 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 5b  }");..         [
39c0: 53 65 6e 64 4b 65 79 73 5d 3a 3a 53 65 6e 64 57  SendKeys]::SendW
39d0: 61 69 74 28 22 5e 2b 7b 45 4e 44 7d 22 29 3b 0d  ait("^+{END}");.
39e0: 0a 20 20 20 20 20 20 20 20 20 5b 53 65 6e 64 4b  .         [SendK
39f0: 65 79 73 5d 3a 3a 53 65 6e 64 57 61 69 74 28 22  eys]::SendWait("
3a00: 7b 44 45 4c 7d 22 29 3b 0d 0a 20 20 20 20 20 20  {DEL}");..      
3a10: 20 20 20 5b 53 65 6e 64 4b 65 79 73 5d 3a 3a 53     [SendKeys]::S
3a20: 65 6e 64 57 61 69 74 28 20 24 54 65 78 74 20 29  endWait( $Text )
3a30: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
3a40: 20 69 66 28 24 70 61 73 73 74 68 72 75 29 20 7b   if($passthru) {
3a50: 0d 0a 20 20 20 20 20 20 20 20 20 24 49 6e 70 75  ..         $Inpu
3a60: 74 4f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 7d  tObject..      }
3a70: 20 20 20 20 20 20 0d 0a 20 20 20 7d 0d 0a 7d 0d        ..   }..}.
3a80: 0a 0d 0a 66 75 6e 63 74 69 6f 6e 20 53 65 6c 65  ...function Sele
3a90: 63 74 2d 55 49 45 6c 65 6d 65 6e 74 20 7b 0d 0a  ct-UIElement {..
3aa0: 5b 43 6d 64 6c 65 74 42 69 6e 64 69 6e 67 28 44  [CmdletBinding(D
3ab0: 65 66 61 75 6c 74 50 61 72 61 6d 65 74 65 72 53  efaultParameterS
3ac0: 65 74 4e 61 6d 65 3d 22 46 72 6f 6d 50 61 72 65  etName="FromPare
3ad0: 6e 74 22 29 5d 0d 0a 50 41 52 41 4d 20 28 0d 0a  nt")]..PARAM (..
3ae0: 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50 61     [Parameter(Pa
3af0: 72 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 3d 22  rameterSetName="
3b00: 46 72 6f 6d 57 69 6e 64 6f 77 48 61 6e 64 6c 65  FromWindowHandle
3b10: 22 2c 20 50 6f 73 69 74 69 6f 6e 3d 22 30 22 2c  ", Position="0",
3b20: 20 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 75 65   Mandatory=$true
3b30: 29 5d 20 0d 0a 20 20 20 5b 41 6c 69 61 73 28 22  )] ..   [Alias("
3b40: 4d 61 69 6e 57 69 6e 64 6f 77 48 61 6e 64 6c 65  MainWindowHandle
3b50: 22 2c 22 68 57 6e 64 22 2c 22 48 61 6e 64 6c 65  ","hWnd","Handle
3b60: 22 2c 22 57 68 22 29 5d 0d 0a 20 20 20 5b 49 6e  ","Wh")]..   [In
3b70: 74 50 74 72 5b 5d 5d 24 57 69 6e 64 6f 77 48 61  tPtr[]]$WindowHa
3b80: 6e 64 6c 65 3d 5b 49 6e 74 50 74 72 5d 3a 3a 5a  ndle=[IntPtr]::Z
3b90: 65 72 6f 0d 0a 2c 0d 0a 20 20 20 5b 50 61 72 61  ero..,..   [Para
3ba0: 6d 65 74 65 72 28 50 61 72 61 6d 65 74 65 72 53  meter(ParameterS
3bb0: 65 74 4e 61 6d 65 3d 22 46 72 6f 6d 50 6f 69 6e  etName="FromPoin
3bc0: 74 22 2c 20 50 6f 73 69 74 69 6f 6e 3d 22 30 22  t", Position="0"
3bd0: 2c 20 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 75  , Mandatory=$tru
3be0: 65 29 5d 0d 0a 20 20 20 5b 53 79 73 74 65 6d 2e  e)]..   [System.
3bf0: 57 69 6e 64 6f 77 73 2e 50 6f 69 6e 74 5b 5d 5d  Windows.Point[]]
3c00: 24 50 6f 69 6e 74 0d 0a 2c 0d 0a 20 20 20 5b 50  $Point..,..   [P
3c10: 61 72 61 6d 65 74 65 72 28 50 61 72 61 6d 65 74  arameter(Paramet
3c20: 65 72 53 65 74 4e 61 6d 65 3d 22 46 72 6f 6d 50  erSetName="FromP
3c30: 61 72 65 6e 74 22 2c 20 56 61 6c 75 65 46 72 6f  arent", ValueFro
3c40: 6d 50 69 70 65 6c 69 6e 65 3d 24 74 72 75 65 2c  mPipeline=$true,
3c50: 20 50 6f 73 69 74 69 6f 6e 3d 31 30 30 29 5d 0d   Position=100)].
3c60: 0a 20 20 20 5b 53 79 73 74 65 6d 2e 57 69 6e 64  .   [System.Wind
3c70: 6f 77 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 41  ows.Automation.A
3c80: 75 74 6f 6d 61 74 69 6f 6e 45 6c 65 6d 65 6e 74  utomationElement
3c90: 5d 24 50 61 72 65 6e 74 20 3d 20 5b 55 49 41 75  ]$Parent = [UIAu
3ca0: 74 6f 6d 61 74 69 6f 6e 48 65 6c 70 65 72 5d 3a  tomationHelper]:
3cb0: 3a 52 6f 6f 74 45 6c 65 6d 65 6e 74 0d 0a 2c 0d  :RootElement..,.
3cc0: 0a 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50  .   [Parameter(P
3cd0: 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 3d  arameterSetName=
3ce0: 22 46 72 6f 6d 50 61 72 65 6e 74 22 2c 20 50 6f  "FromParent", Po
3cf0: 73 69 74 69 6f 6e 3d 22 30 22 29 5d 0d 0a 20 20  sition="0")]..  
3d00: 20 5b 41 6c 69 61 73 28 22 57 69 6e 64 6f 77 4e   [Alias("WindowN
3d10: 61 6d 65 22 29 5d 0d 0a 20 20 20 5b 53 74 72 69  ame")]..   [Stri
3d20: 6e 67 5b 5d 5d 24 4e 61 6d 65 0d 0a 2c 0d 0a 20  ng[]]$Name..,.. 
3d30: 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50 61 72    [Parameter(Par
3d40: 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 46  ameterSetName="F
3d50: 72 6f 6d 50 61 72 65 6e 74 22 2c 20 50 6f 73 69  romParent", Posi
3d60: 74 69 6f 6e 3d 22 31 22 29 5d 0d 0a 20 20 20 5b  tion="1")]..   [
3d70: 41 6c 69 61 73 28 22 54 79 70 65 22 2c 22 43 74  Alias("Type","Ct
3d80: 22 29 5d 0d 0a 20 20 20 5b 53 79 73 74 65 6d 2e  ")]..   [System.
3d90: 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61 74 69  Windows.Automati
3da0: 6f 6e 2e 43 6f 6e 74 72 6f 6c 54 79 70 65 5d 0d  on.ControlType].
3db0: 0a 20 20 20 5b 53 74 61 74 69 63 46 69 65 6c 64  .   [StaticField
3dc0: 28 28 5b 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77  (([System.Window
3dd0: 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 43 6f 6e  s.Automation.Con
3de0: 74 72 6f 6c 54 79 70 65 5d 29 29 5d 24 43 6f 6e  trolType]))]$Con
3df0: 74 72 6f 6c 54 79 70 65 0d 0a 2c 0d 0a 20 20 20  trolType..,..   
3e00: 5b 50 61 72 61 6d 65 74 65 72 28 50 61 72 61 6d  [Parameter(Param
3e10: 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 46 72 6f  eterSetName="Fro
3e20: 6d 50 61 72 65 6e 74 22 29 5d 0d 0a 20 20 20 5b  mParent")]..   [
3e30: 41 6c 69 61 73 28 22 55 49 64 22 29 5d 0d 0a 20  Alias("UId")].. 
3e40: 20 20 5b 53 74 72 69 6e 67 5b 5d 5d 24 41 75 74    [String[]]$Aut
3e50: 6f 6d 61 74 69 6f 6e 49 64 0d 0a 2c 0d 0a 20 20  omationId..,..  
3e60: 20 23 23 20 52 65 6d 6f 76 65 64 20 22 49 64 22   ## Removed "Id"
3e70: 20 61 6c 69 61 73 20 74 6f 20 61 6c 6c 6f 77 20   alias to allow 
3e80: 67 65 74 2d 70 72 6f 63 65 73 73 20 7c 20 53 65  get-process | Se
3e90: 6c 65 63 74 2d 57 69 6e 64 6f 77 20 70 69 70 65  lect-Window pipe
3ea0: 6c 69 6e 65 20 74 6f 20 66 69 6e 64 20 6a 75 73  line to find jus
3eb0: 74 20 4d 61 69 6e 57 69 6e 64 6f 77 48 61 6e 64  t MainWindowHand
3ec0: 6c 65 0d 0a 20 20 20 5b 50 61 72 61 6d 65 74 65  le..   [Paramete
3ed0: 72 28 50 61 72 61 6d 65 74 65 72 53 65 74 4e 61  r(ParameterSetNa
3ee0: 6d 65 3d 22 46 72 6f 6d 50 61 72 65 6e 74 22 2c  me="FromParent",
3ef0: 20 56 61 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69   ValueFromPipeli
3f00: 6e 65 42 79 50 72 6f 70 65 72 74 79 4e 61 6d 65  neByPropertyName
3f10: 3d 24 74 72 75 65 20 29 5d 0d 0a 20 20 20 5b 41  =$true )]..   [A
3f20: 6c 69 61 73 28 22 49 64 22 29 5d 0d 0a 20 20 20  lias("Id")]..   
3f30: 5b 49 6e 74 5b 5d 5d 24 50 49 44 0d 0a 2c 0d 0a  [Int[]]$PID..,..
3f40: 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50 61     [Parameter(Pa
3f50: 72 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 3d 22  rameterSetName="
3f60: 46 72 6f 6d 50 61 72 65 6e 74 22 29 5d 0d 0a 20  FromParent")].. 
3f70: 20 20 5b 41 6c 69 61 73 28 22 50 6e 22 29 5d 0d    [Alias("Pn")].
3f80: 0a 20 20 20 5b 53 74 72 69 6e 67 5b 5d 5d 24 50  .   [String[]]$P
3f90: 72 6f 63 65 73 73 4e 61 6d 65 0d 0a 2c 0d 0a 20  rocessName..,.. 
3fa0: 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50 61 72    [Parameter(Par
3fb0: 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 46  ameterSetName="F
3fc0: 72 6f 6d 50 61 72 65 6e 74 22 29 5d 0d 0a 20 20  romParent")]..  
3fd0: 20 5b 41 6c 69 61 73 28 22 43 6e 22 29 5d 0d 0a   [Alias("Cn")]..
3fe0: 20 20 20 5b 53 74 72 69 6e 67 5b 5d 5d 24 43 6c     [String[]]$Cl
3ff0: 61 73 73 4e 61 6d 65 0d 0a 2c 0d 0a 20 20 20 5b  assName..,..   [
4000: 73 77 69 74 63 68 5d 24 52 65 63 75 72 73 65 0d  switch]$Recurse.
4010: 0a 2c 0d 0a 20 20 20 5b 73 77 69 74 63 68 5d 24  .,..   [switch]$
4020: 42 61 72 65 0d 0a 29 0d 0a 70 72 6f 63 65 73 73  Bare..)..process
4030: 20 7b 0d 0a 0d 0a 20 20 20 57 72 69 74 65 2d 44   {....   Write-D
4040: 65 62 75 67 20 22 50 61 72 61 6d 65 74 65 72 73  ebug "Parameters
4050: 20 46 6f 75 6e 64 22 0d 0a 20 20 20 57 72 69 74   Found"..   Writ
4060: 65 2d 44 65 62 75 67 20 28 24 50 53 42 6f 75 6e  e-Debug ($PSBoun
4070: 64 50 61 72 61 6d 65 74 65 72 73 20 7c 20 46 6f  dParameters | Fo
4080: 72 6d 61 74 2d 54 61 62 6c 65 20 7c 20 4f 75 74  rmat-Table | Out
4090: 2d 53 74 72 69 6e 67 29 0d 0a 0d 0a 20 20 20 24  -String)....   $
40a0: 73 65 61 72 63 68 20 3d 20 22 43 68 69 6c 64 72  search = "Childr
40b0: 65 6e 22 0d 0a 20 20 20 69 66 28 24 52 65 63 75  en"..   if($Recu
40c0: 72 73 65 29 20 7b 20 24 73 65 61 72 63 68 20 3d  rse) { $search =
40d0: 20 22 44 65 73 63 65 6e 64 61 6e 74 73 22 20 7d   "Descendants" }
40e0: 0d 0a 20 20 20 0d 0a 20 20 20 24 63 6f 6e 64 69  ..   ..   $condi
40f0: 74 69 6f 6e 20 3d 20 5b 53 79 73 74 65 6d 2e 57  tion = [System.W
4100: 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61 74 69 6f  indows.Automatio
4110: 6e 2e 43 6f 6e 64 69 74 69 6f 6e 5d 3a 3a 54 72  n.Condition]::Tr
4120: 75 65 43 6f 6e 64 69 74 69 6f 6e 0d 0a 20 20 20  ueCondition..   
4130: 0d 0a 20 20 20 57 72 69 74 65 2d 56 65 72 62 6f  ..   Write-Verbo
4140: 73 65 20 24 50 53 43 6d 64 6c 65 74 2e 50 61 72  se $PSCmdlet.Par
4150: 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 0d 0a 20  ameterSetName.. 
4160: 20 20 73 77 69 74 63 68 20 2d 72 65 67 65 78 20    switch -regex 
4170: 28 24 50 53 43 6d 64 6c 65 74 2e 50 61 72 61 6d  ($PSCmdlet.Param
4180: 65 74 65 72 53 65 74 4e 61 6d 65 29 20 7b 0d 0a  eterSetName) {..
4190: 20 20 20 20 20 20 22 46 72 6f 6d 57 69 6e 64 6f        "FromWindo
41a0: 77 48 61 6e 64 6c 65 22 20 7b 0d 0a 20 20 20 20  wHandle" {..    
41b0: 20 20 20 20 20 57 72 69 74 65 2d 56 65 72 62 6f       Write-Verbo
41c0: 73 65 20 22 46 69 6e 64 69 6e 67 20 66 72 6f 6d  se "Finding from
41d0: 20 57 69 6e 64 6f 77 20 48 61 6e 64 6c 65 20 24   Window Handle $
41e0: 48 57 6e 64 22 0d 0a 20 20 20 20 20 20 20 20 20  HWnd"..         
41f0: 24 45 6c 65 6d 65 6e 74 20 3d 20 24 28 0d 0a 20  $Element = $(.. 
4200: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
4210: 63 68 28 24 68 57 6e 64 20 69 6e 20 24 57 69 6e  ch($hWnd in $Win
4220: 64 6f 77 48 61 6e 64 6c 65 29 20 7b 0d 0a 20 20  dowHandle) {..  
4230: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 53 79               [Sy
4240: 73 74 65 6d 2e 57 69 6e 64 6f 77 73 2e 41 75 74  stem.Windows.Aut
4250: 6f 6d 61 74 69 6f 6e 2e 41 75 74 6f 6d 61 74 69  omation.Automati
4260: 6f 6e 45 6c 65 6d 65 6e 74 5d 3a 3a 46 72 6f 6d  onElement]::From
4270: 48 61 6e 64 6c 65 28 20 24 68 57 6e 64 20 29 0d  Handle( $hWnd ).
4280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4290: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
42a0: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0d 0a 20       continue.. 
42b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 22 46       }..      "F
42c0: 72 6f 6d 50 6f 69 6e 74 22 20 7b 0d 0a 20 20 20  romPoint" {..   
42d0: 20 20 20 20 20 20 57 72 69 74 65 2d 56 65 72 62        Write-Verb
42e0: 6f 73 65 20 22 46 69 6e 64 69 6e 67 20 66 72 6f  ose "Finding fro
42f0: 6d 20 50 6f 69 6e 74 20 24 50 6f 69 6e 74 22 0d  m Point $Point".
4300: 0a 20 20 20 20 20 20 20 20 20 24 45 6c 65 6d 65  .         $Eleme
4310: 6e 74 20 3d 20 24 28 0d 0a 20 20 20 20 20 20 20  nt = $(..       
4320: 20 20 20 20 20 66 6f 72 65 61 63 68 28 24 70 74       foreach($pt
4330: 20 69 6e 20 24 50 6f 69 6e 74 29 20 7b 0d 0a 20   in $Point) {.. 
4340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 53                [S
4350: 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73 2e 41 75  ystem.Windows.Au
4360: 74 6f 6d 61 74 69 6f 6e 2e 41 75 74 6f 6d 61 74  tomation.Automat
4370: 69 6f 6e 45 6c 65 6d 65 6e 74 5d 3a 3a 46 72 6f  ionElement]::Fro
4380: 6d 50 6f 69 6e 74 28 20 24 70 74 20 29 0d 0a 20  mPoint( $pt ).. 
4390: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
43a0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
43b0: 20 20 20 63 6f 6e 74 69 6e 75 65 0d 0a 20 20 20     continue..   
43c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 22 46 72 6f     }..      "Fro
43d0: 6d 50 61 72 65 6e 74 22 20 7b 0d 0a 20 20 20 20  mParent" {..    
43e0: 20 20 20 20 20 57 72 69 74 65 2d 56 65 72 62 6f       Write-Verbo
43f0: 73 65 20 22 46 69 6e 64 69 6e 67 20 66 72 6f 6d  se "Finding from
4400: 20 50 61 72 65 6e 74 21 22 0d 0a 20 20 20 20 20   Parent!"..     
4410: 20 20 20 20 23 23 20 5b 53 79 73 74 65 6d 2e 57      ## [System.W
4420: 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61 74 69 6f  indows.Automatio
4430: 6e 2e 43 6f 6e 64 69 74 69 6f 6e 5b 5d 5d 24 63  n.Condition[]]$c
4440: 6f 6e 64 69 74 69 6f 6e 73 20 3d 20 5b 53 79 73  onditions = [Sys
4450: 74 65 6d 2e 57 69 6e 64 6f 77 73 2e 41 75 74 6f  tem.Windows.Auto
4460: 6d 61 74 69 6f 6e 2e 43 6f 6e 64 69 74 69 6f 6e  mation.Condition
4470: 5d 3a 3a 54 72 75 65 43 6f 6e 64 69 74 69 6f 6e  ]::TrueCondition
4480: 0d 0a 20 20 20 20 20 20 20 20 20 5b 53 63 72 69  ..         [Scri
4490: 70 74 42 6c 6f 63 6b 5b 5d 5d 24 66 69 6c 74 65  ptBlock[]]$filte
44a0: 72 73 20 3d 20 40 28 29 0d 0a 20 20 20 20 20 20  rs = @()..      
44b0: 20 20 20 69 66 28 24 41 75 74 6f 6d 61 74 69 6f     if($Automatio
44c0: 6e 49 64 29 20 7b 0d 0a 20 20 20 20 20 20 20 20  nId) {..        
44d0: 20 20 20 20 5b 53 79 73 74 65 6d 2e 57 69 6e 64      [System.Wind
44e0: 6f 77 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 43  ows.Automation.C
44f0: 6f 6e 64 69 74 69 6f 6e 5b 5d 5d 24 63 75 72 72  ondition[]]$curr
4500: 65 6e 74 20 3d 20 24 28 0d 0a 20 20 20 20 20 20  ent = $(..      
4510: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
4520: 28 24 61 69 64 20 69 6e 20 24 41 75 74 6f 6d 61  ($aid in $Automa
4530: 74 69 6f 6e 49 64 29 20 7b 0d 0a 20 20 20 20 20  tionId) {..     
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
4550: 2d 6f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e 57  -object System.W
4560: 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61 74 69 6f  indows.Automatio
4570: 6e 2e 50 72 6f 70 65 72 74 79 43 6f 6e 64 69 74  n.PropertyCondit
4580: 69 6f 6e 20 28 5b 53 79 73 74 65 6d 2e 57 69 6e  ion ([System.Win
4590: 64 6f 77 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e  dows.Automation.
45a0: 41 75 74 6f 6d 61 74 69 6f 6e 45 6c 65 6d 65 6e  AutomationElemen
45b0: 74 5d 3a 3a 41 75 74 6f 6d 61 74 69 6f 6e 49 64  t]::AutomationId
45c0: 50 72 6f 70 65 72 74 79 29 2c 20 24 61 69 64 0d  Property), $aid.
45d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
45e0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  }..            )
45f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
4600: 28 24 63 75 72 72 65 6e 74 2e 4c 65 6e 67 74 68  ($current.Length
4610: 20 2d 67 74 20 31 29 20 7b 0d 0a 20 20 20 20 20   -gt 1) {..     
4620: 20 20 20 20 20 20 20 20 20 20 5b 53 79 73 74 65            [Syste
4630: 6d 2e 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61  m.Windows.Automa
4640: 74 69 6f 6e 2e 43 6f 6e 64 69 74 69 6f 6e 5b 5d  tion.Condition[]
4650: 5d 24 63 6f 6e 64 69 74 69 6f 6e 73 20 2b 3d 20  ]$conditions += 
4660: 4e 65 77 2d 4f 62 6a 65 63 74 20 53 79 73 74 65  New-Object Syste
4670: 6d 2e 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61  m.Windows.Automa
4680: 74 69 6f 6e 2e 4f 72 43 6f 6e 64 69 74 69 6f 6e  tion.OrCondition
4690: 20 24 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20   $current..     
46a0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 28         } elseif(
46b0: 24 63 75 72 72 65 6e 74 2e 4c 65 6e 67 74 68 20  $current.Length 
46c0: 2d 65 71 20 31 29 20 7b 0d 0a 20 20 20 20 20 20  -eq 1) {..      
46d0: 20 20 20 20 20 20 20 20 20 5b 53 79 73 74 65 6d           [System
46e0: 2e 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61 74  .Windows.Automat
46f0: 69 6f 6e 2e 43 6f 6e 64 69 74 69 6f 6e 5b 5d 5d  ion.Condition[]]
4700: 24 63 6f 6e 64 69 74 69 6f 6e 73 20 2b 3d 20 24  $conditions += $
4710: 63 75 72 72 65 6e 74 5b 30 5d 0d 0a 20 20 20 20  current[0]..    
4720: 20 20 20 20 20 20 20 20 7d 20 20 0d 0a 20 20 20          }  ..   
4730: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4740: 20 20 69 66 28 24 50 49 44 29 20 7b 0d 0a 20 20    if($PID) {..  
4750: 20 20 20 20 20 20 20 20 20 20 5b 53 79 73 74 65            [Syste
4760: 6d 2e 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61  m.Windows.Automa
4770: 74 69 6f 6e 2e 43 6f 6e 64 69 74 69 6f 6e 5b 5d  tion.Condition[]
4780: 5d 24 63 75 72 72 65 6e 74 20 3d 20 24 28 0d 0a  ]$current = $(..
4790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
47a0: 6f 72 65 61 63 68 28 24 70 20 69 6e 20 24 50 49  oreach($p in $PI
47b0: 44 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  D) {..          
47c0: 20 20 20 20 20 20 20 20 6e 65 77 2d 6f 62 6a 65          new-obje
47d0: 63 74 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77  ct System.Window
47e0: 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 50 72 6f  s.Automation.Pro
47f0: 70 65 72 74 79 43 6f 6e 64 69 74 69 6f 6e 20 28  pertyCondition (
4800: 5b 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73 2e  [System.Windows.
4810: 41 75 74 6f 6d 61 74 69 6f 6e 2e 41 75 74 6f 6d  Automation.Autom
4820: 61 74 69 6f 6e 45 6c 65 6d 65 6e 74 5d 3a 3a 50  ationElement]::P
4830: 72 6f 63 65 73 73 49 64 50 72 6f 70 65 72 74 79  rocessIdProperty
4840: 29 2c 20 24 70 0d 0a 20 20 20 20 20 20 20 20 20  ), $p..         
4850: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4860: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
4870: 20 20 20 20 69 66 28 24 63 75 72 72 65 6e 74 2e      if($current.
4880: 4c 65 6e 67 74 68 20 2d 67 74 20 31 29 20 7b 0d  Length -gt 1) {.
4890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
48a0: 5b 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73 2e  [System.Windows.
48b0: 41 75 74 6f 6d 61 74 69 6f 6e 2e 43 6f 6e 64 69  Automation.Condi
48c0: 74 69 6f 6e 5b 5d 5d 24 63 6f 6e 64 69 74 69 6f  tion[]]$conditio
48d0: 6e 73 20 2b 3d 20 4e 65 77 2d 4f 62 6a 65 63 74  ns += New-Object
48e0: 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73 2e   System.Windows.
48f0: 41 75 74 6f 6d 61 74 69 6f 6e 2e 4f 72 43 6f 6e  Automation.OrCon
4900: 64 69 74 69 6f 6e 20 24 63 75 72 72 65 6e 74 0d  dition $current.
4910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
4920: 6c 73 65 69 66 28 24 63 75 72 72 65 6e 74 2e 4c  lseif($current.L
4930: 65 6e 67 74 68 20 2d 65 71 20 31 29 20 7b 0d 0a  ength -eq 1) {..
4940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
4950: 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73 2e 41  System.Windows.A
4960: 75 74 6f 6d 61 74 69 6f 6e 2e 43 6f 6e 64 69 74  utomation.Condit
4970: 69 6f 6e 5b 5d 5d 24 63 6f 6e 64 69 74 69 6f 6e  ion[]]$condition
4980: 73 20 2b 3d 20 24 63 75 72 72 65 6e 74 5b 30 5d  s += $current[0]
4990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            } 
49a0: 20 20 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20          ..      
49b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 69     }..         i
49c0: 66 28 24 50 72 6f 63 65 73 73 4e 61 6d 65 29 20  f($ProcessName) 
49d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
49e0: 66 28 24 50 72 6f 63 65 73 73 4e 61 6d 65 20 2d  f($ProcessName -
49f0: 6d 61 74 63 68 20 22 5c 3f 7c 5c 2a 7c 5c 5b 22  match "\?|\*|\["
4a00: 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) {..           
4a10: 20 20 20 20 5b 53 63 72 69 70 74 42 6c 6f 63 6b      [ScriptBlock
4a20: 5b 5d 5d 24 66 69 6c 74 65 72 73 20 2b 3d 20 7b  []]$filters += {
4a30: 20 24 28 66 6f 72 65 61 63 68 28 24 70 20 69 6e   $(foreach($p in
4a40: 20 24 50 72 6f 63 65 73 73 4e 61 6d 65 29 7b 20   $ProcessName){ 
4a50: 28 47 65 74 2d 50 72 6f 63 65 73 73 20 2d 69 64  (Get-Process -id
4a60: 20 24 5f 2e 47 65 74 43 75 72 72 65 6e 74 50 72   $_.GetCurrentPr
4a70: 6f 70 65 72 74 79 56 61 6c 75 65 28 5b 53 79 73  opertyValue([Sys
4a80: 74 65 6d 2e 57 69 6e 64 6f 77 73 2e 41 75 74 6f  tem.Windows.Auto
4a90: 6d 61 74 69 6f 6e 2e 41 75 74 6f 6d 61 74 69 6f  mation.Automatio
4aa0: 6e 45 6c 65 6d 65 6e 74 5d 3a 3a 50 72 6f 63 65  nElement]::Proce
4ab0: 73 73 49 64 50 72 6f 70 65 72 74 79 29 29 2e 50  ssIdProperty)).P
4ac0: 72 6f 63 65 73 73 4e 61 6d 65 20 2d 6c 69 6b 65  rocessName -like
4ad0: 20 24 70 20 7d 29 20 2d 63 6f 6e 74 61 69 6e 73   $p }) -contains
4ae0: 20 24 74 72 75 65 20 7d 20 0d 0a 20 20 20 20 20   $true } ..     
4af0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
4b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4b10: 5b 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73 2e  [System.Windows.
4b20: 41 75 74 6f 6d 61 74 69 6f 6e 2e 43 6f 6e 64 69  Automation.Condi
4b30: 74 69 6f 6e 5b 5d 5d 24 63 75 72 72 65 6e 74 20  tion[]]$current 
4b40: 3d 20 24 28 0d 0a 20 20 20 20 20 20 20 20 20 20  = $(..          
4b50: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 28          foreach(
4b60: 24 70 20 69 6e 20 47 65 74 2d 50 72 6f 63 65 73  $p in Get-Proces
4b70: 73 20 2d 4e 61 6d 65 20 24 50 72 6f 63 65 73 73  s -Name $Process
4b80: 4e 61 6d 65 29 20 7b 0d 0a 20 20 20 20 20 20 20  Name) {..       
4b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
4ba0: 77 2d 6f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e  w-object System.
4bb0: 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61 74 69  Windows.Automati
4bc0: 6f 6e 2e 50 72 6f 70 65 72 74 79 43 6f 6e 64 69  on.PropertyCondi
4bd0: 74 69 6f 6e 20 28 5b 53 79 73 74 65 6d 2e 57 69  tion ([System.Wi
4be0: 6e 64 6f 77 73 2e 41 75 74 6f 6d 61 74 69 6f 6e  ndows.Automation
4bf0: 2e 41 75 74 6f 6d 61 74 69 6f 6e 45 6c 65 6d 65  .AutomationEleme
4c00: 6e 74 5d 3a 3a 50 72 6f 63 65 73 73 49 64 50 72  nt]::ProcessIdPr
4c10: 6f 70 65 72 74 79 29 2c 20 24 70 2e 69 64 2c 20  operty), $p.id, 
4c20: 22 49 67 6e 6f 72 65 43 61 73 65 22 0d 0a 20 20  "IgnoreCase"..  
4c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c40: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
4c50: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
4c60: 20 20 20 20 69 66 28 24 63 75 72 72 65 6e 74 2e      if($current.
4c70: 4c 65 6e 67 74 68 20 2d 67 74 20 31 29 20 7b 0d  Length -gt 1) {.
4c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4c90: 20 20 20 5b 53 79 73 74 65 6d 2e 57 69 6e 64 6f     [System.Windo
4ca0: 77 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 43 6f  ws.Automation.Co
4cb0: 6e 64 69 74 69 6f 6e 5b 5d 5d 24 63 6f 6e 64 69  ndition[]]$condi
4cc0: 74 69 6f 6e 73 20 2b 3d 20 4e 65 77 2d 4f 62 6a  tions += New-Obj
4cd0: 65 63 74 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f  ect System.Windo
4ce0: 77 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 4f 72  ws.Automation.Or
4cf0: 43 6f 6e 64 69 74 69 6f 6e 20 24 63 75 72 72 65  Condition $curre
4d00: 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt..            
4d10: 20 20 20 7d 20 65 6c 73 65 69 66 28 24 63 75 72     } elseif($cur
4d20: 72 65 6e 74 2e 4c 65 6e 67 74 68 20 2d 65 71 20  rent.Length -eq 
4d30: 31 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  1) {..          
4d40: 20 20 20 20 20 20 20 20 5b 53 79 73 74 65 6d 2e          [System.
4d50: 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61 74 69  Windows.Automati
4d60: 6f 6e 2e 43 6f 6e 64 69 74 69 6f 6e 5b 5d 5d 24  on.Condition[]]$
4d70: 63 6f 6e 64 69 74 69 6f 6e 73 20 2b 3d 20 24 63  conditions += $c
4d80: 75 72 72 65 6e 74 5b 30 5d 0d 0a 20 20 20 20 20  urrent[0]..     
4d90: 20 20 20 20 20 20 20 20 20 20 7d 20 20 20 20 20            }     
4da0: 20 20 20 20 20 20 20 20 20 20 0d 0a 20 20 20 20            ..    
4db0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4dc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
4dd0: 69 66 28 24 4e 61 6d 65 29 20 7b 0d 0a 20 20 20  if($Name) {..   
4de0: 20 20 20 20 20 20 20 20 20 57 72 69 74 65 2d 56           Write-V
4df0: 65 72 62 6f 73 65 20 22 4e 61 6d 65 3a 20 24 4e  erbose "Name: $N
4e00: 61 6d 65 22 0d 0a 20 20 20 20 20 20 20 20 20 20  ame"..          
4e10: 20 20 69 66 28 24 4e 61 6d 65 20 2d 6d 61 74 63    if($Name -matc
4e20: 68 20 22 5c 3f 7c 5c 2a 7c 5c 5b 22 29 20 7b 0d  h "\?|\*|\[") {.
4e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4e40: 5b 53 63 72 69 70 74 42 6c 6f 63 6b 5b 5d 5d 24  [ScriptBlock[]]$
4e50: 66 69 6c 74 65 72 73 20 2b 3d 20 7b 20 24 28 66  filters += { $(f
4e60: 6f 72 65 61 63 68 28 24 6e 20 69 6e 20 24 4e 61  oreach($n in $Na
4e70: 6d 65 29 7b 20 24 5f 2e 47 65 74 43 75 72 72 65  me){ $_.GetCurre
4e80: 6e 74 50 72 6f 70 65 72 74 79 56 61 6c 75 65 28  ntPropertyValue(
4e90: 5b 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73 2e  [System.Windows.
4ea0: 41 75 74 6f 6d 61 74 69 6f 6e 2e 41 75 74 6f 6d  Automation.Autom
4eb0: 61 74 69 6f 6e 45 6c 65 6d 65 6e 74 5d 3a 3a 4e  ationElement]::N
4ec0: 61 6d 65 50 72 6f 70 65 72 74 79 29 20 2d 6c 69  ameProperty) -li
4ed0: 6b 65 20 24 6e 20 7d 29 20 2d 63 6f 6e 74 61 69  ke $n }) -contai
4ee0: 6e 73 20 24 74 72 75 65 20 7d 20 0d 0a 20 20 20  ns $true } ..   
4ef0: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
4f00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4f10: 20 20 5b 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77    [System.Window
4f20: 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 43 6f 6e  s.Automation.Con
4f30: 64 69 74 69 6f 6e 5b 5d 5d 24 63 75 72 72 65 6e  dition[]]$curren
4f40: 74 20 3d 20 24 28 0d 0a 20 20 20 20 20 20 20 20  t = $(..        
4f50: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
4f60: 68 28 24 6e 20 69 6e 20 24 4e 61 6d 65 29 7b 0d  h($n in $Name){.
4f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4f80: 20 20 20 20 20 20 6e 65 77 2d 6f 62 6a 65 63 74        new-object
4f90: 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73 2e   System.Windows.
4fa0: 41 75 74 6f 6d 61 74 69 6f 6e 2e 50 72 6f 70 65  Automation.Prope
4fb0: 72 74 79 43 6f 6e 64 69 74 69 6f 6e 20 28 5b 53  rtyCondition ([S
4fc0: 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73 2e 41 75  ystem.Windows.Au
4fd0: 74 6f 6d 61 74 69 6f 6e 2e 41 75 74 6f 6d 61 74  tomation.Automat
4fe0: 69 6f 6e 45 6c 65 6d 65 6e 74 5d 3a 3a 4e 61 6d  ionElement]::Nam
4ff0: 65 50 72 6f 70 65 72 74 79 29 2c 20 24 6e 2c 20  eProperty), $n, 
5000: 22 49 67 6e 6f 72 65 43 61 73 65 22 0d 0a 20 20  "IgnoreCase"..  
5010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5020: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
5030: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
5040: 20 20 20 20 69 66 28 24 63 75 72 72 65 6e 74 2e      if($current.
5050: 4c 65 6e 67 74 68 20 2d 67 74 20 31 29 20 7b 0d  Length -gt 1) {.
5060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5070: 20 20 20 5b 53 79 73 74 65 6d 2e 57 69 6e 64 6f     [System.Windo
5080: 77 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 43 6f  ws.Automation.Co
5090: 6e 64 69 74 69 6f 6e 5b 5d 5d 24 63 6f 6e 64 69  ndition[]]$condi
50a0: 74 69 6f 6e 73 20 2b 3d 20 4e 65 77 2d 4f 62 6a  tions += New-Obj
50b0: 65 63 74 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f  ect System.Windo
50c0: 77 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 4f 72  ws.Automation.Or
50d0: 43 6f 6e 64 69 74 69 6f 6e 20 24 63 75 72 72 65  Condition $curre
50e0: 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt..            
50f0: 20 20 20 7d 20 65 6c 73 65 69 66 28 24 63 75 72     } elseif($cur
5100: 72 65 6e 74 2e 4c 65 6e 67 74 68 20 2d 65 71 20  rent.Length -eq 
5110: 31 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  1) {..          
5120: 20 20 20 20 20 20 20 20 5b 53 79 73 74 65 6d 2e          [System.
5130: 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61 74 69  Windows.Automati
5140: 6f 6e 2e 43 6f 6e 64 69 74 69 6f 6e 5b 5d 5d 24  on.Condition[]]$
5150: 63 6f 6e 64 69 74 69 6f 6e 73 20 2b 3d 20 24 63  conditions += $c
5160: 75 72 72 65 6e 74 5b 30 5d 0d 0a 20 20 20 20 20  urrent[0]..     
5170: 20 20 20 20 20 20 20 20 20 20 7d 20 20 20 0d 0a            }   ..
5180: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5190: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
51a0: 20 20 20 20 69 66 28 24 43 6c 61 73 73 4e 61 6d      if($ClassNam
51b0: 65 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  e) {..          
51c0: 20 20 69 66 28 24 43 6c 61 73 73 4e 61 6d 65 20    if($ClassName 
51d0: 2d 6d 61 74 63 68 20 22 5c 3f 7c 5c 2a 7c 5c 5b  -match "\?|\*|\[
51e0: 22 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ") {..          
51f0: 20 20 20 20 20 5b 53 63 72 69 70 74 42 6c 6f 63       [ScriptBloc
5200: 6b 5b 5d 5d 24 66 69 6c 74 65 72 73 20 2b 3d 20  k[]]$filters += 
5210: 7b 20 24 28 66 6f 72 65 61 63 68 28 24 63 20 69  { $(foreach($c i
5220: 6e 20 24 43 6c 61 73 73 4e 61 6d 65 29 7b 20 24  n $ClassName){ $
5230: 5f 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f 70  _.GetCurrentProp
5240: 65 72 74 79 56 61 6c 75 65 28 5b 53 79 73 74 65  ertyValue([Syste
5250: 6d 2e 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61  m.Windows.Automa
5260: 74 69 6f 6e 2e 41 75 74 6f 6d 61 74 69 6f 6e 45  tion.AutomationE
5270: 6c 65 6d 65 6e 74 5d 3a 3a 43 6c 61 73 73 4e 61  lement]::ClassNa
5280: 6d 65 50 72 6f 70 65 72 74 79 29 20 2d 6c 69 6b  meProperty) -lik
5290: 65 20 24 63 20 7d 29 20 2d 63 6f 6e 74 61 69 6e  e $c }) -contain
52a0: 73 20 24 74 72 75 65 20 7d 20 0d 0a 20 20 20 20  s $true } ..    
52b0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
52c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
52d0: 20 5b 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73   [System.Windows
52e0: 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 43 6f 6e 64  .Automation.Cond
52f0: 69 74 69 6f 6e 5b 5d 5d 24 63 75 72 72 65 6e 74  ition[]]$current
5300: 20 3d 20 24 28 0d 0a 20 20 20 20 20 20 20 20 20   = $(..         
5310: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
5320: 28 24 63 20 69 6e 20 24 43 6c 61 73 73 4e 61 6d  ($c in $ClassNam
5330: 65 29 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e){..           
5340: 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d 6f 62            new-ob
5350: 6a 65 63 74 20 53 79 73 74 65 6d 2e 57 69 6e 64  ject System.Wind
5360: 6f 77 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 50  ows.Automation.P
5370: 72 6f 70 65 72 74 79 43 6f 6e 64 69 74 69 6f 6e  ropertyCondition
5380: 20 28 5b 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77   ([System.Window
5390: 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 41 75 74  s.Automation.Aut
53a0: 6f 6d 61 74 69 6f 6e 45 6c 65 6d 65 6e 74 5d 3a  omationElement]:
53b0: 3a 43 6c 61 73 73 4e 61 6d 65 50 72 6f 70 65 72  :ClassNameProper
53c0: 74 79 29 2c 20 24 63 2c 20 22 49 67 6e 6f 72 65  ty), $c, "Ignore
53d0: 43 61 73 65 22 0d 0a 20 20 20 20 20 20 20 20 20  Case"..         
53e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
53f0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
5400: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28               if(
5410: 24 63 75 72 72 65 6e 74 2e 4c 65 6e 67 74 68 20  $current.Length 
5420: 2d 67 74 20 31 29 20 7b 0d 0a 20 20 20 20 20 20  -gt 1) {..      
5430: 20 20 20 20 20 20 20 20 20 20 20 20 5b 53 79 73              [Sys
5440: 74 65 6d 2e 57 69 6e 64 6f 77 73 2e 41 75 74 6f  tem.Windows.Auto
5450: 6d 61 74 69 6f 6e 2e 43 6f 6e 64 69 74 69 6f 6e  mation.Condition
5460: 5b 5d 5d 24 63 6f 6e 64 69 74 69 6f 6e 73 20 2b  []]$conditions +
5470: 3d 20 4e 65 77 2d 4f 62 6a 65 63 74 20 53 79 73  = New-Object Sys
5480: 74 65 6d 2e 57 69 6e 64 6f 77 73 2e 41 75 74 6f  tem.Windows.Auto
5490: 6d 61 74 69 6f 6e 2e 4f 72 43 6f 6e 64 69 74 69  mation.OrConditi
54a0: 6f 6e 20 24 63 75 72 72 65 6e 74 0d 0a 20 20 20  on $current..   
54b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
54c0: 73 65 69 66 28 24 63 75 72 72 65 6e 74 2e 4c 65  seif($current.Le
54d0: 6e 67 74 68 20 2d 65 71 20 31 29 20 7b 0d 0a 20  ngth -eq 1) {.. 
54e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
54f0: 20 5b 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73   [System.Windows
5500: 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 43 6f 6e 64  .Automation.Cond
5510: 69 74 69 6f 6e 5b 5d 5d 24 63 6f 6e 64 69 74 69  ition[]]$conditi
5520: 6f 6e 73 20 2b 3d 20 24 63 75 72 72 65 6e 74 5b  ons += $current[
5530: 30 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0]..            
5540: 20 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20     }            
5550: 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20        ..        
5560: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
5570: 7d 0d 0a 20 20 20 20 20 20 20 20 20 69 66 28 24  }..         if($
5580: 43 6f 6e 74 72 6f 6c 54 79 70 65 29 20 7b 0d 0a  ControlType) {..
5590: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 24              if($
55a0: 43 6f 6e 74 72 6f 6c 54 79 70 65 20 2d 6d 61 74  ControlType -mat
55b0: 63 68 20 22 5c 3f 7c 5c 2a 7c 5c 5b 22 29 20 7b  ch "\?|\*|\[") {
55c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
55d0: 20 5b 53 63 72 69 70 74 42 6c 6f 63 6b 5b 5d 5d   [ScriptBlock[]]
55e0: 24 66 69 6c 74 65 72 73 20 2b 3d 20 7b 20 24 28  $filters += { $(
55f0: 66 6f 72 65 61 63 68 28 24 63 20 69 6e 20 24 43  foreach($c in $C
5600: 6f 6e 74 72 6f 6c 54 79 70 65 29 7b 20 24 5f 2e  ontrolType){ $_.
5610: 47 65 74 43 75 72 72 65 6e 74 50 72 6f 70 65 72  GetCurrentProper
5620: 74 79 56 61 6c 75 65 28 5b 53 79 73 74 65 6d 2e  tyValue([System.
5630: 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61 74 69  Windows.Automati
5640: 6f 6e 2e 41 75 74 6f 6d 61 74 69 6f 6e 45 6c 65  on.AutomationEle
5650: 6d 65 6e 74 5d 3a 3a 43 6f 6e 74 72 6f 6c 54 79  ment]::ControlTy
5660: 70 65 50 72 6f 70 65 72 74 79 29 20 2d 6c 69 6b  peProperty) -lik
5670: 65 20 24 63 20 7d 29 20 2d 63 6f 6e 74 61 69 6e  e $c }) -contain
5680: 73 20 24 74 72 75 65 20 7d 20 0d 0a 20 20 20 20  s $true } ..    
5690: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
56a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
56b0: 20 5b 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73   [System.Windows
56c0: 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 43 6f 6e 64  .Automation.Cond
56d0: 69 74 69 6f 6e 5b 5d 5d 24 63 75 72 72 65 6e 74  ition[]]$current
56e0: 20 3d 20 24 28 0d 0a 20 20 20 20 20 20 20 20 20   = $(..         
56f0: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
5700: 28 24 63 20 69 6e 20 24 43 6f 6e 74 72 6f 6c 54  ($c in $ControlT
5710: 79 70 65 29 7b 0d 0a 20 20 20 20 20 20 20 20 20  ype){..         
5720: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d              new-
5730: 6f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e 57 69  object System.Wi
5740: 6e 64 6f 77 73 2e 41 75 74 6f 6d 61 74 69 6f 6e  ndows.Automation
5750: 2e 50 72 6f 70 65 72 74 79 43 6f 6e 64 69 74 69  .PropertyConditi
5760: 6f 6e 20 28 5b 53 79 73 74 65 6d 2e 57 69 6e 64  on ([System.Wind
5770: 6f 77 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 41  ows.Automation.A
5780: 75 74 6f 6d 61 74 69 6f 6e 45 6c 65 6d 65 6e 74  utomationElement
5790: 5d 3a 3a 43 6f 6e 74 72 6f 6c 54 79 70 65 50 72  ]::ControlTypePr
57a0: 6f 70 65 72 74 79 29 2c 20 24 63 0d 0a 20 20 20  operty), $c..   
57b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
57c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
57d0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
57e0: 20 20 20 69 66 28 24 63 75 72 72 65 6e 74 2e 4c     if($current.L
57f0: 65 6e 67 74 68 20 2d 67 74 20 31 29 20 7b 0d 0a  ength -gt 1) {..
5800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5810: 20 20 5b 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77    [System.Window
5820: 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 43 6f 6e  s.Automation.Con
5830: 64 69 74 69 6f 6e 5b 5d 5d 24 63 6f 6e 64 69 74  dition[]]$condit
5840: 69 6f 6e 73 20 2b 3d 20 4e 65 77 2d 4f 62 6a 65  ions += New-Obje
5850: 63 74 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77  ct System.Window
5860: 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 4f 72 43  s.Automation.OrC
5870: 6f 6e 64 69 74 69 6f 6e 20 24 63 75 72 72 65 6e  ondition $curren
5880: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
5890: 20 20 7d 20 65 6c 73 65 69 66 28 24 63 75 72 72    } elseif($curr
58a0: 65 6e 74 2e 4c 65 6e 67 74 68 20 2d 65 71 20 31  ent.Length -eq 1
58b0: 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) {..           
58c0: 20 20 20 20 20 20 20 5b 53 79 73 74 65 6d 2e 57         [System.W
58d0: 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61 74 69 6f  indows.Automatio
58e0: 6e 2e 43 6f 6e 64 69 74 69 6f 6e 5b 5d 5d 24 63  n.Condition[]]$c
58f0: 6f 6e 64 69 74 69 6f 6e 73 20 2b 3d 20 24 63 75  onditions += $cu
5900: 72 72 65 6e 74 5b 30 5d 0d 0a 20 20 20 20 20 20  rrent[0]..      
5910: 20 20 20 20 20 20 20 20 20 7d 20 20 20 20 20 20           }      
5920: 20 20 20 20 20 20 20 20 20 20 20 20 0d 0a 20 20              ..  
5930: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5940: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5950: 20 20 0d 0a 20 20 20 20 20 20 20 20 20 69 66 28    ..         if(
5960: 24 63 6f 6e 64 69 74 69 6f 6e 73 2e 4c 65 6e 67  $conditions.Leng
5970: 74 68 20 2d 67 74 20 31 29 20 7b 0d 0a 20 20 20  th -gt 1) {..   
5980: 20 20 20 20 20 20 20 20 20 5b 53 79 73 74 65 6d           [System
5990: 2e 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61 74  .Windows.Automat
59a0: 69 6f 6e 2e 43 6f 6e 64 69 74 69 6f 6e 5d 24 63  ion.Condition]$c
59b0: 6f 6e 64 69 74 69 6f 6e 20 3d 20 4e 65 77 2d 4f  ondition = New-O
59c0: 62 6a 65 63 74 20 53 79 73 74 65 6d 2e 57 69 6e  bject System.Win
59d0: 64 6f 77 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e  dows.Automation.
59e0: 41 6e 64 43 6f 6e 64 69 74 69 6f 6e 20 24 63 6f  AndCondition $co
59f0: 6e 64 69 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20  nditions..      
5a00: 20 20 20 7d 20 65 6c 73 65 69 66 28 24 63 6f 6e     } elseif($con
5a10: 64 69 74 69 6f 6e 73 29 20 7b 0d 0a 20 20 20 20  ditions) {..    
5a20: 20 20 20 20 20 20 20 20 5b 53 79 73 74 65 6d 2e          [System.
5a30: 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61 74 69  Windows.Automati
5a40: 6f 6e 2e 43 6f 6e 64 69 74 69 6f 6e 5d 24 63 6f  on.Condition]$co
5a50: 6e 64 69 74 69 6f 6e 20 3d 20 24 63 6f 6e 64 69  ndition = $condi
5a60: 74 69 6f 6e 73 5b 30 5d 0d 0a 20 20 20 20 20 20  tions[0]..      
5a70: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..   
5a80: 20 20 20 20 20 20 20 20 20 5b 53 79 73 74 65 6d           [System
5a90: 2e 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61 74  .Windows.Automat
5aa0: 69 6f 6e 2e 43 6f 6e 64 69 74 69 6f 6e 5d 24 63  ion.Condition]$c
5ab0: 6f 6e 64 69 74 69 6f 6e 20 3d 20 5b 53 79 73 74  ondition = [Syst
5ac0: 65 6d 2e 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d  em.Windows.Autom
5ad0: 61 74 69 6f 6e 2e 43 6f 6e 64 69 74 69 6f 6e 5d  ation.Condition]
5ae0: 3a 3a 54 72 75 65 43 6f 6e 64 69 74 69 6f 6e 0d  ::TrueCondition.
5af0: 0a 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  .         }..   
5b00: 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20        ..        
5b10: 20 49 66 28 24 56 65 72 62 6f 73 65 50 72 65 66   If($VerbosePref
5b20: 65 72 65 6e 63 65 20 2d 67 74 20 22 53 69 6c 65  erence -gt "Sile
5b30: 6e 74 6c 79 43 6f 6e 74 69 6e 75 65 22 29 20 7b  ntlyContinue") {
5b40: 0d 0a 20 20 20 20 20 20 20 20 20 0d 0a 20 20 20  ..         ..   
5b50: 20 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f           functio
5b60: 6e 20 57 72 69 74 65 2d 43 6f 6e 64 69 74 69 6f  n Write-Conditio
5b70: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..           
5b80: 20 20 20 20 70 61 72 61 6d 28 5b 50 61 72 61 6d      param([Param
5b90: 65 74 65 72 28 56 61 6c 75 65 46 72 6f 6d 50 69  eter(ValueFromPi
5ba0: 70 65 6c 69 6e 65 3d 24 74 72 75 65 29 5d 24 63  peline=$true)]$c
5bb0: 6f 6e 64 69 74 69 6f 6e 2c 20 24 69 6e 64 65 6e  ondition, $inden
5bc0: 74 20 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20  t = 0)..        
5bd0: 20 20 20 20 20 20 20 70 72 6f 63 65 73 73 20 7b         process {
5be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5bf0: 20 20 20 20 57 72 69 74 65 2d 44 65 62 75 67 20      Write-Debug 
5c00: 28 24 43 6f 6e 64 69 74 69 6f 6e 20 7c 20 66 6c  ($Condition | fl
5c10: 20 2a 20 20 7c 20 4f 75 74 2d 53 74 72 69 6e 67   *  | Out-String
5c20: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )               
5c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5c40: 20 20 20 20 69 66 28 24 63 6f 6e 64 69 74 69 6f      if($conditio
5c50: 6e 20 2d 69 73 20 5b 53 79 73 74 65 6d 2e 57 69  n -is [System.Wi
5c60: 6e 64 6f 77 73 2e 41 75 74 6f 6d 61 74 69 6f 6e  ndows.Automation
5c70: 2e 41 6e 64 43 6f 6e 64 69 74 69 6f 6e 5d 20 2d  .AndCondition] -
5c80: 6f 72 20 24 63 6f 6e 64 69 74 69 6f 6e 20 2d 69  or $condition -i
5c90: 73 20 5b 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77  s [System.Window
5ca0: 73 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 4f 72 43  s.Automation.OrC
5cb0: 6f 6e 64 69 74 69 6f 6e 5d 29 20 7b 0d 0a 20 20  ondition]) {..  
5cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5cd0: 20 20 20 57 72 69 74 65 2d 56 65 72 62 6f 73 65     Write-Verbose
5ce0: 20 28 28 22 20 22 2a 24 69 6e 64 65 6e 74 29 20   ((" "*$indent) 
5cf0: 2b 20 24 43 6f 6e 64 69 74 69 6f 6e 2e 47 65 74  + $Condition.Get
5d00: 54 79 70 65 28 29 2e 4e 61 6d 65 20 29 0d 0a 20  Type().Name ).. 
5d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d20: 20 20 20 20 24 63 6f 6e 64 69 74 69 6f 6e 2e 47      $condition.G
5d30: 65 74 43 6f 6e 64 69 74 69 6f 6e 73 28 29 2e 47  etConditions().G
5d40: 65 74 45 6e 75 6d 65 72 61 74 6f 72 28 29 20 7c  etEnumerator() |
5d50: 20 57 72 69 74 65 2d 43 6f 6e 64 69 74 69 6f 6e   Write-Condition
5d60: 20 2d 49 6e 64 65 6e 74 20 28 24 49 6e 64 65 6e   -Indent ($Inden
5d70: 74 2b 34 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t+4)..          
5d80: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66          } elseif
5d90: 28 24 63 6f 6e 64 69 74 69 6f 6e 20 2d 69 73 20  ($condition -is 
5da0: 5b 53 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73 2e  [System.Windows.
5db0: 41 75 74 6f 6d 61 74 69 6f 6e 2e 50 72 6f 70 65  Automation.Prope
5dc0: 72 74 79 43 6f 6e 64 69 74 69 6f 6e 5d 29 20 7b  rtyCondition]) {
5dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5de0: 20 20 20 20 20 20 20 57 72 69 74 65 2d 56 65 72         Write-Ver
5df0: 62 6f 73 65 20 28 28 22 20 22 2a 24 69 6e 64 65  bose ((" "*$inde
5e00: 6e 74 29 20 2b 20 24 43 6f 6e 64 69 74 69 6f 6e  nt) + $Condition
5e10: 2e 50 72 6f 70 65 72 74 79 2e 50 72 6f 67 72 61  .Property.Progra
5e20: 6d 6d 61 74 69 63 4e 61 6d 65 20 2b 20 22 20 3d  mmaticName + " =
5e30: 20 27 22 20 2b 20 24 43 6f 6e 64 69 74 69 6f 6e   '" + $Condition
5e40: 2e 56 61 6c 75 65 20 2b 20 22 27 20 28 22 20 2b  .Value + "' (" +
5e50: 20 24 43 6f 6e 64 69 74 69 6f 6e 2e 46 6c 61 67   $Condition.Flag
5e60: 73 20 2b 20 22 29 22 29 0d 0a 20 20 20 20 20 20  s + ")")..      
5e70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
5e80: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..          
5e90: 20 20 20 20 20 20 20 20 20 20 20 57 72 69 74 65             Write
5ea0: 2d 56 65 72 62 6f 73 65 20 28 28 22 20 22 2a 24  -Verbose ((" "*$
5eb0: 69 6e 64 65 6e 74 29 20 2b 20 24 43 6f 6e 64 69  indent) + $Condi
5ec0: 74 69 6f 6e 2e 47 65 74 54 79 70 65 28 29 2e 4e  tion.GetType().N
5ed0: 61 6d 65 20 2b 20 22 20 77 68 65 72 65 20 27 22  ame + " where '"
5ee0: 20 2b 20 24 43 6f 6e 64 69 74 69 6f 6e 2e 56 61   + $Condition.Va
5ef0: 6c 75 65 20 2b 20 22 27 20 28 22 20 2b 20 24 43  lue + "' (" + $C
5f00: 6f 6e 64 69 74 69 6f 6e 2e 46 6c 61 67 73 20 2b  ondition.Flags +
5f10: 20 22 29 22 29 0d 0a 20 20 20 20 20 20 20 20 20   ")")..         
5f20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5f30: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
5f40: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5f50: 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20        ..        
5f60: 20 20 20 20 57 72 69 74 65 2d 56 65 72 62 6f 73      Write-Verbos
5f70: 65 20 22 43 4f 4e 44 49 54 49 4f 4e 53 20 3d 3d  e "CONDITIONS ==
5f80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 22 0d 0a 20 20  ==========="..  
5f90: 20 20 20 20 20 20 20 20 20 20 24 67 6c 6f 62 61            $globa
5fa0: 6c 3a 4c 61 73 74 43 6f 6e 64 69 74 69 6f 6e 20  l:LastCondition 
5fb0: 3d 20 24 63 6f 6e 64 69 74 69 6f 6e 0d 0a 20 20  = $condition..  
5fc0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
5fd0: 68 28 24 63 20 69 6e 20 24 63 6f 6e 64 69 74 69  h($c in $conditi
5fe0: 6f 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20  on) {           
5ff0: 20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ..             
6000: 20 20 57 72 69 74 65 2d 43 6f 6e 64 69 74 69 6f    Write-Conditio
6010: 6e 20 24 63 0d 0a 20 20 20 20 20 20 20 20 20 20  n $c..          
6020: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
6030: 20 57 72 69 74 65 2d 56 65 72 62 6f 73 65 20 22   Write-Verbose "
6040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 20 43 4f  ============= CO
6050: 4e 44 49 54 49 4f 4e 53 22 0d 0a 20 20 20 20 20  NDITIONS"..     
6060: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6070: 0d 0a 20 20 20 20 20 20 20 20 20 69 66 28 24 66  ..         if($f
6080: 69 6c 74 65 72 73 2e 43 6f 75 6e 74 20 2d 67 74  ilters.Count -gt
6090: 20 30 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20   0) {..         
60a0: 20 20 20 24 45 6c 65 6d 65 6e 74 20 3d 20 24 50     $Element = $P
60b0: 61 72 65 6e 74 2e 46 69 6e 64 41 6c 6c 28 20 24  arent.FindAll( $
60c0: 73 65 61 72 63 68 2c 20 24 63 6f 6e 64 69 74 69  search, $conditi
60d0: 6f 6e 20 29 20 7c 20 57 68 65 72 65 2d 4f 62 6a  on ) | Where-Obj
60e0: 65 63 74 20 7b 20 24 69 74 65 6d 20 3d 20 24 5f  ect { $item = $_
60f0: 3b 20 20 66 6f 72 65 61 63 68 28 24 66 20 69 6e  ;  foreach($f in
6100: 20 24 66 69 6c 74 65 72 73 29 20 7b 20 24 69 74   $filters) { $it
6110: 65 6d 20 3d 20 24 69 74 65 6d 20 7c 20 57 68 65  em = $item | Whe
6120: 72 65 20 24 66 20 7d 3b 20 24 69 74 65 6d 20 7d  re $f }; $item }
6130: 0d 0a 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  ..         } els
6140: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..           
6150: 20 24 45 6c 65 6d 65 6e 74 20 3d 20 24 50 61 72   $Element = $Par
6160: 65 6e 74 2e 46 69 6e 64 41 6c 6c 28 20 24 73 65  ent.FindAll( $se
6170: 61 72 63 68 2c 20 24 63 6f 6e 64 69 74 69 6f 6e  arch, $condition
6180: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 7d 0d 0a   )..         }..
6190: 20 20 20 20 20 20 7d 20 20 0d 0a 20 20 20 7d 0d        }  ..   }.
61a0: 0a 20 20 20 0d 0a 20 20 20 57 72 69 74 65 2d 56  .   ..   Write-V
61b0: 65 72 62 6f 73 65 20 22 45 6c 65 6d 65 6e 74 20  erbose "Element 
61c0: 43 6f 75 6e 74 3a 20 24 28 40 28 24 45 6c 65 6d  Count: $(@($Elem
61d0: 65 6e 74 29 2e 43 6f 75 6e 74 29 22 0d 0a 20 20  ent).Count)"..  
61e0: 20 69 66 28 24 45 6c 65 6d 65 6e 74 29 20 7b 0d   if($Element) {.
61f0: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 28 24  .      foreach($
6200: 65 6c 20 69 6e 20 24 45 6c 65 6d 65 6e 74 29 20  el in $Element) 
6210: 7b 0d 0a 20 20 20 20 20 20 20 20 20 69 66 28 24  {..         if($
6220: 42 61 72 65 29 20 7b 0d 0a 20 20 20 20 20 20 20  Bare) {..       
6230: 20 20 20 20 20 57 72 69 74 65 2d 4f 75 74 70 75       Write-Outpu
6240: 74 20 24 65 6c 0d 0a 20 20 20 20 20 20 20 20 20  t $el..         
6250: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..      
6260: 20 20 20 20 20 20 24 65 20 3d 20 4e 65 77 2d 4f        $e = New-O
6270: 62 6a 65 63 74 20 50 53 4f 62 6a 65 63 74 20 24  bject PSObject $
6280: 65 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  el..            
6290: 66 6f 72 65 61 63 68 28 24 70 72 6f 70 20 69 6e  foreach($prop in
62a0: 20 24 65 2e 47 65 74 53 75 70 70 6f 72 74 65 64   $e.GetSupported
62b0: 50 72 6f 70 65 72 74 69 65 73 28 29 20 7c 20 53  Properties() | S
62c0: 6f 72 74 20 50 72 6f 67 72 61 6d 6d 61 74 69 63  ort Programmatic
62d0: 4e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20  Name)..         
62e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
62f0: 20 20 20 20 20 23 23 20 54 4f 44 4f 3a 20 6d 61       ## TODO: ma
6300: 6b 65 20 73 75 72 65 20 61 6c 6c 20 74 68 65 73  ke sure all thes
6310: 65 20 73 68 6f 77 20 75 70 3a 20 5b 53 79 73 74  e show up: [Syst
6320: 65 6d 2e 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d  em.Windows.Autom
6330: 61 74 69 6f 6e 2e 41 75 74 6f 6d 61 74 69 6f 6e  ation.Automation
6340: 45 6c 65 6d 65 6e 74 5d 20 7c 20 67 6d 20 2d 73  Element] | gm -s
6350: 74 61 20 2d 74 79 70 65 20 50 72 6f 70 65 72 74  ta -type Propert
6360: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
6370: 20 20 24 70 72 6f 70 4e 61 6d 65 20 3d 20 5b 53    $propName = [S
6380: 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73 2e 41 75  ystem.Windows.Au
6390: 74 6f 6d 61 74 69 6f 6e 2e 41 75 74 6f 6d 61 74  tomation.Automat
63a0: 69 6f 6e 5d 3a 3a 50 72 6f 70 65 72 74 79 4e 61  ion]::PropertyNa
63b0: 6d 65 28 24 70 72 6f 70 29 0d 0a 20 20 20 20 20  me($prop)..     
63c0: 20 20 20 20 20 20 20 20 20 20 41 64 64 2d 4d 65            Add-Me
63d0: 6d 62 65 72 20 2d 49 6e 70 75 74 4f 62 6a 65 63  mber -InputObjec
63e0: 74 20 24 65 20 2d 54 79 70 65 20 53 63 72 69 70  t $e -Type Scrip
63f0: 74 50 72 6f 70 65 72 74 79 20 2d 4e 61 6d 65 20  tProperty -Name 
6400: 24 70 72 6f 70 4e 61 6d 65 20 2d 56 61 6c 75 65  $propName -Value
6410: 20 28 5b 53 63 72 69 70 74 42 6c 6f 63 6b 5d 3a   ([ScriptBlock]:
6420: 3a 43 72 65 61 74 65 28 20 22 60 24 74 68 69 73  :Create( "`$this
6430: 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f 70 65  .GetCurrentPrope
6440: 72 74 79 56 61 6c 75 65 28 20 5b 53 79 73 74 65  rtyValue( [Syste
6450: 6d 2e 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d 61  m.Windows.Automa
6460: 74 69 6f 6e 2e 41 75 74 6f 6d 61 74 69 6f 6e 50  tion.AutomationP
6470: 72 6f 70 65 72 74 79 5d 3a 3a 4c 6f 6f 6b 75 70  roperty]::Lookup
6480: 42 79 49 64 28 20 24 28 24 70 72 6f 70 2e 49 64  ById( $($prop.Id
6490: 29 20 29 29 22 20 29 29 20 2d 45 41 20 30 0d 0a  ) ))" )) -EA 0..
64a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
64b0: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
64c0: 63 68 28 24 70 61 74 74 20 69 6e 20 24 65 2e 47  ch($patt in $e.G
64d0: 65 74 53 75 70 70 6f 72 74 65 64 50 61 74 74 65  etSupportedPatte
64e0: 72 6e 73 28 29 7c 20 53 6f 72 74 20 50 72 6f 67  rns()| Sort Prog
64f0: 72 61 6d 6d 61 74 69 63 4e 61 6d 65 29 0d 0a 20  rammaticName).. 
6500: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6510: 20 20 20 20 20 20 20 20 20 20 20 20 20 41 64 64               Add
6520: 2d 4d 65 6d 62 65 72 20 2d 49 6e 70 75 74 4f 62  -Member -InputOb
6530: 6a 65 63 74 20 24 65 20 2d 54 79 70 65 20 53 63  ject $e -Type Sc
6540: 72 69 70 74 50 72 6f 70 65 72 74 79 20 2d 4e 61  riptProperty -Na
6550: 6d 65 20 28 24 70 61 74 74 2e 50 72 6f 67 72 61  me ($patt.Progra
6560: 6d 6d 61 74 69 63 4e 61 6d 65 2e 52 65 70 6c 61  mmaticName.Repla
6570: 63 65 28 22 50 61 74 74 65 72 6e 49 64 65 6e 74  ce("PatternIdent
6580: 69 66 69 65 72 73 2e 50 61 74 74 65 72 6e 22 2c  ifiers.Pattern",
6590: 22 22 29 20 2b 20 22 50 61 74 74 65 72 6e 22 29  "") + "Pattern")
65a0: 20 2d 56 61 6c 75 65 20 28 5b 53 63 72 69 70 74   -Value ([Script
65b0: 42 6c 6f 63 6b 5d 3a 3a 43 72 65 61 74 65 28 20  Block]::Create( 
65c0: 22 60 24 74 68 69 73 2e 47 65 74 43 75 72 72 65  "`$this.GetCurre
65d0: 6e 74 50 61 74 74 65 72 6e 28 20 5b 53 79 73 74  ntPattern( [Syst
65e0: 65 6d 2e 57 69 6e 64 6f 77 73 2e 41 75 74 6f 6d  em.Windows.Autom
65f0: 61 74 69 6f 6e 2e 41 75 74 6f 6d 61 74 69 6f 6e  ation.Automation
6600: 50 61 74 74 65 72 6e 5d 3a 3a 4c 6f 6f 6b 75 70  Pattern]::Lookup
6610: 42 79 49 64 28 20 27 24 28 24 70 61 74 74 2e 49  ById( '$($patt.I
6620: 64 29 27 20 29 20 29 22 20 29 29 20 2d 45 41 20  d)' ) )" )) -EA 
6630: 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  0..            }
6640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 57 72  ..            Wr
6650: 69 74 65 2d 4f 75 74 70 75 74 20 24 65 0d 0a 20  ite-Output $e.. 
6660: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6670: 20 7d 0d 0a 20 20 20 7d 0d 0a 7d 0d 0a 0d 0a 7d   }..   }..}....}
6680: 0d 0a 0d 0a 0d 0a 0d 0a 23 20 20 20 5b 43 6d 64  ........#   [Cmd
6690: 6c 65 74 28 56 65 72 62 73 43 6f 6d 6d 6f 6e 2e  let(VerbsCommon.
66a0: 41 64 64 2c 20 22 55 49 41 48 61 6e 64 6c 65 72  Add, "UIAHandler
66b0: 22 29 5d 0d 0a 23 20 20 20 70 75 62 6c 69 63 20  ")]..#   public 
66c0: 63 6c 61 73 73 20 41 64 64 55 49 41 48 61 6e 64  class AddUIAHand
66d0: 6c 65 72 43 6f 6d 6d 61 6e 64 20 3a 20 50 53 43  lerCommand : PSC
66e0: 6d 64 6c 65 74 0d 0a 23 20 20 20 7b 0d 0a 23 20  mdlet..#   {..# 
66f0: 20 20 20 20 20 70 72 69 76 61 74 65 20 41 75 74       private Aut
6700: 6f 6d 61 74 69 6f 6e 45 6c 65 6d 65 6e 74 20 5f  omationElement _
6710: 70 61 72 65 6e 74 20 3d 20 41 75 74 6f 6d 61 74  parent = Automat
6720: 69 6f 6e 45 6c 65 6d 65 6e 74 2e 52 6f 6f 74 45  ionElement.RootE
6730: 6c 65 6d 65 6e 74 3b 0d 0a 23 20 20 20 20 20 20  lement;..#      
6740: 70 72 69 76 61 74 65 20 41 75 74 6f 6d 61 74 69  private Automati
6750: 6f 6e 45 76 65 6e 74 20 5f 65 76 65 6e 74 20 3d  onEvent _event =
6760: 20 57 69 6e 64 6f 77 50 61 74 74 65 72 6e 2e 57   WindowPattern.W
6770: 69 6e 64 6f 77 4f 70 65 6e 65 64 45 76 65 6e 74  indowOpenedEvent
6780: 3b 0d 0a 23 20 20 20 20 20 20 70 72 69 76 61 74  ;..#      privat
6790: 65 20 54 72 65 65 53 63 6f 70 65 20 5f 73 63 6f  e TreeScope _sco
67a0: 70 65 20 3d 20 54 72 65 65 53 63 6f 70 65 2e 43  pe = TreeScope.C
67b0: 68 69 6c 64 72 65 6e 3b 0d 0a 23 0d 0a 23 20 20  hildren;..#..#  
67c0: 20 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 56      [Parameter(V
67d0: 61 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65  alueFromPipeline
67e0: 20 3d 20 74 72 75 65 29 5d 0d 0a 23 20 20 20 20   = true)]..#    
67f0: 20 20 5b 41 6c 69 61 73 28 22 50 61 72 65 6e 74    [Alias("Parent
6800: 22 2c 20 22 45 6c 65 6d 65 6e 74 22 2c 20 22 52  ", "Element", "R
6810: 6f 6f 74 22 29 5d 0d 0a 23 20 20 20 20 20 20 70  oot")]..#      p
6820: 75 62 6c 69 63 20 41 75 74 6f 6d 61 74 69 6f 6e  ublic Automation
6830: 45 6c 65 6d 65 6e 74 20 49 6e 70 75 74 4f 62 6a  Element InputObj
6840: 65 63 74 20 7b 20 73 65 74 20 7b 20 5f 70 61 72  ect { set { _par
6850: 65 6e 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 67  ent = value; } g
6860: 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 70 61 72  et { return _par
6870: 65 6e 74 3b 20 7d 20 7d 0d 0a 23 0d 0a 23 20 20  ent; } }..#..#  
6880: 20 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 29      [Parameter()
6890: 5d 0d 0a 23 20 20 20 20 20 20 70 75 62 6c 69 63  ]..#      public
68a0: 20 41 75 74 6f 6d 61 74 69 6f 6e 45 76 65 6e 74   AutomationEvent
68b0: 20 45 76 65 6e 74 20 7b 20 73 65 74 20 7b 20 5f   Event { set { _
68c0: 65 76 65 6e 74 20 3d 20 76 61 6c 75 65 3b 20 7d  event = value; }
68d0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 65   get { return _e
68e0: 76 65 6e 74 3b 20 7d 20 7d 0d 0a 23 0d 0a 23 20  vent; } }..#..# 
68f0: 20 20 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28       [Parameter(
6900: 29 5d 0d 0a 23 20 20 20 20 20 20 70 75 62 6c 69  )]..#      publi
6910: 63 20 41 75 74 6f 6d 61 74 69 6f 6e 45 76 65 6e  c AutomationEven
6920: 74 48 61 6e 64 6c 65 72 20 53 63 72 69 70 74 42  tHandler ScriptB
6930: 6c 6f 63 6b 20 7b 20 73 65 74 3b 20 67 65 74 3b  lock { set; get;
6940: 20 7d 0d 0a 23 0d 0a 23 20 20 20 20 20 20 5b 50   }..#..#      [P
6950: 61 72 61 6d 65 74 65 72 28 29 5d 0d 0a 23 20 20  arameter()]..#  
6960: 20 20 20 20 70 75 62 6c 69 63 20 53 77 69 74 63      public Switc
6970: 68 50 61 72 61 6d 65 74 65 72 20 50 61 73 73 74  hParameter Passt
6980: 68 72 75 20 7b 20 73 65 74 3b 20 67 65 74 3b 20  hru { set; get; 
6990: 7d 0d 0a 23 0d 0a 23 20 20 20 20 20 20 5b 50 61  }..#..#      [Pa
69a0: 72 61 6d 65 74 65 72 28 29 5d 0d 0a 23 20 20 20  rameter()]..#   
69b0: 20 20 20 70 75 62 6c 69 63 20 54 72 65 65 53 63     public TreeSc
69c0: 6f 70 65 20 53 63 6f 70 65 20 7b 20 73 65 74 20  ope Scope { set 
69d0: 7b 20 5f 73 63 6f 70 65 20 3d 20 76 61 6c 75 65  { _scope = value
69e0: 3b 20 7d 20 67 65 74 20 7b 20 72 65 74 75 72 6e  ; } get { return
69f0: 20 5f 73 63 6f 70 65 3b 20 7d 20 7d 0d 0a 23 0d   _scope; } }..#.
6a00: 0a 23 20 20 20 20 20 20 70 72 6f 74 65 63 74 65  .#      protecte
6a10: 64 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  d override void 
6a20: 50 72 6f 63 65 73 73 52 65 63 6f 72 64 28 29 0d  ProcessRecord().
6a30: 0a 23 20 20 20 20 20 20 7b 0d 0a 23 20 20 20 20  .#      {..#    
6a40: 20 20 20 20 20 41 75 74 6f 6d 61 74 69 6f 6e 2e       Automation.
6a50: 41 64 64 41 75 74 6f 6d 61 74 69 6f 6e 45 76 65  AddAutomationEve
6a60: 6e 74 48 61 6e 64 6c 65 72 28 45 76 65 6e 74 2c  ntHandler(Event,
6a70: 20 49 6e 70 75 74 4f 62 6a 65 63 74 2c 20 53 63   InputObject, Sc
6a80: 6f 70 65 2c 20 53 63 72 69 70 74 42 6c 6f 63 6b  ope, ScriptBlock
6a90: 29 3b 0d 0a 23 0d 0a 23 20 20 20 20 20 20 20 20  );..#..#        
6aa0: 20 69 66 20 28 50 61 73 73 74 68 72 75 2e 54 6f   if (Passthru.To
6ab0: 42 6f 6f 6c 28 29 29 0d 0a 23 20 20 20 20 20 20  Bool())..#      
6ac0: 20 20 20 7b 0d 0a 23 20 20 20 20 20 20 20 20 20     {..#         
6ad0: 20 20 20 57 72 69 74 65 4f 62 6a 65 63 74 28 49     WriteObject(I
6ae0: 6e 70 75 74 4f 62 6a 65 63 74 29 3b 0d 0a 23 20  nputObject);..# 
6af0: 20 20 20 20 20 20 20 20 7d 0d 0a 23 0d 0a 23 20          }..#..# 
6b00: 20 20 20 20 20 20 20 20 62 61 73 65 2e 50 72 6f          base.Pro
6b10: 63 65 73 73 52 65 63 6f 72 64 28 29 3b 0d 0a 23  cessRecord();..#
6b20: 20 20 20 20 20 20 7d 0d 0a 23 20 20 20 7d 0d 0a        }..#   }..
6b30: 0d 0a 45 78 70 6f 72 74 2d 4d 6f 64 75 6c 65 4d  ..Export-ModuleM
6b40: 65 6d 62 65 72 20 2d 63 6d 64 6c 65 74 20 2a 20  ember -cmdlet * 
6b50: 2d 46 75 6e 63 74 69 6f 6e 20 2a 20 2d 41 6c 69  -Function * -Ali
6b60: 61 73 20 2a 0d 0a                                as *..