0000: 23 20 65 6e 63 6f 64 69 6e 67 3a 20 61 73 63 69 # encoding: asci
0010: 69 0d 0a 23 20 61 70 69 3a 20 70 6f 77 65 72 73 i..# api: powers
0020: 68 65 6c 6c 0d 0a 23 20 74 69 74 6c 65 3a 20 58 hell..# title: X
0030: 6d 6c 20 4d 6f 64 75 6c 65 0d 0a 23 20 64 65 73 ml Module..# des
0040: 63 72 69 70 74 69 6f 6e 3a 20 41 20 63 6f 6d 70 cription: A comp
0050: 6c 65 74 65 20 73 65 74 20 6f 66 20 58 4d 4c 20 lete set of XML
0060: 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 28 65 functionality (e
0070: 73 70 65 63 69 61 6c 6c 79 20 69 66 20 79 6f 75 specially if you
0080: 20 64 6f 6e e2 80 99 74 20 68 61 76 65 20 50 53 don...t have PS
0090: 43 58 29 2c 20 69 6e 63 6c 75 64 69 6e 67 20 72 CX), including r
00a0: 65 61 64 69 6e 67 20 61 6e 64 20 77 72 69 74 69 eading and writi
00b0: 6e 67 20 78 6d 6c 20 66 69 6c 65 73 20 28 69 6d ng xml files (im
00c0: 70 6f 72 74 2d 78 6d 6c 2c 20 65 78 70 6f 72 74 port-xml, export
00d0: 2d 78 6d 6c 29 2c 20 73 65 6c 65 63 74 69 6e 67 -xml), selecting
00e0: 20 28 76 69 61 20 78 70 61 74 68 29 2c 20 75 70 (via xpath), up
00f0: 64 61 74 69 6e 67 2c 20 74 72 61 6e 73 66 6f 72 dating, transfor
0100: 6d 69 6e 67 20 61 6e 64 20 63 72 65 61 74 69 6e ming and creatin
0110: 67 20 6e 65 77 20 78 6d 6c 20 64 6f 63 75 6d 65 g new xml docume
0120: 6e 74 73 2e 0d 0a 23 20 76 65 72 73 69 6f 6e 3a nts...# version:
0130: 20 36 2e 30 0d 0a 23 20 74 79 70 65 3a 20 66 75 6.0..# type: fu
0140: 6e 63 74 69 6f 6e 0d 0a 23 20 61 75 74 68 6f 72 nction..# author
0150: 3a 20 4a 6f 65 6c 20 42 65 6e 6e 65 74 74 0d 0a : Joel Bennett..
0160: 23 20 6c 69 63 65 6e 73 65 3a 20 43 43 30 0d 0a # license: CC0..
0170: 23 20 66 75 6e 63 74 69 6f 6e 3a 20 49 6d 70 6f # function: Impo
0180: 72 74 2d 58 6d 6c 0d 0a 23 20 78 2d 70 6f 73 68 rt-Xml..# x-posh
0190: 63 6f 64 65 2d 69 64 3a 20 32 39 31 32 0d 0a 23 code-id: 2912..#
01a0: 20 78 2d 61 72 63 68 69 76 65 64 3a 20 32 30 31 x-archived: 201
01b0: 31 2d 30 38 2d 32 35 54 30 30 3a 32 31 3a 30 34 1-08-25T00:21:04
01c0: 0d 0a 23 20 78 2d 70 75 62 6c 69 73 68 65 64 3a ..# x-published:
01d0: 20 32 30 31 31 2d 30 38 2d 31 32 54 31 31 3a 33 2011-08-12T11:3
01e0: 39 3a 30 30 0d 0a 23 0d 0a 23 20 49 6e 20 70 61 9:00..#..# In pa
01f0: 72 74 69 63 75 6c 61 72 3a 20 0d 0a 23 20 41 20 rticular: ..# A
0200: 44 53 4c 20 66 6f 72 20 63 72 65 61 74 69 6e 67 DSL for creating
0210: 20 58 4d 4c 20 64 6f 63 75 6d 65 6e 74 73 2e 0d XML documents..
0220: 0a 23 20 43 6f 6e 76 65 72 74 2d 58 6d 6c 20 77 .# Convert-Xml w
0230: 68 69 63 68 20 73 75 70 70 6f 72 74 73 20 70 61 hich supports pa
0240: 72 61 6d 65 74 65 72 73 20 73 6f 20 79 6f 75 20 rameters so you
0250: 63 61 6e 20 75 73 65 20 58 53 4c 54 20 77 68 69 can use XSLT whi
0260: 63 68 20 72 65 71 75 69 72 65 20 70 61 72 61 6d ch require param
0270: 65 74 65 72 73 0d 0a 23 20 53 65 6c 65 63 74 2d eters..# Select-
0280: 58 4d 4c 20 77 68 69 63 68 20 6c 65 76 65 72 61 XML which levera
0290: 67 65 73 20 52 65 6d 6f 76 65 2d 58 6d 6c 4e 61 ges Remove-XmlNa
02a0: 6d 65 73 70 61 63 65 20 74 6f 20 73 69 6d 70 6c mespace to simpl
02b0: 69 66 79 20 73 69 6d 70 6c 65 20 78 6d 6c 20 71 ify simple xml q
02c0: 75 65 72 69 65 73 20 62 79 20 61 6c 6c 6f 77 69 ueries by allowi
02d0: 6e 67 20 79 6f 75 20 74 6f 20 6c 65 61 76 65 20 ng you to leave
02e0: 6f 75 74 20 74 68 65 20 6e 61 6d 65 73 70 61 63 out the namespac
02f0: 65 73 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74 es. It is import
0300: 61 6e 74 20 74 6f 20 6e 6f 74 65 20 74 68 61 74 ant to note that
0310: 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74 this means that
0320: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 72 65 the returned re
0330: 73 75 6c 74 73 20 77 69 6c 6c 20 6e 6f 74 20 68 sults will not h
0340: 61 76 65 20 6e 61 6d 65 73 70 61 63 65 73 20 69 ave namespaces i
0350: 6e 20 74 68 65 6d 2c 20 65 76 65 6e 20 69 66 20 n them, even if
0360: 74 68 65 20 69 6e 70 75 74 20 58 4d 4c 20 64 69 the input XML di
0370: 64 2e 0d 0a 23 20 41 4c 53 4f 20 4e 4f 54 45 3a d...# ALSO NOTE:
0380: 20 6f 6e 6c 79 20 72 61 77 20 58 6d 6c 4e 6f 64 only raw XmlNod
0390: 65 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 es are returned
03a0: 66 72 6f 6d 20 53 65 6c 65 63 74 2d 58 6d 6c 2c from Select-Xml,
03b0: 20 73 6f 20 74 68 65 20 6f 75 74 70 75 74 20 69 so the output i
03c0: 73 6e e2 80 99 74 20 63 6f 6d 70 61 74 69 62 6c sn...t compatibl
03d0: 65 20 77 69 74 68 20 74 68 65 20 62 75 69 6c 74 e with the built
03e0: 20 69 6e 20 53 65 6c 65 63 74 2d 58 6d 6c 20 e2 in Select-Xml .
03f0: 80 94 20 69 6e 73 74 65 61 64 2c 20 69 74 e2 80 .. instead, it..
0400: 99 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f .s equivalent to
0410: 20 75 73 69 6e 67 20 69 74 20 74 68 65 20 77 61 using it the wa
0420: 79 20 49 20 75 73 75 61 6c 6c 79 20 64 6f 3a 20 y I usually do:
0430: 53 65 6c 65 63 74 2d 58 6d 6c 20 2e 2e 2e 20 7c Select-Xml ... |
0440: 20 53 65 6c 65 63 74 2d 4f 62 6a 65 63 74 20 2d Select-Object -
0450: 45 78 70 61 6e 64 20 4e 6f 64 65 0d 0a 23 20 55 Expand Node..# U
0460: 70 64 61 74 65 2d 58 6d 6c 20 77 68 69 63 68 20 pdate-Xml which
0470: 61 6c 6c 6f 77 73 20 79 6f 75 20 74 6f 20 61 70 allows you to ap
0480: 70 65 6e 64 2c 20 69 6e 73 65 72 74 2c 20 72 65 pend, insert, re
0490: 6d 6f 76 65 2c 20 61 6e 64 20 72 65 70 6c 61 63 move, and replac
04a0: 65 20 76 61 6c 75 65 73 20 69 6e 20 58 4d 4c 20 e values in XML
04b0: 44 6f 63 75 6d 65 6e 74 73 0d 0a 23 0d 0a 23 72 Documents..#..#r
04c0: 65 71 75 69 72 65 73 20 2d 76 65 72 73 69 6f 6e equires -version
04d0: 20 32 2e 30 0d 0a 0d 0a 23 20 49 6d 70 72 6f 76 2.0....# Improv
04e0: 65 73 20 6f 76 65 72 20 74 68 65 20 62 75 69 6c es over the buil
04f0: 74 2d 69 6e 20 53 65 6c 65 63 74 2d 58 4d 4c 20 t-in Select-XML
0500: 62 79 20 6c 65 76 65 72 61 67 69 6e 67 20 52 65 by leveraging Re
0510: 6d 6f 76 65 2d 58 6d 6c 4e 61 6d 65 73 70 61 63 move-XmlNamespac
0520: 65 20 68 74 74 70 60 3a 2f 2f 70 6f 73 68 63 6f e http`://poshco
0530: 64 65 2e 6f 72 67 2f 31 34 39 32 20 0d 0a 23 20 de.org/1492 ..#
0540: 74 6f 20 70 72 6f 76 69 64 65 20 61 20 2d 52 65 to provide a -Re
0550: 6d 6f 76 65 4e 61 6d 65 73 70 61 63 65 20 70 61 moveNamespace pa
0560: 72 61 6d 65 74 65 72 20 2d 2d 20 69 66 20 69 74 rameter -- if it
0570: 27 73 20 73 75 70 70 6c 69 65 64 2c 20 61 6c 6c 's supplied, all
0580: 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 70 61 63 of the namespac
0590: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 0d e declarations .
05a0: 0a 23 20 61 6e 64 20 70 72 65 66 69 78 65 73 20 .# and prefixes
05b0: 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d are removed from
05c0: 20 61 6c 6c 20 58 4d 4c 20 6e 6f 64 65 73 20 28 all XML nodes (
05d0: 62 79 20 61 6e 20 58 53 4c 20 74 72 61 6e 73 66 by an XSL transf
05e0: 6f 72 6d 29 20 62 65 66 6f 72 65 20 73 65 61 72 orm) before sear
05f0: 63 68 69 6e 67 2e 20 0d 0a 23 20 49 4d 50 4f 52 ching. ..# IMPOR
0600: 54 41 4e 54 3a 20 72 65 74 75 72 6e 65 64 20 72 TANT: returned r
0610: 65 73 75 6c 74 73 20 2a 77 69 6c 6c 20 6e 6f 74 esults *will not
0620: 2a 20 68 61 76 65 20 6e 61 6d 65 73 70 61 63 65 * have namespace
0630: 73 20 69 6e 20 74 68 65 6d 2c 20 65 76 65 6e 20 s in them, even
0640: 69 66 20 74 68 65 20 69 6e 70 75 74 20 58 4d 4c if the input XML
0650: 20 64 69 64 2e 20 0d 0a 0d 0a 23 20 41 6c 73 6f did. ....# Also
0660: 2c 20 6f 6e 6c 79 20 72 61 77 20 58 6d 6c 4e 6f , only raw XmlNo
0670: 64 65 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 des are returned
0680: 20 66 72 6f 6d 20 74 68 69 73 20 66 75 6e 63 74 from this funct
0690: 69 6f 6e 2c 20 73 6f 20 74 68 65 20 6f 75 74 70 ion, so the outp
06a0: 75 74 20 69 73 6e 27 74 20 63 6f 6d 70 6c 65 74 ut isn't complet
06b0: 65 6c 79 20 63 6f 6d 70 61 74 69 62 6c 65 20 0d ely compatible .
06c0: 0a 23 20 77 69 74 68 20 74 68 65 20 62 75 69 6c .# with the buil
06d0: 74 20 69 6e 20 53 65 6c 65 63 74 2d 58 6d 6c 2e t in Select-Xml.
06e0: 20 49 74 27 73 20 65 71 75 69 76 61 6c 65 6e 74 It's equivalent
06f0: 20 74 6f 20 75 73 69 6e 67 20 53 65 6c 65 63 74 to using Select
0700: 2d 58 6d 6c 20 2e 2e 2e 20 7c 20 53 65 6c 65 63 -Xml ... | Selec
0710: 74 2d 4f 62 6a 65 63 74 20 2d 45 78 70 61 6e 64 t-Object -Expand
0720: 20 4e 6f 64 65 0d 0a 0d 0a 23 20 56 65 72 73 69 Node....# Versi
0730: 6f 6e 20 48 69 73 74 6f 72 79 3a 0d 0a 23 20 53 on History:..# S
0740: 65 6c 65 63 74 2d 58 6d 6c 20 32 2e 30 20 54 68 elect-Xml 2.0 Th
0750: 69 73 20 77 61 73 20 74 68 65 20 66 69 72 73 74 is was the first
0760: 20 73 63 72 69 70 74 20 76 65 72 73 69 6f 6e 20 script version
0770: 49 20 77 72 6f 74 65 2e 0d 0a 23 20 20 20 20 20 I wrote...#
0780: 20 20 20 20 20 20 20 20 20 20 20 69 74 20 64 69 it di
0790: 64 6e 27 74 20 66 75 6e 63 74 69 6f 6e 20 69 64 dn't function id
07a0: 65 6e 74 69 63 61 6c 6c 79 20 74 6f 20 74 68 65 entically to the
07b0: 20 62 75 69 6c 74 2d 69 6e 20 53 65 6c 65 63 74 built-in Select
07c0: 2d 58 6d 6c 20 77 69 74 68 20 72 65 67 61 72 64 -Xml with regard
07d0: 73 20 74 6f 20 70 61 72 61 6d 65 74 65 72 20 70 s to parameter p
07e0: 61 72 73 69 6e 67 0d 0a 23 20 53 65 6c 65 63 74 arsing..# Select
07f0: 2d 58 6d 6c 20 32 2e 31 20 4d 61 74 63 68 65 64 -Xml 2.1 Matched
0800: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 53 65 the built-in Se
0810: 6c 65 63 74 2d 58 6d 6c 20 70 61 72 61 6d 65 74 lect-Xml paramet
0820: 65 72 20 73 65 74 73 2c 20 69 74 27 73 20 6e 6f er sets, it's no
0830: 77 20 61 20 64 72 6f 70 2d 69 6e 20 72 65 70 6c w a drop-in repl
0840: 61 63 65 6d 65 6e 74 20 0d 0a 23 20 20 20 20 20 acement ..#
0850: 20 20 20 20 20 20 20 20 20 20 20 42 55 54 20 6f BUT o
0860: 6e 6c 79 20 69 66 20 79 6f 75 20 77 65 72 65 20 nly if you were
0870: 75 73 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e using the origin
0880: 61 6c 20 77 69 74 68 3a 20 53 65 6c 65 63 74 2d al with: Select-
0890: 58 6d 6c 20 2e 2e 2e 20 7c 20 53 65 6c 65 63 74 Xml ... | Select
08a0: 2d 4f 62 6a 65 63 74 20 2d 45 78 70 61 6e 64 20 -Object -Expand
08b0: 4e 6f 64 65 0d 0a 23 20 53 65 6c 65 63 74 2d 58 Node..# Select-X
08c0: 6d 6c 20 32 2e 32 20 46 69 78 65 73 20 61 20 62 ml 2.2 Fixes a b
08d0: 75 67 20 69 6e 20 74 68 65 20 2d 43 6f 6e 74 65 ug in the -Conte
08e0: 6e 74 20 70 61 72 61 6d 65 74 65 72 73 65 74 20 nt parameterset
08f0: 77 68 65 72 65 20 2d 52 65 6d 6f 76 65 4e 61 6d where -RemoveNam
0900: 65 73 70 61 63 65 20 77 61 73 20 2a 70 72 65 73 espace was *pres
0910: 75 6d 65 64 2a 0d 0a 23 20 56 65 72 73 69 6f 6e umed*..# Version
0920: 20 20 20 20 33 2e 30 20 41 64 64 65 64 20 4e 65 3.0 Added Ne
0930: 77 2d 58 44 6f 63 75 6d 65 6e 74 20 61 6e 64 20 w-XDocument and
0940: 61 73 73 6f 63 69 61 74 65 64 20 67 65 6e 65 72 associated gener
0950: 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 ation functions
0960: 66 6f 72 20 6d 79 20 58 4d 4c 20 44 53 4c 0d 0a for my XML DSL..
0970: 23 20 56 65 72 73 69 6f 6e 20 20 20 20 33 2e 31 # Version 3.1
0980: 20 46 69 78 65 64 20 61 20 72 65 61 6c 6c 79 20 Fixed a really
0990: 75 67 6c 79 20 62 75 67 20 69 6e 20 4e 65 77 2d ugly bug in New-
09a0: 58 44 6f 63 75 6d 65 6e 74 20 69 6e 20 33 2e 30 XDocument in 3.0
09b0: 20 77 68 69 63 68 20 49 20 73 68 6f 75 6c 64 20 which I should
09c0: 6e 6f 74 20 68 61 76 65 20 72 65 6c 65 61 73 65 not have release
09d0: 64 0d 0a 23 20 56 65 72 73 69 6f 6e 20 20 20 20 d..# Version
09e0: 34 2e 30 20 4e 65 76 65 72 20 63 6f 6e 74 65 6e 4.0 Never conten
09f0: 74 20 74 6f 20 6c 65 61 76 65 20 77 65 6c 6c 20 t to leave well
0a00: 65 6e 6f 75 67 68 20 61 6c 6f 6e 65 2c 20 49 27 enough alone, I'
0a10: 76 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 ve completely re
0a20: 77 6f 72 6b 65 64 20 4e 65 77 2d 58 44 6f 63 75 worked New-XDocu
0a30: 6d 65 6e 74 0d 0a 23 20 56 65 72 73 69 6f 6e 20 ment..# Version
0a40: 20 20 20 34 2e 31 20 54 77 65 61 6b 65 64 20 6e 4.1 Tweaked n
0a50: 61 6d 65 73 70 61 63 65 73 20 61 67 61 69 6e 20 amespaces again
0a60: 73 6f 20 74 68 65 79 20 64 6f 6e 27 74 20 63 61 so they don't ca
0a70: 73 63 61 64 65 20 64 6f 77 6e 20 77 68 65 6e 20 scade down when
0a80: 74 68 65 79 20 73 68 6f 75 6c 64 6e 27 74 2e 20 they shouldn't.
0a90: 47 6f 74 20 72 69 64 20 6f 66 20 74 68 65 20 75 Got rid of the u
0aa0: 6e 6e 65 63 65 73 73 61 72 79 20 73 74 61 63 6b nnecessary stack
0ab0: 2e 0d 0a 23 20 56 65 72 73 69 6f 6e 20 20 20 20 ...# Version
0ac0: 34 2e 32 20 54 69 67 68 74 65 6e 65 64 20 78 6d 4.2 Tightened xm
0ad0: 6c 3a 20 6f 6e 6c 79 20 63 6d 64 6c 65 74 2c 20 l: only cmdlet,
0ae0: 66 75 6e 63 74 69 6f 6e 2c 20 61 6e 64 20 65 78 function, and ex
0af0: 74 65 72 6e 61 6c 20 73 63 72 69 70 74 73 2c 20 ternal scripts,
0b00: 77 69 74 68 20 22 2d 22 20 69 6e 20 74 68 65 69 with "-" in thei
0b10: 72 20 6e 61 6d 65 73 20 61 72 65 20 65 78 65 6d r names are exem
0b20: 70 74 65 64 20 66 72 6f 6d 20 62 65 69 6e 67 20 pted from being
0b30: 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 78 converted into x
0b40: 6d 6c 20 74 61 67 73 2e 0d 0a 23 20 20 20 20 20 ml tags...#
0b50: 20 20 20 20 20 20 20 20 20 20 20 46 69 78 65 64 Fixed
0b60: 20 73 6f 6d 65 20 61 6c 69 61 73 20 65 72 72 6f some alias erro
0b70: 72 20 6d 65 73 73 61 67 65 73 20 63 61 75 73 65 r messages cause
0b80: 64 20 77 68 65 6e 20 50 53 43 58 20 69 73 20 61 d when PSCX is a
0b90: 6c 72 65 61 64 79 20 6c 6f 61 64 65 64 20 28 77 lready loaded (w
0ba0: 65 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 69 e overwrite thei
0bb0: 72 20 61 6c 69 61 73 65 73 20 66 6f 72 20 63 76 r aliases for cv
0bc0: 78 6d 6c 20 61 6e 64 20 66 78 6d 6c 29 0d 0a 23 xml and fxml)..#
0bd0: 20 56 65 72 73 69 6f 6e 20 20 20 20 34 2e 33 20 Version 4.3
0be0: 41 64 64 65 64 20 61 20 50 61 74 68 20 70 61 72 Added a Path par
0bf0: 61 6d 65 74 65 72 20 73 65 74 20 74 6f 20 46 6f ameter set to Fo
0c00: 72 6d 61 74 2d 58 6d 6c 20 73 6f 20 79 6f 75 20 rmat-Xml so you
0c10: 63 61 6e 20 73 70 65 63 69 66 79 20 78 6d 6c 20 can specify xml
0c20: 66 69 6c 65 73 20 66 6f 72 20 70 72 65 74 79 20 files for prety
0c30: 70 72 69 6e 74 69 6e 67 0d 0a 23 20 56 65 72 73 printing..# Vers
0c40: 69 6f 6e 20 20 20 20 34 2e 35 20 46 69 78 65 64 ion 4.5 Fixed
0c50: 20 70 6f 73 73 69 62 6c 65 20 5b 41 72 72 61 79 possible [Array
0c60: 5d 3a 3a 52 65 76 65 72 73 65 20 63 61 6c 6c 20 ]::Reverse call
0c70: 6f 6e 20 61 20 6e 6f 6e 2d 61 72 72 61 79 20 69 on a non-array i
0c80: 6e 20 4e 65 77 2d 58 45 6c 65 6d 65 6e 74 20 28 n New-XElement (
0c90: 75 73 65 64 20 62 79 20 4e 65 77 2d 58 44 6f 63 used by New-XDoc
0ca0: 75 6d 65 6e 74 29 0d 0a 23 20 20 20 20 20 20 20 ument)..#
0cb0: 20 20 20 20 20 20 20 20 20 57 6f 72 6b 20 61 72 Work ar
0cc0: 6f 75 6e 64 20 70 6f 73 73 69 62 6c 65 20 76 61 ound possible va
0cd0: 72 69 61 62 6c 65 20 73 6c 69 70 70 69 6e 67 20 riable slipping
0ce0: 6f 6e 20 6e 75 6c 6c 20 76 61 6c 75 65 73 20 62 on null values b
0cf0: 79 3a 0d 0a 23 20 20 20 20 20 20 20 20 20 20 20 y:..#
0d00: 20 20 20 20 20 31 29 20 61 6c 6c 6f 77 69 6e 67 1) allowing
0d10: 20 2d 70 61 72 61 6d 3a 24 76 61 6c 75 65 20 73 -param:$value s
0d20: 79 6e 74 61 78 20 28 77 68 69 63 68 20 64 6f 65 yntax (which doe
0d30: 73 6e 27 74 20 66 61 69 6c 20 77 68 65 6e 20 24 sn't fail when $
0d40: 76 61 6c 75 65 20 69 73 20 6e 75 6c 6c 29 0d 0a value is null)..
0d50: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 #
0d60: 20 32 29 20 74 65 73 74 69 6e 67 20 66 6f 72 20 2) testing for
0d70: 2d 6e 61 6d 65 20 73 79 6e 74 61 78 20 6f 6e 20 -name syntax on
0d80: 74 68 65 20 76 61 6c 75 65 20 61 6e 64 20 75 73 the value and us
0d90: 69 6e 67 20 69 74 20 61 73 20 61 6e 20 61 74 74 ing it as an att
0da0: 72 69 62 75 74 65 20 69 6e 73 74 65 61 64 0d 0a ribute instead..
0db0: 23 20 56 65 72 73 69 6f 6e 20 20 20 20 34 2e 36 # Version 4.6
0dc0: 20 41 64 64 65 64 20 2d 41 72 67 75 6d 65 6e 74 Added -Argument
0dd0: 73 20 74 6f 20 43 6f 6e 76 65 72 74 2d 58 6d 6c s to Convert-Xml
0de0: 20 73 6f 20 74 68 61 74 20 79 6f 75 20 63 61 6e so that you can
0df0: 20 70 61 73 73 20 61 72 67 75 6d 65 6e 74 73 20 pass arguments
0e00: 74 6f 20 58 53 4c 54 20 74 72 61 6e 73 66 6f 72 to XSLT transfor
0e10: 6d 73 21 0d 0a 23 20 20 20 20 20 20 20 20 20 20 ms!..#
0e20: 20 20 20 20 20 20 4e 6f 74 65 3a 20 77 68 65 6e Note: when
0e30: 20 75 73 69 6e 67 20 73 74 72 69 6e 67 73 20 66 using strings f
0e40: 6f 72 20 78 73 6c 74 2c 20 6d 61 6b 65 20 73 75 or xslt, make su
0e50: 72 65 20 79 6f 75 20 73 69 6e 67 6c 65 20 71 75 re you single qu
0e60: 6f 74 65 20 74 68 65 6d 20 6f 72 20 65 73 63 61 ote them or esca
0e70: 70 65 20 74 68 65 20 24 20 73 69 67 6e 73 2e 0d pe the $ signs..
0e80: 0a 23 20 56 65 72 73 69 6f 6e 20 20 20 20 34 2e .# Version 4.
0e90: 37 20 46 69 78 65 64 20 61 20 74 79 70 6f 20 69 7 Fixed a typo i
0ea0: 6e 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65 20 n the namespace
0eb0: 70 61 72 61 6d 65 74 65 72 20 6f 66 20 53 65 6c parameter of Sel
0ec0: 65 63 74 2d 58 6d 6c 0d 0a 23 20 56 65 72 73 69 ect-Xml..# Versi
0ed0: 6f 6e 20 20 20 20 34 2e 38 20 46 69 78 65 64 20 on 4.8 Fixed
0ee0: 75 70 20 73 6f 6d 65 20 75 73 65 73 20 6f 66 20 up some uses of
0ef0: 53 65 6c 65 63 74 2d 58 6d 6c 20 2d 52 65 6d 6f Select-Xml -Remo
0f00: 76 65 4e 61 6d 65 73 70 61 63 65 0d 0a 23 20 56 veNamespace..# V
0f10: 65 72 73 69 6f 6e 20 20 20 20 35 2e 30 20 41 64 ersion 5.0 Ad
0f20: 64 65 64 20 55 70 64 61 74 65 2d 58 6d 6c 20 74 ded Update-Xml t
0f30: 6f 20 61 6c 6c 6f 77 20 73 65 74 74 69 6e 67 20 o allow setting
0f40: 78 6d 6c 20 61 74 74 72 69 62 75 74 65 73 20 6f xml attributes o
0f50: 72 20 6e 6f 64 65 20 63 6f 6e 74 65 6e 74 0d 0a r node content..
0f60: 23 20 56 65 72 73 69 6f 6e 20 20 20 20 36 2e 30 # Version 6.0
0f70: 20 4d 61 6a 6f 72 20 63 6c 65 61 6e 75 70 2c 20 Major cleanup,
0f80: 62 72 65 61 6b 69 6e 67 20 63 68 61 6e 67 65 73 breaking changes
0f90: 2e 0d 0a 23 20 20 20 20 20 20 20 2d 20 41 64 64 ...# - Add
0fa0: 65 64 20 47 65 74 2d 58 6d 6c 43 6f 6e 74 65 6e ed Get-XmlConten
0fb0: 74 20 61 6e 64 20 53 65 74 2d 58 6d 6c 43 6f 6e t and Set-XmlCon
0fc0: 74 65 6e 74 20 66 6f 72 20 6c 6f 61 64 69 6e 67 tent for loading
0fd0: 2f 73 61 76 69 6e 67 20 58 4d 4c 20 66 72 6f 6d /saving XML from
0fe0: 20 66 69 6c 65 73 20 6f 72 20 73 74 72 69 6e 67 files or string
0ff0: 73 0d 0a 23 20 20 20 20 20 20 20 2d 20 52 65 6d s..# - Rem
1000: 6f 76 65 64 20 50 61 74 68 20 61 6e 64 20 43 6f oved Path and Co
1010: 6e 74 65 6e 74 20 70 61 72 61 6d 65 74 65 72 73 ntent parameters
1020: 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72 20 from the other
1030: 66 75 6e 63 74 69 6f 6e 73 20 28 69 74 20 67 72 functions (it gr
1040: 65 61 74 6c 79 20 73 69 6d 70 6c 69 66 69 65 73 eatly simplifies
1050: 20 74 68 6f 73 74 20 66 75 6e 63 74 69 6f 6e 73 thost functions
1060: 2c 20 61 6e 64 20 6d 61 6b 65 73 20 74 68 65 20 , and makes the
1070: 77 68 6f 6c 65 20 74 68 69 6e 67 20 6d 6f 72 65 whole thing more
1080: 20 6d 61 69 6e 74 61 69 6e 61 62 6c 65 29 0d 0a maintainable)..
1090: 23 20 20 20 20 20 20 20 2d 20 55 70 64 61 74 65 # - Update
10a0: 64 20 55 70 64 61 74 65 2d 58 6d 6c 20 74 6f 20 d Update-Xml to
10b0: 73 75 70 70 6f 72 74 20 61 64 64 69 6e 67 20 6e support adding n
10c0: 6f 64 65 73 20 22 62 65 66 6f 72 65 22 20 61 6e odes "before" an
10d0: 64 20 22 61 66 74 65 72 22 20 6f 74 68 65 72 20 d "after" other
10e0: 6e 6f 64 65 73 2c 20 61 6e 64 20 74 6f 20 73 75 nodes, and to su
10f0: 70 70 6f 72 74 20 22 72 65 6d 6f 76 65 22 69 6e pport "remove"in
1100: 67 20 6e 6f 64 65 73 0d 0a 26 7b 20 0d 0a 24 6c g nodes..&{ ..$l
1110: 6f 63 61 6c 3a 78 6c 72 38 72 20 3d 20 5b 70 73 ocal:xlr8r = [ps
1120: 6f 62 6a 65 63 74 5d 2e 61 73 73 65 6d 62 6c 79 object].assembly
1130: 2e 67 65 74 74 79 70 65 28 22 53 79 73 74 65 6d .gettype("System
1140: 2e 4d 61 6e 61 67 65 6d 65 6e 74 2e 41 75 74 6f .Management.Auto
1150: 6d 61 74 69 6f 6e 2e 54 79 70 65 41 63 63 65 6c mation.TypeAccel
1160: 65 72 61 74 6f 72 73 22 29 0d 0a 24 6c 6f 63 61 erators")..$loca
1170: 6c 3a 78 6c 69 6e 71 20 3d 20 5b 52 65 66 6c 65 l:xlinq = [Refle
1180: 63 74 69 6f 6e 2e 41 73 73 65 6d 62 6c 79 5d 3a ction.Assembly]:
1190: 3a 4c 6f 61 64 28 22 53 79 73 74 65 6d 2e 58 6d :Load("System.Xm
11a0: 6c 2e 4c 69 6e 71 2c 20 56 65 72 73 69 6f 6e 3d l.Linq, Version=
11b0: 33 2e 35 2e 30 2e 30 2c 20 43 75 6c 74 75 72 65 3.5.0.0, Culture
11c0: 3d 6e 65 75 74 72 61 6c 2c 20 50 75 62 6c 69 63 =neutral, Public
11d0: 4b 65 79 54 6f 6b 65 6e 3d 62 37 37 61 35 63 35 KeyToken=b77a5c5
11e0: 36 31 39 33 34 65 30 38 39 22 29 0d 0a 24 78 6c 61934e089")..$xl
11f0: 69 6e 71 2e 47 65 74 54 79 70 65 73 28 29 20 7c inq.GetTypes() |
1200: 20 3f 20 7b 20 24 5f 2e 49 73 50 75 62 6c 69 63 ? { $_.IsPublic
1210: 20 2d 61 6e 64 20 21 24 5f 2e 49 73 53 65 72 69 -and !$_.IsSeri
1220: 61 6c 69 7a 61 62 6c 65 20 2d 61 6e 64 20 24 5f alizable -and $_
1230: 2e 4e 61 6d 65 20 2d 6e 65 20 22 45 78 74 65 6e .Name -ne "Exten
1240: 73 69 6f 6e 73 22 20 2d 61 6e 64 20 21 24 78 6c sions" -and !$xl
1250: 72 38 72 3a 3a 47 65 74 5b 24 5f 2e 4e 61 6d 65 r8r::Get[$_.Name
1260: 5d 20 7d 20 7c 20 25 20 7b 0d 0a 20 20 24 78 6c ] } | % {.. $xl
1270: 72 38 72 3a 3a 41 64 64 28 20 24 5f 2e 4e 61 6d r8r::Add( $_.Nam
1280: 65 2c 20 24 5f 2e 46 75 6c 6c 4e 61 6d 65 20 29 e, $_.FullName )
1290: 0d 0a 7d 0d 0a 0d 0a 69 66 28 21 24 78 6c 72 38 ..}....if(!$xlr8
12a0: 72 3a 3a 47 65 74 5b 22 44 69 63 74 69 6f 6e 61 r::Get["Dictiona
12b0: 72 79 22 5d 29 20 7b 0d 0a 20 20 20 24 78 6c 72 ry"]) {.. $xlr
12c0: 38 72 3a 3a 41 64 64 28 20 22 44 69 63 74 69 6f 8r::Add( "Dictio
12d0: 6e 61 72 79 22 2c 20 22 53 79 73 74 65 6d 2e 43 nary", "System.C
12e0: 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65 6e 65 72 ollections.Gener
12f0: 69 63 2e 44 69 63 74 69 6f 6e 61 72 79 60 60 32 ic.Dictionary``2
1300: 2c 20 6d 73 63 6f 72 6c 69 62 2c 20 56 65 72 73 , mscorlib, Vers
1310: 69 6f 6e 3d 32 2e 30 2e 30 2e 30 2c 20 43 75 6c ion=2.0.0.0, Cul
1320: 74 75 72 65 3d 6e 65 75 74 72 61 6c 2c 20 50 75 ture=neutral, Pu
1330: 62 6c 69 63 4b 65 79 54 6f 6b 65 6e 3d 62 37 37 blicKeyToken=b77
1340: 61 35 63 35 36 31 39 33 34 65 30 38 39 22 20 29 a5c561934e089" )
1350: 0d 0a 7d 0d 0a 69 66 28 21 24 78 6c 72 38 72 3a ..}..if(!$xlr8r:
1360: 3a 47 65 74 5b 22 50 53 50 61 72 73 65 72 22 5d :Get["PSParser"]
1370: 29 20 7b 0d 0a 20 20 20 24 78 6c 72 38 72 3a 3a ) {.. $xlr8r::
1380: 41 64 64 28 20 22 50 53 50 61 72 73 65 72 22 2c Add( "PSParser",
1390: 20 22 53 79 73 74 65 6d 2e 4d 61 6e 61 67 65 6d "System.Managem
13a0: 65 6e 74 2e 41 75 74 6f 6d 61 74 69 6f 6e 2e 50 ent.Automation.P
13b0: 53 50 61 72 73 65 72 2c 20 53 79 73 74 65 6d 2e SParser, System.
13c0: 4d 61 6e 61 67 65 6d 65 6e 74 2e 41 75 74 6f 6d Management.Autom
13d0: 61 74 69 6f 6e 2c 20 56 65 72 73 69 6f 6e 3d 31 ation, Version=1
13e0: 2e 30 2e 30 2e 30 2c 20 43 75 6c 74 75 72 65 3d .0.0.0, Culture=
13f0: 6e 65 75 74 72 61 6c 2c 20 50 75 62 6c 69 63 4b neutral, PublicK
1400: 65 79 54 6f 6b 65 6e 3d 33 31 62 66 33 38 35 36 eyToken=31bf3856
1410: 61 64 33 36 34 65 33 35 22 20 29 0d 0a 7d 0d 0a ad364e35" )..}..
1420: 7d 0d 0a 0d 0a 0d 0a 66 75 6e 63 74 69 6f 6e 20 }......function
1430: 49 6d 70 6f 72 74 2d 58 6d 6c 20 7b 0d 0a 23 2e Import-Xml {..#.
1440: 53 79 6e 6f 70 73 69 73 0d 0a 23 20 20 20 4c 6f Synopsis..# Lo
1450: 61 64 20 61 6e 20 58 4d 4c 20 66 69 6c 65 20 61 ad an XML file a
1460: 73 20 61 6e 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 s an XmlDocument
1470: 0d 0a 70 61 72 61 6d 28 0d 0a 20 20 20 20 23 20 ..param(.. #
1480: 53 70 65 63 69 66 69 65 73 20 61 20 73 74 72 69 Specifies a stri
1490: 6e 67 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 ng that contains
14a0: 20 74 68 65 20 58 4d 4c 20 74 6f 20 6c 6f 61 64 the XML to load
14b0: 2c 20 6f 72 20 61 20 70 61 74 68 20 74 6f 20 61 , or a path to a
14c0: 20 66 69 6c 65 20 77 68 69 63 68 20 68 61 73 20 file which has
14d0: 74 68 65 20 58 4d 4c 20 74 6f 20 6c 6f 61 64 20 the XML to load
14e0: 28 77 69 6c 64 63 61 72 64 73 20 61 72 65 20 70 (wildcards are p
14f0: 65 72 6d 69 74 74 65 64 29 2e 0d 0a 20 20 20 20 ermitted)...
1500: 5b 50 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74 [Parameter(Posit
1510: 69 6f 6e 3d 31 2c 4d 61 6e 64 61 74 6f 72 79 3d ion=1,Mandatory=
1520: 24 74 72 75 65 2c 56 61 6c 75 65 46 72 6f 6d 50 $true,ValueFromP
1530: 69 70 65 6c 69 6e 65 3d 24 74 72 75 65 2c 56 61 ipeline=$true,Va
1540: 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 42 lueFromPipelineB
1550: 79 50 72 6f 70 65 72 74 79 4e 61 6d 65 3d 24 74 yPropertyName=$t
1560: 72 75 65 29 5d 0d 0a 20 20 20 20 5b 56 61 6c 69 rue)].. [Vali
1570: 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 45 6d 70 dateNotNullOrEmp
1580: 74 79 28 29 5d 0d 0a 20 20 20 20 5b 41 6c 69 61 ty()].. [Alia
1590: 73 28 22 50 53 50 61 74 68 22 2c 22 50 61 74 68 s("PSPath","Path
15a0: 22 29 5d 0d 0a 20 20 20 20 5b 53 74 72 69 6e 67 ")].. [String
15b0: 5b 5d 5d 24 43 6f 6e 74 65 6e 74 0d 0a 2c 0d 0a []]$Content..,..
15c0: 20 20 20 20 23 20 49 66 20 73 65 74 2c 20 6c 6f # If set, lo
15d0: 61 64 73 20 58 4d 4c 20 77 69 74 68 20 61 6c 6c ads XML with all
15e0: 20 6e 61 6d 65 73 70 61 63 65 20 71 75 61 6c 69 namespace quali
15f0: 66 69 65 72 73 20 72 65 6d 6f 76 65 64 2c 20 61 fiers removed, a
1600: 6e 64 20 61 6c 6c 20 65 6e 74 69 74 69 65 73 20 nd all entities
1610: 65 78 70 61 6e 64 65 64 2e 0d 0a 20 20 20 20 5b expanded... [
1620: 41 6c 69 61 73 28 22 52 6e 22 2c 22 52 6d 22 29 Alias("Rn","Rm")
1630: 5d 0d 0a 20 20 20 20 5b 53 77 69 74 63 68 5d 24 ].. [Switch]$
1640: 52 65 6d 6f 76 65 4e 61 6d 65 73 70 61 63 65 0d RemoveNamespace.
1650: 0a 29 0d 0a 62 65 67 69 6e 20 7b 0d 0a 20 20 20 .)..begin {..
1660: 20 5b 54 65 78 74 2e 53 74 72 69 6e 67 42 75 69 [Text.StringBui
1670: 6c 64 65 72 5d 24 58 6d 6c 43 6f 6e 74 65 6e 74 lder]$XmlContent
1680: 20 3d 20 5b 53 74 72 69 6e 67 5d 3a 3a 45 6d 70 = [String]::Emp
1690: 74 79 0d 0a 20 20 20 20 5b 62 6f 6f 6c 5d 24 50 ty.. [bool]$P
16a0: 61 74 68 20 3d 20 24 74 72 75 65 0d 0a 7d 0d 0a ath = $true..}..
16b0: 70 72 6f 63 65 73 73 20 7b 0d 0a 20 20 20 20 69 process {.. i
16c0: 66 28 24 50 61 74 68 20 2d 61 6e 64 20 28 24 50 f($Path -and ($P
16d0: 61 74 68 20 3d 20 54 65 73 74 2d 50 61 74 68 20 ath = Test-Path
16e0: 40 28 24 43 6f 6e 74 65 6e 74 29 5b 30 5d 20 2d @($Content)[0] -
16f0: 45 41 20 30 29 29 20 7b 20 0d 0a 20 20 20 20 20 EA 0)) { ..
1700: 20 20 20 66 6f 72 65 61 63 68 28 24 66 69 6c 65 foreach($file
1710: 20 69 6e 20 52 65 73 6f 6c 76 65 2d 50 61 74 68 in Resolve-Path
1720: 20 24 43 6f 6e 74 65 6e 74 29 20 7b 0d 0a 20 20 $Content) {..
1730: 20 20 20 20 20 20 20 20 20 20 24 78 6d 6c 20 3d $xml =
1740: 20 4e 65 77 2d 4f 62 6a 65 63 74 20 53 79 73 74 New-Object Syst
1750: 65 6d 2e 58 6d 6c 2e 58 6d 6c 44 6f 63 75 6d 65 em.Xml.XmlDocume
1760: 6e 74 3b 20 0d 0a 20 20 20 20 20 20 20 20 20 20 nt; ..
1770: 20 20 69 66 28 24 66 69 6c 65 2e 50 72 6f 76 69 if($file.Provi
1780: 64 65 72 2e 4e 61 6d 65 20 2d 65 71 20 22 46 69 der.Name -eq "Fi
1790: 6c 65 53 79 73 74 65 6d 22 29 20 7b 0d 0a 20 20 leSystem") {..
17a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 78 $x
17b0: 6d 6c 2e 4c 6f 61 64 28 20 24 66 69 6c 65 2e 50 ml.Load( $file.P
17c0: 72 6f 76 69 64 65 72 50 61 74 68 20 29 0d 0a 20 roviderPath )..
17d0: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els
17e0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {..
17f0: 20 20 20 20 20 24 6f 66 73 20 3d 20 22 60 6e 22 $ofs = "`n"
1800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1810: 20 20 24 78 6d 6c 2e 4c 6f 61 64 58 6d 6c 28 20 $xml.LoadXml(
1820: 28 5b 53 74 72 69 6e 67 5d 28 47 65 74 2d 43 6f ([String](Get-Co
1830: 6e 74 65 6e 74 20 24 66 69 6c 65 29 29 20 29 0d ntent $file)) ).
1840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
1850: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 24 if($
1860: 52 65 6d 6f 76 65 4e 61 6d 65 73 70 61 63 65 29 RemoveNamespace)
1870: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
1880: 20 20 20 20 5b 53 79 73 74 65 6d 2e 58 6d 6c 2e [System.Xml.
1890: 58 6d 6c 4e 6f 64 65 5b 5d 5d 24 58 6d 6c 20 3d XmlNode[]]$Xml =
18a0: 20 40 28 52 65 6d 6f 76 65 2d 58 6d 6c 4e 61 6d @(Remove-XmlNam
18b0: 65 73 70 61 63 65 20 2d 58 6d 6c 20 24 6e 6f 64 espace -Xml $nod
18c0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e)..
18d0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 57 }.. W
18e0: 72 69 74 65 2d 4f 75 74 70 75 74 20 24 78 6d 6c rite-Output $xml
18f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }..
1900: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {..
1910: 20 20 20 23 20 49 66 20 74 68 65 20 22 70 61 74 # If the "pat
1920: 68 22 20 70 61 72 61 6d 65 74 65 72 20 69 73 6e h" parameter isn
1930: 27 74 20 61 63 74 75 61 6c 6c 79 20 61 20 70 61 't actually a pa
1940: 74 68 2c 20 61 73 73 75 6d 65 20 74 68 61 74 20 th, assume that
1950: 69 74 27 73 20 61 63 74 75 61 6c 6c 79 20 63 6f it's actually co
1960: 6e 74 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 66 ntent.. f
1970: 6f 72 65 61 63 68 28 24 6c 69 6e 65 20 69 6e 20 oreach($line in
1980: 24 63 6f 6e 74 65 6e 74 29 20 7b 0d 0a 20 20 20 $content) {..
1990: 20 20 20 20 20 20 20 20 20 24 6e 75 6c 6c 20 3d $null =
19a0: 20 24 58 6d 6c 43 6f 6e 74 65 6e 74 2e 41 70 70 $XmlContent.App
19b0: 65 6e 64 4c 69 6e 65 28 20 24 6c 69 6e 65 20 29 endLine( $line )
19c0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }..
19d0: 20 7d 0d 0a 7d 0d 0a 65 6e 64 20 7b 0d 0a 20 20 }..}..end {..
19e0: 20 20 69 66 28 21 24 50 61 74 68 29 20 7b 0d 0a if(!$Path) {..
19f0: 20 20 20 20 20 20 20 20 24 78 6d 6c 20 3d 20 4e $xml = N
1a00: 65 77 2d 4f 62 6a 65 63 74 20 53 79 73 74 65 6d ew-Object System
1a10: 2e 58 6d 6c 2e 58 6d 6c 44 6f 63 75 6d 65 6e 74 .Xml.XmlDocument
1a20: 3b 20 0d 0a 20 20 20 20 20 20 20 20 24 78 6d 6c ; .. $xml
1a30: 2e 4c 6f 61 64 58 6d 6c 28 20 24 58 6d 6c 43 6f .LoadXml( $XmlCo
1a40: 6e 74 65 6e 74 2e 54 6f 53 74 72 69 6e 67 28 29 ntent.ToString()
1a50: 20 29 0d 0a 20 20 20 20 20 20 20 20 69 66 28 24 ).. if($
1a60: 52 65 6d 6f 76 65 4e 61 6d 65 73 70 61 63 65 29 RemoveNamespace)
1a70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
1a80: 24 58 6d 6c 20 3d 20 40 28 52 65 6d 6f 76 65 2d $Xml = @(Remove-
1a90: 58 6d 6c 4e 61 6d 65 73 70 61 63 65 20 2d 58 6d XmlNamespace -Xm
1aa0: 6c 20 24 78 6d 6c 29 0d 0a 20 20 20 20 20 20 20 l $xml)..
1ab0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 57 72 69 74 }.. Writ
1ac0: 65 2d 4f 75 74 70 75 74 20 24 78 6d 6c 0d 0a 20 e-Output $xml..
1ad0: 20 20 20 7d 0d 0a 7d 7d 0d 0a 53 65 74 2d 41 6c }..}}..Set-Al
1ae0: 69 61 73 20 69 70 78 6d 6c 20 49 6d 70 6f 72 74 ias ipxml Import
1af0: 2d 58 6d 6c 0d 0a 53 65 74 2d 41 6c 69 61 73 20 -Xml..Set-Alias
1b00: 69 70 78 20 49 6d 70 6f 72 74 2d 58 6d 6c 0d 0a ipx Import-Xml..
1b10: 53 65 74 2d 41 6c 69 61 73 20 47 65 74 2d 58 6d Set-Alias Get-Xm
1b20: 6c 20 49 6d 70 6f 72 74 2d 58 6d 6c 0d 0a 53 65 l Import-Xml..Se
1b30: 74 2d 41 6c 69 61 73 20 67 78 6d 6c 20 49 6d 70 t-Alias gxml Imp
1b40: 6f 72 74 2d 58 6d 6c 0d 0a 53 65 74 2d 41 6c 69 ort-Xml..Set-Ali
1b50: 61 73 20 67 78 20 49 6d 70 6f 72 74 2d 58 6d 6c as gx Import-Xml
1b60: 0d 0a 0d 0a 66 75 6e 63 74 69 6f 6e 20 45 78 70 ....function Exp
1b70: 6f 72 74 2d 58 6d 6c 20 7b 0d 0a 70 61 72 61 6d ort-Xml {..param
1b80: 28 0d 0a 20 20 20 20 5b 50 61 72 61 6d 65 74 65 (.. [Paramete
1b90: 72 28 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 75 r(Mandatory=$tru
1ba0: 65 2c 20 50 6f 73 69 74 69 6f 6e 3d 31 29 5d 0d e, Position=1)].
1bb0: 0a 20 20 20 20 5b 41 6c 69 61 73 28 22 50 53 50 . [Alias("PSP
1bc0: 61 74 68 22 29 5d 0d 0a 20 20 20 20 5b 53 74 72 ath")].. [Str
1bd0: 69 6e 67 5d 24 50 61 74 68 0d 0a 2c 0d 0a 20 20 ing]$Path..,..
1be0: 20 20 23 20 53 70 65 63 69 66 69 65 73 20 6f 6e # Specifies on
1bf0: 65 20 6f 72 20 6d 6f 72 65 20 58 4d 4c 20 6e 6f e or more XML no
1c00: 64 65 73 20 74 6f 20 73 65 61 72 63 68 2e 0d 0a des to search...
1c10: 20 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50 [Parameter(P
1c20: 6f 73 69 74 69 6f 6e 3d 35 2c 50 61 72 61 6d 65 osition=5,Parame
1c30: 74 65 72 53 65 74 4e 61 6d 65 3d 22 58 6d 6c 22 terSetName="Xml"
1c40: 2c 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 75 65 ,Mandatory=$true
1c50: 2c 56 61 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69 ,ValueFromPipeli
1c60: 6e 65 3d 24 74 72 75 65 2c 56 61 6c 75 65 46 72 ne=$true,ValueFr
1c70: 6f 6d 50 69 70 65 6c 69 6e 65 42 79 50 72 6f 70 omPipelineByProp
1c80: 65 72 74 79 4e 61 6d 65 3d 24 74 72 75 65 29 5d ertyName=$true)]
1c90: 0d 0a 20 20 20 20 5b 56 61 6c 69 64 61 74 65 4e .. [ValidateN
1ca0: 6f 74 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 29 5d otNullOrEmpty()]
1cb0: 0d 0a 20 20 20 20 5b 41 6c 69 61 73 28 22 4e 6f .. [Alias("No
1cc0: 64 65 22 29 5d 0d 0a 20 20 20 20 5b 58 6d 6c 5d de")].. [Xml]
1cd0: 24 58 6d 6c 0d 0a 29 0d 0a 70 72 6f 63 65 73 73 $Xml..)..process
1ce0: 20 7b 0d 0a 20 20 20 20 24 78 6d 6c 2e 53 61 76 {.. $xml.Sav
1cf0: 65 28 20 24 50 61 74 68 20 29 0d 0a 7d 0d 0a 7d e( $Path )..}..}
1d00: 0d 0a 53 65 74 2d 41 6c 69 61 73 20 65 70 78 6d ..Set-Alias epxm
1d10: 6c 20 45 78 70 6f 72 74 2d 58 6d 6c 0d 0a 53 65 l Export-Xml..Se
1d20: 74 2d 41 6c 69 61 73 20 65 70 78 20 45 78 70 6f t-Alias epx Expo
1d30: 72 74 2d 58 6d 6c 0d 0a 53 65 74 2d 41 6c 69 61 rt-Xml..Set-Alia
1d40: 73 20 53 65 74 2d 58 6d 6c 20 45 78 70 6f 72 74 s Set-Xml Export
1d50: 2d 58 6d 6c 0d 0a 53 65 74 2d 41 6c 69 61 73 20 -Xml..Set-Alias
1d60: 73 78 6d 6c 20 45 78 70 6f 72 74 2d 58 6d 6c 0d sxml Export-Xml.
1d70: 0a 53 65 74 2d 41 6c 69 61 73 20 73 78 20 45 78 .Set-Alias sx Ex
1d80: 70 6f 72 74 2d 58 6d 6c 0d 0a 0d 0a 66 75 6e 63 port-Xml....func
1d90: 74 69 6f 6e 20 46 6f 72 6d 61 74 2d 58 6d 6c 20 tion Format-Xml
1da0: 7b 0d 0a 23 2e 53 79 6e 6f 70 73 69 73 0d 0a 23 {..#.Synopsis..#
1db0: 20 20 20 50 72 65 74 74 79 2d 70 72 69 6e 74 20 Pretty-print
1dc0: 66 6f 72 6d 61 74 74 65 64 20 58 4d 4c 20 73 6f formatted XML so
1dd0: 75 72 63 65 0d 0a 23 2e 44 65 73 63 72 69 70 74 urce..#.Descript
1de0: 69 6f 6e 0d 0a 23 20 20 20 52 75 6e 73 20 61 6e ion..# Runs an
1df0: 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 74 68 72 XmlDocument thr
1e00: 6f 75 67 68 20 61 6e 20 61 75 74 6f 2d 69 6e 64 ough an auto-ind
1e10: 65 6e 74 69 6e 67 20 58 6d 6c 57 72 69 74 65 72 enting XmlWriter
1e20: 0d 0a 23 2e 50 61 72 61 6d 65 74 65 72 20 58 6d ..#.Parameter Xm
1e30: 6c 0d 0a 23 20 20 20 54 68 65 20 58 6d 6c 20 44 l..# The Xml D
1e40: 6f 63 75 6d 65 6e 74 0d 0a 23 2e 50 61 72 61 6d ocument..#.Param
1e50: 65 74 65 72 20 50 61 74 68 0d 0a 23 20 20 20 54 eter Path..# T
1e60: 68 65 20 70 61 74 68 20 74 6f 20 61 6e 20 78 6d he path to an xm
1e70: 6c 20 64 6f 63 75 6d 65 6e 74 20 28 6f 6e 20 64 l document (on d
1e80: 69 73 63 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 isc or any other
1e90: 20 63 6f 6e 74 65 6e 74 20 70 72 6f 76 69 64 65 content provide
1ea0: 72 29 2e 0d 0a 23 2e 50 61 72 61 6d 65 74 65 72 r)...#.Parameter
1eb0: 20 49 6e 64 65 6e 74 0d 0a 23 20 20 20 54 68 65 Indent..# The
1ec0: 20 69 6e 64 65 6e 74 20 6c 65 76 65 6c 20 28 64 indent level (d
1ed0: 65 66 61 75 6c 74 73 20 74 6f 20 32 20 73 70 61 efaults to 2 spa
1ee0: 63 65 73 29 0d 0a 23 2e 45 78 61 6d 70 6c 65 0d ces)..#.Example.
1ef0: 0a 23 20 20 20 5b 78 6d 6c 5d 24 78 6d 6c 20 3d .# [xml]$xml =
1f00: 20 67 65 74 2d 63 6f 6e 74 65 6e 74 20 44 61 74 get-content Dat
1f10: 61 2e 78 6d 6c 0d 0a 23 20 20 20 43 3a 5c 50 53 a.xml..# C:\PS
1f20: 3e 46 6f 72 6d 61 74 2d 58 6d 6c 20 24 78 6d 6c >Format-Xml $xml
1f30: 0d 0a 23 2e 45 78 61 6d 70 6c 65 0d 0a 23 20 20 ..#.Example..#
1f40: 20 67 65 74 2d 63 6f 6e 74 65 6e 74 20 44 61 74 get-content Dat
1f50: 61 2e 78 6d 6c 20 7c 20 46 6f 72 6d 61 74 2d 58 a.xml | Format-X
1f60: 6d 6c 0d 0a 23 2e 45 78 61 6d 70 6c 65 0d 0a 23 ml..#.Example..#
1f70: 20 20 20 46 6f 72 6d 61 74 2d 58 6d 6c 20 43 3a Format-Xml C:
1f80: 5c 50 53 5c 44 61 74 61 2e 78 6d 6c 0d 0a 23 2e \PS\Data.xml..#.
1f90: 45 78 61 6d 70 6c 65 0d 0a 23 20 20 20 6c 73 20 Example..# ls
1fa0: 2a 2e 78 6d 6c 20 7c 20 46 6f 72 6d 61 74 2d 58 *.xml | Format-X
1fb0: 6d 6c 0d 0a 23 0d 0a 5b 43 6d 64 6c 65 74 42 69 ml..#..[CmdletBi
1fc0: 6e 64 69 6e 67 28 29 5d 0d 0a 70 61 72 61 6d 28 nding()]..param(
1fd0: 0d 0a 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 .. [Parameter(
1fe0: 50 6f 73 69 74 69 6f 6e 3d 30 2c 20 4d 61 6e 64 Position=0, Mand
1ff0: 61 74 6f 72 79 3d 24 74 72 75 65 2c 20 56 61 6c atory=$true, Val
2000: 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 ueFromPipeline=$
2010: 74 72 75 65 2c 20 50 61 72 61 6d 65 74 65 72 53 true, ParameterS
2020: 65 74 4e 61 6d 65 3d 22 44 6f 63 75 6d 65 6e 74 etName="Document
2030: 22 29 5d 0d 0a 20 20 20 5b 78 6d 6c 5d 24 58 6d ")].. [xml]$Xm
2040: 6c 0d 0a 2c 0d 0a 20 20 20 5b 50 61 72 61 6d 65 l..,.. [Parame
2050: 74 65 72 28 50 6f 73 69 74 69 6f 6e 3d 30 2c 20 ter(Position=0,
2060: 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 75 65 2c Mandatory=$true,
2070: 20 56 61 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69 ValueFromPipeli
2080: 6e 65 3d 24 74 72 75 65 2c 20 56 61 6c 75 65 46 ne=$true, ValueF
2090: 72 6f 6d 50 69 70 65 6c 69 6e 65 42 79 50 72 6f romPipelineByPro
20a0: 70 65 72 74 79 4e 61 6d 65 3d 24 74 72 75 65 2c pertyName=$true,
20b0: 20 50 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d ParameterSetNam
20c0: 65 3d 22 46 69 6c 65 22 29 5d 0d 0a 20 20 20 5b e="File")].. [
20d0: 41 6c 69 61 73 28 22 50 73 50 61 74 68 22 29 5d Alias("PsPath")]
20e0: 0d 0a 20 20 20 5b 73 74 72 69 6e 67 5d 24 50 61 .. [string]$Pa
20f0: 74 68 0d 0a 2c 0d 0a 20 20 20 5b 50 61 72 61 6d th..,.. [Param
2100: 65 74 65 72 28 4d 61 6e 64 61 74 6f 72 79 3d 24 eter(Mandatory=$
2110: 66 61 6c 73 65 29 5d 0d 0a 20 20 20 24 49 6e 64 false)].. $Ind
2120: 65 6e 74 3d 32 0d 0a 29 0d 0a 70 72 6f 63 65 73 ent=2..)..proces
2130: 73 20 7b 0d 0a 20 20 20 23 23 20 4c 6f 61 64 20 s {.. ## Load
2140: 66 72 6f 6d 20 66 69 6c 65 2c 20 69 66 20 6e 65 from file, if ne
2150: 63 65 73 73 61 72 79 0d 0a 20 20 20 69 66 28 24 cessary.. if($
2160: 50 61 74 68 29 20 7b 20 5b 78 6d 6c 5d 24 78 6d Path) { [xml]$xm
2170: 6c 20 3d 20 47 65 74 2d 43 6f 6e 74 65 6e 74 20 l = Get-Content
2180: 24 50 61 74 68 20 7d 0d 0a 20 20 20 0d 0a 20 20 $Path }.. ..
2190: 20 24 53 74 72 69 6e 67 57 72 69 74 65 72 20 3d $StringWriter =
21a0: 20 4e 65 77 2d 4f 62 6a 65 63 74 20 53 79 73 74 New-Object Syst
21b0: 65 6d 2e 49 4f 2e 53 74 72 69 6e 67 57 72 69 74 em.IO.StringWrit
21c0: 65 72 0d 0a 20 20 20 24 58 6d 6c 57 72 69 74 65 er.. $XmlWrite
21d0: 72 20 3d 20 4e 65 77 2d 4f 62 6a 65 63 74 20 53 r = New-Object S
21e0: 79 73 74 65 6d 2e 58 6d 6c 2e 58 6d 6c 54 65 78 ystem.Xml.XmlTex
21f0: 74 57 72 69 74 65 72 20 24 53 74 72 69 6e 67 57 tWriter $StringW
2200: 72 69 74 65 72 0d 0a 20 20 20 24 78 6d 6c 57 72 riter.. $xmlWr
2210: 69 74 65 72 2e 46 6f 72 6d 61 74 74 69 6e 67 20 iter.Formatting
2220: 3d 20 22 69 6e 64 65 6e 74 65 64 22 0d 0a 20 20 = "indented"..
2230: 20 24 78 6d 6c 57 72 69 74 65 72 2e 49 6e 64 65 $xmlWriter.Inde
2240: 6e 74 61 74 69 6f 6e 20 3d 20 24 49 6e 64 65 6e ntation = $Inden
2250: 74 0d 0a 20 20 20 24 78 6d 6c 2e 57 72 69 74 65 t.. $xml.Write
2260: 43 6f 6e 74 65 6e 74 54 6f 28 24 58 6d 6c 57 72 ContentTo($XmlWr
2270: 69 74 65 72 29 0d 0a 20 20 20 24 58 6d 6c 57 72 iter).. $XmlWr
2280: 69 74 65 72 2e 46 6c 75 73 68 28 29 0d 0a 20 20 iter.Flush()..
2290: 20 24 53 74 72 69 6e 67 57 72 69 74 65 72 2e 46 $StringWriter.F
22a0: 6c 75 73 68 28 29 0d 0a 20 20 20 57 72 69 74 65 lush().. Write
22b0: 2d 4f 75 74 70 75 74 20 24 53 74 72 69 6e 67 57 -Output $StringW
22c0: 72 69 74 65 72 2e 54 6f 53 74 72 69 6e 67 28 29 riter.ToString()
22d0: 0d 0a 7d 7d 0d 0a 53 65 74 2d 41 6c 69 61 73 20 ..}}..Set-Alias
22e0: 66 78 6d 6c 20 46 6f 72 6d 61 74 2d 58 6d 6c 20 fxml Format-Xml
22f0: 2d 45 41 20 30 0d 0a 53 65 74 2d 41 6c 69 61 73 -EA 0..Set-Alias
2300: 20 66 78 20 20 20 46 6f 72 6d 61 74 2d 58 6d 6c fx Format-Xml
2310: 20 2d 45 41 20 30 0d 0a 0d 0a 66 75 6e 63 74 69 -EA 0....functi
2320: 6f 6e 20 53 65 6c 65 63 74 2d 58 6d 6c 4e 6f 64 on Select-XmlNod
2330: 65 49 6e 74 65 72 6e 61 6c 20 7b 0d 0a 5b 43 6d eInternal {..[Cm
2340: 64 6c 65 74 42 69 6e 64 69 6e 67 28 29 5d 0d 0a dletBinding()]..
2350: 70 61 72 61 6d 28 5b 58 6d 6c 2e 58 6d 6c 4e 6f param([Xml.XmlNo
2360: 64 65 5b 5d 5d 24 58 6d 6c 2c 20 5b 53 74 72 69 de[]]$Xml, [Stri
2370: 6e 67 5b 5d 5d 24 58 50 61 74 68 2c 20 5b 48 61 ng[]]$XPath, [Ha
2380: 73 68 74 61 62 6c 65 5d 24 4e 61 6d 65 73 70 61 shtable]$Namespa
2390: 63 65 4d 61 6e 61 67 65 72 29 0d 0a 62 65 67 69 ceManager)..begi
23a0: 6e 20 7b 0d 0a 20 20 20 20 57 72 69 74 65 2d 56 n {.. Write-V
23b0: 65 72 62 6f 73 65 20 22 58 50 61 74 68 20 3d 20 erbose "XPath =
23c0: 24 28 24 58 50 61 74 68 20 2d 6a 6f 69 6e 20 27 $($XPath -join '
23d0: 2c 27 29 22 0d 0a 20 20 20 20 66 6f 72 65 61 63 ,')".. foreac
23e0: 68 28 24 6e 6f 64 65 20 69 6e 20 24 78 6d 6c 29 h($node in $xml)
23f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 28 24 {.. if($
2400: 4e 61 6d 65 73 70 61 63 65 4d 61 6e 61 67 65 72 NamespaceManager
2410: 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ) {..
2420: 20 24 6e 73 4d 61 6e 61 67 65 72 20 3d 20 6e 65 $nsManager = ne
2430: 77 2d 6f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e w-object System.
2440: 58 6d 6c 2e 58 6d 6c 4e 61 6d 65 73 70 61 63 65 Xml.XmlNamespace
2450: 4d 61 6e 61 67 65 72 20 24 6e 6f 64 65 2e 4e 61 Manager $node.Na
2460: 6d 65 54 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 meTable..
2470: 20 20 20 20 20 66 6f 72 65 61 63 68 28 24 6e 73 foreach($ns
2480: 20 69 6e 20 24 4e 61 6d 65 73 70 61 63 65 4d 61 in $NamespaceMa
2490: 6e 61 67 65 72 2e 47 65 74 45 6e 75 6d 65 72 61 nager.GetEnumera
24a0: 74 6f 72 28 29 29 20 7b 0d 0a 20 20 20 20 20 20 tor()) {..
24b0: 20 20 20 20 20 20 20 20 20 20 24 6e 73 4d 61 6e $nsMan
24c0: 61 67 65 72 2e 41 64 64 4e 61 6d 65 73 70 61 63 ager.AddNamespac
24d0: 65 28 20 24 6e 73 2e 4b 65 79 2c 20 24 6e 73 2e e( $ns.Key, $ns.
24e0: 56 61 6c 75 65 20 29 0d 0a 20 20 20 20 20 20 20 Value )..
24f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
2500: 20 20 20 20 57 72 69 74 65 2d 56 65 72 62 6f 73 Write-Verbos
2510: 65 20 22 4e 61 6d 65 73 20 3d 20 24 28 24 6e 73 e "Names = $($ns
2520: 4d 61 6e 61 67 65 72 20 7c 20 25 20 7b 20 40 7b Manager | % { @{
2530: 20 24 5f 20 3d 20 24 6e 73 4d 61 6e 61 67 65 72 $_ = $nsManager
2540: 2e 4c 6f 6f 6b 75 70 4e 61 6d 65 73 70 61 63 65 .LookupNamespace
2550: 28 24 5f 29 20 7d 20 7d 20 7c 20 4f 75 74 2d 53 ($_) } } | Out-S
2560: 74 72 69 6e 67 29 22 0d 0a 20 20 20 20 20 20 20 tring)"..
2570: 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 }.. fore
2580: 61 63 68 28 24 70 61 74 68 20 69 6e 20 24 78 70 ach($path in $xp
2590: 61 74 68 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 ath) {..
25a0: 20 20 20 20 24 6e 6f 64 65 2e 53 65 6c 65 63 74 $node.Select
25b0: 4e 6f 64 65 73 28 24 70 61 74 68 2c 20 24 6e 73 Nodes($path, $ns
25c0: 4d 61 6e 61 67 65 72 29 0d 0a 20 20 20 20 20 20 Manager)..
25d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 7d 7d 0d 0a }.. }..}}..
25e0: 0d 0a 66 75 6e 63 74 69 6f 6e 20 53 65 6c 65 63 ..function Selec
25f0: 74 2d 58 6d 6c 20 7b 0d 0a 23 2e 53 79 6e 6f 70 t-Xml {..#.Synop
2600: 73 69 73 0d 0a 23 20 20 54 68 65 20 53 65 6c 65 sis..# The Sele
2610: 63 74 2d 58 4d 4c 20 63 6d 64 6c 65 74 20 6c 65 ct-XML cmdlet le
2620: 74 73 20 79 6f 75 20 75 73 65 20 58 50 61 74 68 ts you use XPath
2630: 20 71 75 65 72 69 65 73 20 74 6f 20 73 65 61 72 queries to sear
2640: 63 68 20 66 6f 72 20 74 65 78 74 20 69 6e 20 58 ch for text in X
2650: 4d 4c 20 73 74 72 69 6e 67 73 20 61 6e 64 20 64 ML strings and d
2660: 6f 63 75 6d 65 6e 74 73 2e 20 45 6e 74 65 72 20 ocuments. Enter
2670: 61 6e 20 58 50 61 74 68 20 71 75 65 72 79 2c 20 an XPath query,
2680: 61 6e 64 20 75 73 65 20 74 68 65 20 43 6f 6e 74 and use the Cont
2690: 65 6e 74 2c 20 50 61 74 68 2c 20 6f 72 20 58 6d ent, Path, or Xm
26a0: 6c 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 l parameter to s
26b0: 70 65 63 69 66 79 20 74 68 65 20 58 4d 4c 20 74 pecify the XML t
26c0: 6f 20 62 65 20 73 65 61 72 63 68 65 64 2e 0d 0a o be searched...
26d0: 23 2e 44 65 73 63 72 69 70 74 69 6f 6e 0d 0a 23 #.Description..#
26e0: 20 20 49 6d 70 72 6f 76 65 73 20 6f 76 65 72 20 Improves over
26f0: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 53 65 6c the built-in Sel
2700: 65 63 74 2d 58 4d 4c 20 62 79 20 6c 65 76 65 72 ect-XML by lever
2710: 61 67 69 6e 67 20 52 65 6d 6f 76 65 2d 58 6d 6c aging Remove-Xml
2720: 4e 61 6d 65 73 70 61 63 65 20 74 6f 20 70 72 6f Namespace to pro
2730: 76 69 64 65 20 61 20 2d 52 65 6d 6f 76 65 4e 61 vide a -RemoveNa
2740: 6d 65 73 70 61 63 65 20 70 61 72 61 6d 65 74 65 mespace paramete
2750: 72 20 2d 2d 20 69 66 20 69 74 27 73 20 73 75 70 r -- if it's sup
2760: 70 6c 69 65 64 2c 20 61 6c 6c 20 6f 66 20 74 68 plied, all of th
2770: 65 20 6e 61 6d 65 73 70 61 63 65 20 64 65 63 6c e namespace decl
2780: 61 72 61 74 69 6f 6e 73 20 61 6e 64 20 70 72 65 arations and pre
2790: 66 69 78 65 73 20 61 72 65 20 72 65 6d 6f 76 65 fixes are remove
27a0: 64 20 66 72 6f 6d 20 61 6c 6c 20 58 4d 4c 20 6e d from all XML n
27b0: 6f 64 65 73 20 28 62 79 20 61 6e 20 58 53 4c 20 odes (by an XSL
27c0: 74 72 61 6e 73 66 6f 72 6d 29 20 62 65 66 6f 72 transform) befor
27d0: 65 20 73 65 61 72 63 68 69 6e 67 2e 20 20 0d 0a e searching. ..
27e0: 23 20 20 0d 0a 23 20 20 48 6f 77 65 76 65 72 2c # ..# However,
27f0: 20 6f 6e 6c 79 20 72 61 77 20 58 6d 6c 4e 6f 64 only raw XmlNod
2800: 65 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 es are returned
2810: 66 72 6f 6d 20 74 68 69 73 20 66 75 6e 63 74 69 from this functi
2820: 6f 6e 2c 20 73 6f 20 74 68 65 20 6f 75 74 70 75 on, so the outpu
2830: 74 20 69 73 6e 27 74 20 63 75 72 72 65 6e 74 6c t isn't currentl
2840: 79 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 y compatible wit
2850: 68 20 74 68 65 20 62 75 69 6c 74 20 69 6e 20 53 h the built in S
2860: 65 6c 65 63 74 2d 58 6d 6c 2c 20 62 75 74 20 69 elect-Xml, but i
2870: 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 s equivalent to
2880: 75 73 69 6e 67 20 53 65 6c 65 63 74 2d 58 6d 6c using Select-Xml
2890: 20 2e 2e 2e 20 7c 20 53 65 6c 65 63 74 2d 4f 62 ... | Select-Ob
28a0: 6a 65 63 74 20 2d 45 78 70 61 6e 64 20 4e 6f 64 ject -Expand Nod
28b0: 65 0d 0a 23 0d 0a 23 20 20 41 6c 73 6f 20 6e 6f e..#..# Also no
28c0: 74 65 20 74 68 61 74 20 69 66 20 74 68 65 20 2d te that if the -
28d0: 52 65 6d 6f 76 65 4e 61 6d 65 73 70 61 63 65 20 RemoveNamespace
28e0: 73 77 69 74 63 68 20 69 73 20 73 75 70 70 6c 69 switch is suppli
28f0: 65 64 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 ed the returned
2900: 72 65 73 75 6c 74 73 20 2a 77 69 6c 6c 20 6e 6f results *will no
2910: 74 2a 20 68 61 76 65 20 6e 61 6d 65 73 70 61 63 t* have namespac
2920: 65 73 20 69 6e 20 74 68 65 6d 2c 20 65 76 65 6e es in them, even
2930: 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 58 4d if the input XM
2940: 4c 20 64 69 64 2c 20 61 6e 64 20 65 6e 74 69 74 L did, and entit
2950: 69 65 73 20 67 65 74 20 65 78 70 61 6e 64 65 64 ies get expanded
2960: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0d automatically..
2970: 0a 5b 43 6d 64 6c 65 74 42 69 6e 64 69 6e 67 28 .[CmdletBinding(
2980: 44 65 66 61 75 6c 74 50 61 72 61 6d 65 74 65 72 DefaultParameter
2990: 53 65 74 4e 61 6d 65 3d 22 58 6d 6c 22 29 5d 0d SetName="Xml")].
29a0: 0a 70 61 72 61 6d 28 0d 0a 20 20 20 20 23 20 53 .param(.. # S
29b0: 70 65 63 69 66 69 65 73 20 61 6e 20 58 50 61 74 pecifies an XPat
29c0: 68 20 73 65 61 72 63 68 20 71 75 65 72 79 2e 20 h search query.
29d0: 54 68 65 20 71 75 65 72 79 20 6c 61 6e 67 75 61 The query langua
29e0: 67 65 20 69 73 20 63 61 73 65 2d 73 65 6e 73 69 ge is case-sensi
29f0: 74 69 76 65 2e 20 54 68 69 73 20 70 61 72 61 6d tive. This param
2a00: 65 74 65 72 20 69 73 20 72 65 71 75 69 72 65 64 eter is required
2a10: 2e 0d 0a 20 20 20 20 5b 50 61 72 61 6d 65 74 65 ... [Paramete
2a20: 72 28 50 6f 73 69 74 69 6f 6e 3d 31 2c 4d 61 6e r(Position=1,Man
2a30: 64 61 74 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c datory=$true,Val
2a40: 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 ueFromPipeline=$
2a50: 66 61 6c 73 65 29 5d 0d 0a 20 20 20 20 5b 56 61 false)].. [Va
2a60: 6c 69 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 45 lidateNotNullOrE
2a70: 6d 70 74 79 28 29 5d 0d 0a 20 20 20 20 5b 41 6c mpty()].. [Al
2a80: 69 61 73 28 22 51 75 65 72 79 22 29 5d 0d 0a 20 ias("Query")]..
2a90: 20 20 20 5b 53 74 72 69 6e 67 5b 5d 5d 24 58 50 [String[]]$XP
2aa0: 61 74 68 0d 0a 2c 0d 0a 20 20 20 20 23 20 53 70 ath..,.. # Sp
2ab0: 65 63 69 66 69 65 73 20 61 20 73 74 72 69 6e 67 ecifies a string
2ac0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 that contains t
2ad0: 68 65 20 58 4d 4c 20 74 6f 20 73 65 61 72 63 68 he XML to search
2ae0: 2e 20 59 6f 75 20 63 61 6e 20 61 6c 73 6f 20 70 . You can also p
2af0: 69 70 65 20 73 74 72 69 6e 67 73 20 74 6f 20 53 ipe strings to S
2b00: 65 6c 65 63 74 2d 58 4d 4c 2e 0d 0a 20 20 20 20 elect-XML...
2b10: 5b 50 61 72 61 6d 65 74 65 72 28 50 61 72 61 6d [Parameter(Param
2b20: 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 43 6f 6e eterSetName="Con
2b30: 74 65 6e 74 22 2c 4d 61 6e 64 61 74 6f 72 79 3d tent",Mandatory=
2b40: 24 74 72 75 65 29 5d 0d 0a 20 20 20 20 5b 56 61 $true)].. [Va
2b50: 6c 69 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 45 lidateNotNullOrE
2b60: 6d 70 74 79 28 29 5d 0d 0a 20 20 20 20 5b 53 74 mpty()].. [St
2b70: 72 69 6e 67 5b 5d 5d 24 43 6f 6e 74 65 6e 74 0d ring[]]$Content.
2b80: 0a 2c 0d 0a 20 20 20 20 23 20 53 70 65 63 69 66 .,.. # Specif
2b90: 69 65 73 20 74 68 65 20 70 61 74 68 20 61 6e 64 ies the path and
2ba0: 20 66 69 6c 65 20 6e 61 6d 65 73 20 6f 66 20 74 file names of t
2bb0: 68 65 20 58 4d 4c 20 66 69 6c 65 73 20 74 6f 20 he XML files to
2bc0: 73 65 61 72 63 68 2e 20 20 57 69 6c 64 63 61 72 search. Wildcar
2bd0: 64 73 20 61 72 65 20 70 65 72 6d 69 74 74 65 64 ds are permitted
2be0: 2e 0d 0a 20 20 20 20 5b 50 61 72 61 6d 65 74 65 ... [Paramete
2bf0: 72 28 50 6f 73 69 74 69 6f 6e 3d 35 2c 50 61 72 r(Position=5,Par
2c00: 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 50 ameterSetName="P
2c10: 61 74 68 22 2c 4d 61 6e 64 61 74 6f 72 79 3d 24 ath",Mandatory=$
2c20: 74 72 75 65 2c 56 61 6c 75 65 46 72 6f 6d 50 69 true,ValueFromPi
2c30: 70 65 6c 69 6e 65 42 79 50 72 6f 70 65 72 74 79 pelineByProperty
2c40: 4e 61 6d 65 3d 24 74 72 75 65 29 5d 0d 0a 20 20 Name=$true)]..
2c50: 20 20 5b 56 61 6c 69 64 61 74 65 4e 6f 74 4e 75 [ValidateNotNu
2c60: 6c 6c 4f 72 45 6d 70 74 79 28 29 5d 0d 0a 20 20 llOrEmpty()]..
2c70: 20 20 5b 41 6c 69 61 73 28 22 50 53 50 61 74 68 [Alias("PSPath
2c80: 22 29 5d 0d 0a 20 20 20 20 5b 53 74 72 69 6e 67 ")].. [String
2c90: 5b 5d 5d 24 50 61 74 68 0d 0a 2c 0d 0a 20 20 20 []]$Path..,..
2ca0: 20 23 20 53 70 65 63 69 66 69 65 73 20 6f 6e 65 # Specifies one
2cb0: 20 6f 72 20 6d 6f 72 65 20 58 4d 4c 20 6e 6f 64 or more XML nod
2cc0: 65 73 20 74 6f 20 73 65 61 72 63 68 2e 0d 0a 20 es to search...
2cd0: 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50 6f [Parameter(Po
2ce0: 73 69 74 69 6f 6e 3d 35 2c 50 61 72 61 6d 65 74 sition=5,Paramet
2cf0: 65 72 53 65 74 4e 61 6d 65 3d 22 58 6d 6c 22 2c erSetName="Xml",
2d00: 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 75 65 2c Mandatory=$true,
2d10: 56 61 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e ValueFromPipelin
2d20: 65 3d 24 74 72 75 65 2c 56 61 6c 75 65 46 72 6f e=$true,ValueFro
2d30: 6d 50 69 70 65 6c 69 6e 65 42 79 50 72 6f 70 65 mPipelineByPrope
2d40: 72 74 79 4e 61 6d 65 3d 24 74 72 75 65 29 5d 0d rtyName=$true)].
2d50: 0a 20 20 20 20 5b 56 61 6c 69 64 61 74 65 4e 6f . [ValidateNo
2d60: 74 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 29 5d 0d tNullOrEmpty()].
2d70: 0a 20 20 20 20 5b 41 6c 69 61 73 28 22 4e 6f 64 . [Alias("Nod
2d80: 65 22 29 5d 0d 0a 20 20 20 20 5b 53 79 73 74 65 e")].. [Syste
2d90: 6d 2e 58 6d 6c 2e 58 6d 6c 4e 6f 64 65 5b 5d 5d m.Xml.XmlNode[]]
2da0: 24 58 6d 6c 0d 0a 2c 0d 0a 20 20 20 20 23 20 53 $Xml..,.. # S
2db0: 70 65 63 69 66 69 65 73 20 61 20 68 61 73 68 20 pecifies a hash
2dc0: 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6e 61 6d table of the nam
2dd0: 65 73 70 61 63 65 73 20 75 73 65 64 20 69 6e 20 espaces used in
2de0: 74 68 65 20 58 4d 4c 2e 20 55 73 65 20 74 68 65 the XML. Use the
2df0: 20 66 6f 72 6d 61 74 20 40 7b 3c 6e 61 6d 65 73 format @{<names
2e00: 70 61 63 65 4e 61 6d 65 3e 20 3d 20 3c 6e 61 6d paceName> = <nam
2e10: 65 73 70 61 63 65 55 72 69 3e 7d 2e 0d 0a 20 20 espaceUri>}...
2e20: 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50 6f 73 [Parameter(Pos
2e30: 69 74 69 6f 6e 3d 31 30 2c 4d 61 6e 64 61 74 6f ition=10,Mandato
2e40: 72 79 3d 24 66 61 6c 73 65 29 5d 0d 0a 20 20 20 ry=$false)]..
2e50: 20 5b 56 61 6c 69 64 61 74 65 4e 6f 74 4e 75 6c [ValidateNotNul
2e60: 6c 4f 72 45 6d 70 74 79 28 29 5d 0d 0a 20 20 20 lOrEmpty()]..
2e70: 20 5b 41 6c 69 61 73 28 22 4e 73 22 29 5d 0d 0a [Alias("Ns")]..
2e80: 20 20 20 20 5b 48 61 73 68 74 61 62 6c 65 5d 24 [Hashtable]$
2e90: 4e 61 6d 65 73 70 61 63 65 0d 0a 2c 0d 0a 20 20 Namespace..,..
2ea0: 20 20 23 20 41 6c 6c 6f 77 73 20 74 68 65 20 65 # Allows the e
2eb0: 78 65 63 75 74 69 6f 6e 20 6f 66 20 58 50 61 74 xecution of XPat
2ec0: 68 20 71 75 65 72 69 65 73 20 77 69 74 68 6f 75 h queries withou
2ed0: 74 20 6e 61 6d 65 73 70 61 63 65 20 71 75 61 6c t namespace qual
2ee0: 69 66 69 65 72 73 2e 20 0d 0a 20 20 20 20 23 20 ifiers. .. #
2ef0: 0d 0a 20 20 20 20 23 20 49 66 20 79 6f 75 20 73 .. # If you s
2f00: 70 65 63 69 66 79 20 74 68 65 20 2d 52 65 6d 6f pecify the -Remo
2f10: 76 65 4e 61 6d 65 73 70 61 63 65 20 73 77 69 74 veNamespace swit
2f20: 63 68 2c 20 61 6c 6c 20 6e 61 6d 65 73 70 61 63 ch, all namespac
2f30: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 61 e declarations a
2f40: 6e 64 20 70 72 65 66 69 78 65 73 20 61 72 65 20 nd prefixes are
2f50: 61 63 74 75 61 6c 6c 79 20 72 65 6d 6f 76 65 64 actually removed
2f60: 20 66 72 6f 6d 20 74 68 65 20 58 6d 6c 20 62 65 from the Xml be
2f70: 66 6f 72 65 20 74 68 65 20 58 50 61 74 68 20 73 fore the XPath s
2f80: 65 61 72 63 68 20 71 75 65 72 79 20 69 73 20 65 earch query is e
2f90: 76 61 6c 75 61 74 65 64 2c 20 61 6e 64 20 79 6f valuated, and yo
2fa0: 75 72 20 58 50 61 74 68 20 71 75 65 72 79 20 73 ur XPath query s
2fb0: 68 6f 75 6c 64 20 74 68 65 72 65 66 6f 72 65 20 hould therefore
2fc0: 4e 4f 54 20 63 6f 6e 74 61 69 6e 20 61 6e 79 20 NOT contain any
2fd0: 6e 61 6d 65 73 70 61 63 65 20 70 72 65 66 69 78 namespace prefix
2fe0: 65 73 2e 0d 0a 20 20 20 20 23 20 0d 0a 20 20 20 es... # ..
2ff0: 20 23 20 4e 6f 74 65 20 74 68 61 74 20 74 68 69 # Note that thi
3000: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 s means that the
3010: 20 72 65 74 75 72 6e 65 64 20 72 65 73 75 6c 74 returned result
3020: 73 20 2a 77 69 6c 6c 20 6e 6f 74 2a 20 68 61 76 s *will not* hav
3030: 65 20 6e 61 6d 65 73 70 61 63 65 73 20 69 6e 20 e namespaces in
3040: 74 68 65 6d 2c 20 65 76 65 6e 20 69 66 20 74 68 them, even if th
3050: 65 20 69 6e 70 75 74 20 58 4d 4c 20 64 69 64 2c e input XML did,
3060: 20 61 6e 64 20 65 6e 74 69 74 69 65 73 20 67 65 and entities ge
3070: 74 20 65 78 70 61 6e 64 65 64 20 61 75 74 6f 6d t expanded autom
3080: 61 74 69 63 61 6c 6c 79 2e 0d 0a 20 20 20 20 5b atically... [
3090: 41 6c 69 61 73 28 22 52 6e 22 2c 22 52 6d 22 29 Alias("Rn","Rm")
30a0: 5d 0d 0a 20 20 20 20 5b 53 77 69 74 63 68 5d 24 ].. [Switch]$
30b0: 52 65 6d 6f 76 65 4e 61 6d 65 73 70 61 63 65 0d RemoveNamespace.
30c0: 0a 29 0d 0a 62 65 67 69 6e 20 7b 0d 0a 20 20 20 .)..begin {..
30d0: 20 24 4e 53 4d 20 3d 20 24 4e 75 6c 6c 3b 20 69 $NSM = $Null; i
30e0: 66 28 24 50 53 42 6f 75 6e 64 50 61 72 61 6d 65 f($PSBoundParame
30f0: 74 65 72 73 2e 43 6f 6e 74 61 69 6e 73 4b 65 79 ters.ContainsKey
3100: 28 22 4e 61 6d 65 73 70 61 63 65 22 29 29 20 7b ("Namespace")) {
3110: 20 24 4e 53 4d 20 3d 20 24 4e 61 6d 65 73 70 61 $NSM = $Namespa
3120: 63 65 20 7d 0d 0a 20 20 20 20 24 58 6d 6c 4e 6f ce }.. $XmlNo
3130: 64 65 73 20 3d 20 4e 65 77 2d 4f 62 6a 65 63 74 des = New-Object
3140: 20 53 79 73 74 65 6d 2e 58 6d 6c 2e 58 6d 6c 4e System.Xml.XmlN
3150: 6f 64 65 5b 5d 20 31 0d 0a 20 20 20 20 69 66 28 ode[] 1.. if(
3160: 24 50 53 43 6d 64 6c 65 74 2e 50 61 72 61 6d 65 $PSCmdlet.Parame
3170: 74 65 72 53 65 74 4e 61 6d 65 20 2d 65 71 20 22 terSetName -eq "
3180: 43 6f 6e 74 65 6e 74 22 29 20 7b 0d 0a 20 20 20 Content") {..
3190: 20 20 20 20 20 24 58 6d 6c 4e 6f 64 65 73 20 3d $XmlNodes =
31a0: 20 43 6f 6e 76 65 72 74 54 6f 2d 58 6d 6c 20 24 ConvertTo-Xml $
31b0: 43 6f 6e 74 65 6e 74 20 2d 52 65 6d 6f 76 65 4e Content -RemoveN
31c0: 61 6d 65 73 70 61 63 65 3a 24 52 65 6d 6f 76 65 amespace:$Remove
31d0: 4e 61 6d 65 73 70 61 63 65 0d 0a 20 20 20 20 20 Namespace..
31e0: 20 20 20 53 65 6c 65 63 74 2d 58 6d 6c 4e 6f 64 Select-XmlNod
31f0: 65 49 6e 74 65 72 6e 61 6c 20 24 58 6d 6c 4e 6f eInternal $XmlNo
3200: 64 65 73 20 24 58 50 61 74 68 20 24 4e 53 4d 0d des $XPath $NSM.
3210: 0a 20 20 20 20 7d 0d 0a 7d 0d 0a 70 72 6f 63 65 . }..}..proce
3220: 73 73 20 7b 0d 0a 20 20 20 20 73 77 69 74 63 68 ss {.. switch
3230: 28 24 50 53 43 6d 64 6c 65 74 2e 50 61 72 61 6d ($PSCmdlet.Param
3240: 65 74 65 72 53 65 74 4e 61 6d 65 29 20 7b 0d 0a eterSetName) {..
3250: 20 20 20 20 20 20 20 20 22 50 61 74 68 22 20 7b "Path" {
3260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6e .. $n
3270: 6f 64 65 20 3d 20 43 6f 6e 76 65 72 74 54 6f 2d ode = ConvertTo-
3280: 58 6d 6c 20 24 50 61 74 68 20 2d 52 65 6d 6f 76 Xml $Path -Remov
3290: 65 4e 61 6d 65 73 70 61 63 65 3a 24 52 65 6d 6f eNamespace:$Remo
32a0: 76 65 4e 61 6d 65 73 70 61 63 65 0d 0a 20 20 20 veNamespace..
32b0: 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2d Select-
32c0: 58 6d 6c 4e 6f 64 65 49 6e 74 65 72 6e 61 6c 20 XmlNodeInternal
32d0: 24 6e 6f 64 65 20 24 58 50 61 74 68 20 24 4e 53 $node $XPath $NS
32e0: 4d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 M.. }..
32f0: 20 20 20 20 20 20 22 58 6d 6c 22 20 7b 0d 0a 20 "Xml" {..
3300: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea
3310: 63 68 28 24 6e 6f 64 65 20 69 6e 20 24 58 6d 6c ch($node in $Xml
3320: 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ) {..
3330: 20 20 20 20 20 69 66 28 24 52 65 6d 6f 76 65 4e if($RemoveN
3340: 61 6d 65 73 70 61 63 65 29 20 7b 0d 0a 20 20 20 amespace) {..
3350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3360: 5b 58 6d 6c 5d 24 6e 6f 64 65 20 3d 20 52 65 6d [Xml]$node = Rem
3370: 6f 76 65 2d 58 6d 6c 4e 61 6d 65 73 70 61 63 65 ove-XmlNamespace
3380: 20 2d 58 6d 6c 20 24 6e 6f 64 65 0d 0a 20 20 20 -Xml $node..
3390: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
33a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33b0: 53 65 6c 65 63 74 2d 58 6d 6c 4e 6f 64 65 49 6e Select-XmlNodeIn
33c0: 74 65 72 6e 61 6c 20 24 6e 6f 64 65 20 24 58 50 ternal $node $XP
33d0: 61 74 68 20 24 4e 53 4d 0d 0a 20 20 20 20 20 20 ath $NSM..
33e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
33f0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 7d 7d 0d 0a 53 }.. }..}}..S
3400: 65 74 2d 41 6c 69 61 73 20 73 6c 78 6d 6c 20 53 et-Alias slxml S
3410: 65 6c 65 63 74 2d 58 6d 6c 20 2d 45 41 20 30 0d elect-Xml -EA 0.
3420: 0a 53 65 74 2d 41 6c 69 61 73 20 73 6c 78 20 53 .Set-Alias slx S
3430: 65 6c 65 63 74 2d 58 6d 6c 20 2d 45 41 20 30 0d elect-Xml -EA 0.
3440: 0a 0d 0a 0d 0a 66 75 6e 63 74 69 6f 6e 20 55 70 .....function Up
3450: 64 61 74 65 2d 58 6d 6c 20 7b 0d 0a 23 2e 53 79 date-Xml {..#.Sy
3460: 6e 6f 70 73 69 73 0d 0a 23 20 20 54 68 65 20 55 nopsis..# The U
3470: 70 64 61 74 65 2d 58 4d 4c 20 63 6d 64 6c 65 74 pdate-XML cmdlet
3480: 20 6c 65 74 73 20 79 6f 75 20 75 73 65 20 58 50 lets you use XP
3490: 61 74 68 20 71 75 65 72 69 65 73 20 74 6f 20 72 ath queries to r
34a0: 65 70 6c 61 63 65 20 74 65 78 74 20 69 6e 20 6e eplace text in n
34b0: 6f 64 65 73 20 69 6e 20 58 4d 4c 20 64 6f 63 75 odes in XML docu
34c0: 6d 65 6e 74 73 2e 20 45 6e 74 65 72 20 61 6e 20 ments. Enter an
34d0: 58 50 61 74 68 20 71 75 65 72 79 2c 20 61 6e 64 XPath query, and
34e0: 20 75 73 65 20 74 68 65 20 43 6f 6e 74 65 6e 74 use the Content
34f0: 2c 20 50 61 74 68 2c 20 6f 72 20 58 6d 6c 20 70 , Path, or Xml p
3500: 61 72 61 6d 65 74 65 72 20 74 6f 20 73 70 65 63 arameter to spec
3510: 69 66 79 20 74 68 65 20 58 4d 4c 20 74 6f 20 62 ify the XML to b
3520: 65 20 73 65 61 72 63 68 65 64 2e 0d 0a 23 2e 44 e searched...#.D
3530: 65 73 63 72 69 70 74 69 6f 6e 0d 0a 23 20 20 41 escription..# A
3540: 6c 6c 6f 77 73 20 79 6f 75 20 74 6f 20 75 70 64 llows you to upd
3550: 61 74 65 20 61 6e 20 61 74 74 72 69 62 75 74 65 ate an attribute
3560: 20 76 61 6c 75 65 2c 20 78 6d 6c 20 6e 6f 64 65 value, xml node
3570: 20 63 6f 6e 74 65 6e 74 73 2c 20 65 74 63 2e 0d contents, etc..
3580: 0a 23 0d 0a 23 2e 4e 6f 74 65 73 0d 0a 23 20 20 .#..#.Notes..#
3590: 57 65 20 73 74 69 6c 6c 20 6e 65 65 64 20 74 6f We still need to
35a0: 20 69 6d 70 6c 65 6d 65 6e 74 20 52 65 6d 6f 76 implement Remov
35b0: 65 4e 6f 64 65 20 61 6e 64 20 52 65 6d 6f 76 65 eNode and Remove
35c0: 41 74 74 72 69 62 75 74 65 20 61 6e 64 20 65 76 Attribute and ev
35d0: 65 6e 20 52 65 70 6c 61 63 65 4e 6f 64 65 0d 0a en ReplaceNode..
35e0: 5b 43 6d 64 6c 65 74 42 69 6e 64 69 6e 67 28 44 [CmdletBinding(D
35f0: 65 66 61 75 6c 74 50 61 72 61 6d 65 74 65 72 53 efaultParameterS
3600: 65 74 4e 61 6d 65 3d 22 53 65 74 22 29 5d 0d 0a etName="Set")]..
3610: 70 61 72 61 6d 28 0d 0a 20 20 20 20 23 20 53 70 param(.. # Sp
3620: 65 63 69 66 69 65 73 20 61 6e 20 58 50 61 74 68 ecifies an XPath
3630: 20 66 6f 72 20 61 6e 20 65 6c 65 6d 65 6e 74 20 for an element
3640: 77 68 65 72 65 20 79 6f 75 20 77 61 6e 74 20 74 where you want t
3650: 6f 20 69 6e 73 65 72 74 20 74 68 65 20 6e 65 77 o insert the new
3660: 20 6e 6f 64 65 2e 0d 0a 20 20 20 20 5b 50 61 72 node... [Par
3670: 61 6d 65 74 65 72 28 50 61 72 61 6d 65 74 65 72 ameter(Parameter
3680: 53 65 74 4e 61 6d 65 3d 22 42 65 66 6f 72 65 22 SetName="Before"
3690: 2c 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 75 65 ,Mandatory=$true
36a0: 29 5d 0d 0a 20 20 20 20 5b 56 61 6c 69 64 61 74 )].. [Validat
36b0: 65 4e 6f 74 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 eNotNullOrEmpty(
36c0: 29 5d 0d 0a 20 20 20 20 5b 53 77 69 74 63 68 5d )].. [Switch]
36d0: 24 42 65 66 6f 72 65 0d 0a 2c 0d 0a 20 20 20 20 $Before..,..
36e0: 23 20 53 70 65 63 69 66 69 65 73 20 61 6e 20 58 # Specifies an X
36f0: 50 61 74 68 20 66 6f 72 20 61 6e 20 65 6c 65 6d Path for an elem
3700: 65 6e 74 20 77 68 65 72 65 20 79 6f 75 20 77 61 ent where you wa
3710: 6e 74 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 nt to insert the
3720: 20 6e 65 77 20 6e 6f 64 65 2e 0d 0a 20 20 20 20 new node...
3730: 5b 50 61 72 61 6d 65 74 65 72 28 50 61 72 61 6d [Parameter(Param
3740: 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 41 66 74 eterSetName="Aft
3750: 65 72 22 2c 4d 61 6e 64 61 74 6f 72 79 3d 24 74 er",Mandatory=$t
3760: 72 75 65 29 5d 0d 0a 20 20 20 20 5b 56 61 6c 69 rue)].. [Vali
3770: 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 45 6d 70 dateNotNullOrEmp
3780: 74 79 28 29 5d 0d 0a 20 20 20 20 5b 53 77 69 74 ty()].. [Swit
3790: 63 68 5d 24 41 66 74 65 72 0d 0a 2c 0d 0a 20 20 ch]$After..,..
37a0: 20 20 23 20 49 66 20 73 65 74 2c 20 74 68 65 20 # If set, the
37b0: 6e 65 77 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 new value will b
37c0: 65 20 61 64 64 65 64 20 61 73 20 61 20 6e 65 77 e added as a new
37d0: 20 63 68 69 6c 64 20 6f 66 20 74 68 65 20 6e 6f child of the no
37e0: 64 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 de identified by
37f0: 20 74 68 65 20 58 50 61 74 68 0d 0a 20 20 20 20 the XPath..
3800: 5b 50 61 72 61 6d 65 74 65 72 28 50 61 72 61 6d [Parameter(Param
3810: 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 41 70 70 eterSetName="App
3820: 65 6e 64 22 2c 4d 61 6e 64 61 74 6f 72 79 3d 24 end",Mandatory=$
3830: 74 72 75 65 29 5d 0d 0a 20 20 20 20 5b 53 77 69 true)].. [Swi
3840: 74 63 68 5d 24 41 70 70 65 6e 64 0d 0a 2c 0d 0a tch]$Append..,..
3850: 20 20 20 20 23 20 49 66 20 73 65 74 2c 20 74 68 # If set, th
3860: 65 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65 e node identifie
3870: 64 20 62 79 20 74 68 65 20 58 50 61 74 68 20 77 d by the XPath w
3880: 69 6c 6c 20 62 65 20 72 65 6d 6f 76 65 64 20 69 ill be removed i
3890: 6e 73 74 65 61 64 20 6f 66 20 73 65 74 0d 0a 20 nstead of set..
38a0: 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50 61 [Parameter(Pa
38b0: 72 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 rameterSetName="
38c0: 52 65 6d 6f 76 65 22 2c 4d 61 6e 64 61 74 6f 72 Remove",Mandator
38d0: 79 3d 24 74 72 75 65 29 5d 0d 0a 20 20 20 20 5b y=$true)].. [
38e0: 53 77 69 74 63 68 5d 24 52 65 6d 6f 76 65 0d 0a Switch]$Remove..
38f0: 2c 0d 0a 20 20 20 20 23 20 49 66 20 73 65 74 2c ,.. # If set,
3900: 20 74 68 65 20 6e 6f 64 65 20 69 64 65 6e 74 69 the node identi
3910: 66 69 65 64 20 62 79 20 74 68 65 20 58 50 61 74 fied by the XPat
3920: 68 20 77 69 6c 6c 20 62 65 20 52 65 70 6c 61 63 h will be Replac
3930: 65 20 69 6e 73 74 65 61 64 20 6f 66 20 73 65 74 e instead of set
3940: 0d 0a 20 20 20 20 5b 50 61 72 61 6d 65 74 65 72 .. [Parameter
3950: 28 50 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d (ParameterSetNam
3960: 65 3d 22 52 65 70 6c 61 63 65 22 2c 4d 61 6e 64 e="Replace",Mand
3970: 61 74 6f 72 79 3d 24 74 72 75 65 29 5d 0d 0a 20 atory=$true)]..
3980: 20 20 20 5b 53 77 69 74 63 68 5d 24 52 65 70 6c [Switch]$Repl
3990: 61 63 65 0d 0a 2c 0d 0a 20 20 20 20 23 20 53 70 ace..,.. # Sp
39a0: 65 63 69 66 69 65 73 20 61 6e 20 58 50 61 74 68 ecifies an XPath
39b0: 20 66 6f 72 20 74 68 65 20 6e 6f 64 65 20 74 6f for the node to
39c0: 20 75 70 64 61 74 65 2e 20 54 68 69 73 20 63 6f update. This co
39d0: 75 6c 64 20 62 65 20 61 6e 20 65 6c 65 6d 65 6e uld be an elemen
39e0: 74 20 6e 6f 64 65 20 2a 6f 72 2a 20 61 6e 20 61 t node *or* an a
39f0: 74 74 72 69 62 75 74 65 20 6e 6f 64 65 20 28 72 ttribute node (r
3a00: 65 6d 65 6d 62 65 72 3a 20 2f 2f 65 6c 65 6d 65 emember: //eleme
3a10: 6e 74 2f 40 61 74 74 72 69 62 75 74 65 20 29 0d nt/@attribute ).
3a20: 0a 20 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 . [Parameter(
3a30: 50 6f 73 69 74 69 6f 6e 3d 31 2c 4d 61 6e 64 61 Position=1,Manda
3a40: 74 6f 72 79 3d 24 74 72 75 65 29 5d 0d 0a 20 20 tory=$true)]..
3a50: 20 20 5b 56 61 6c 69 64 61 74 65 4e 6f 74 4e 75 [ValidateNotNu
3a60: 6c 6c 4f 72 45 6d 70 74 79 28 29 5d 0d 0a 20 20 llOrEmpty()]..
3a70: 20 20 5b 53 74 72 69 6e 67 5b 5d 5d 24 58 50 61 [String[]]$XPa
3a80: 74 68 0d 0a 2c 0d 0a 20 20 20 20 23 20 54 68 65 th..,.. # The
3a90: 20 6e 65 77 20 76 61 6c 75 65 20 74 6f 20 70 6c new value to pl
3aa0: 61 63 65 20 69 6e 20 74 68 65 20 78 6d 6c 0d 0a ace in the xml..
3ab0: 20 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50 [Parameter(P
3ac0: 6f 73 69 74 69 6f 6e 3d 32 2c 4d 61 6e 64 61 74 osition=2,Mandat
3ad0: 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c 75 65 46 ory=$true,ValueF
3ae0: 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 66 61 6c romPipeline=$fal
3af0: 73 65 29 5d 0d 0a 20 20 20 20 5b 56 61 6c 69 64 se)].. [Valid
3b00: 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 45 6d 70 74 ateNotNullOrEmpt
3b10: 79 28 29 5d 0d 0a 20 20 20 20 5b 53 74 72 69 6e y()].. [Strin
3b20: 67 5d 24 56 61 6c 75 65 0d 0a 2c 0d 0a 20 20 20 g]$Value..,..
3b30: 20 23 20 53 70 65 63 69 66 69 65 73 20 6f 6e 65 # Specifies one
3b40: 20 6f 72 20 6d 6f 72 65 20 58 4d 4c 20 6e 6f 64 or more XML nod
3b50: 65 73 20 74 6f 20 73 65 61 72 63 68 2e 0d 0a 20 es to search...
3b60: 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50 6f [Parameter(Po
3b70: 73 69 74 69 6f 6e 3d 35 2c 4d 61 6e 64 61 74 6f sition=5,Mandato
3b80: 72 79 3d 24 74 72 75 65 2c 56 61 6c 75 65 46 72 ry=$true,ValueFr
3b90: 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 74 72 75 65 omPipeline=$true
3ba0: 2c 56 61 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69 ,ValueFromPipeli
3bb0: 6e 65 42 79 50 72 6f 70 65 72 74 79 4e 61 6d 65 neByPropertyName
3bc0: 3d 24 74 72 75 65 29 5d 0d 0a 20 20 20 20 5b 56 =$true)].. [V
3bd0: 61 6c 69 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 alidateNotNullOr
3be0: 45 6d 70 74 79 28 29 5d 0d 0a 20 20 20 20 5b 41 Empty()].. [A
3bf0: 6c 69 61 73 28 22 4e 6f 64 65 22 29 5d 0d 0a 20 lias("Node")]..
3c00: 20 20 20 5b 53 79 73 74 65 6d 2e 58 6d 6c 2e 58 [System.Xml.X
3c10: 6d 6c 4e 6f 64 65 5b 5d 5d 24 58 6d 6c 0d 0a 2c mlNode[]]$Xml..,
3c20: 20 20 20 0d 0a 20 20 20 20 23 20 53 70 65 63 69 .. # Speci
3c30: 66 69 65 73 20 61 20 68 61 73 68 20 74 61 62 6c fies a hash tabl
3c40: 65 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 70 61 e of the namespa
3c50: 63 65 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 ces used in the
3c60: 58 4d 4c 2e 20 55 73 65 20 74 68 65 20 66 6f 72 XML. Use the for
3c70: 6d 61 74 20 40 7b 3c 6e 61 6d 65 73 70 61 63 65 mat @{<namespace
3c80: 4e 61 6d 65 3e 20 3d 20 3c 6e 61 6d 65 73 70 61 Name> = <namespa
3c90: 63 65 55 72 69 3e 7d 2e 0d 0a 20 20 20 20 5b 50 ceUri>}... [P
3ca0: 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74 69 6f arameter(Positio
3cb0: 6e 3d 31 30 2c 4d 61 6e 64 61 74 6f 72 79 3d 24 n=10,Mandatory=$
3cc0: 66 61 6c 73 65 29 5d 0d 0a 20 20 20 20 5b 56 61 false)].. [Va
3cd0: 6c 69 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 45 lidateNotNullOrE
3ce0: 6d 70 74 79 28 29 5d 0d 0a 20 20 20 20 5b 41 6c mpty()].. [Al
3cf0: 69 61 73 28 22 4e 73 22 29 5d 0d 0a 20 20 20 20 ias("Ns")]..
3d00: 5b 48 61 73 68 74 61 62 6c 65 5d 24 4e 61 6d 65 [Hashtable]$Name
3d10: 73 70 61 63 65 0d 0a 2c 20 20 20 0d 0a 20 20 20 space.., ..
3d20: 20 23 20 4f 75 74 70 75 74 20 74 68 65 20 58 4d # Output the XM
3d30: 4c 20 64 6f 63 75 6d 65 6e 74 73 20 61 66 74 65 L documents afte
3d40: 72 20 61 64 64 69 6e 67 20 75 70 64 61 74 69 6e r adding updatin
3d50: 67 20 74 68 65 6d 0d 0a 20 20 20 20 5b 53 77 69 g them.. [Swi
3d60: 74 63 68 5d 24 50 61 73 73 74 68 72 75 0d 0a 29 tch]$Passthru..)
3d70: 0d 0a 70 72 6f 63 65 73 73 0d 0a 7b 0d 0a 20 20 ..process..{..
3d80: 20 20 66 6f 72 65 61 63 68 28 24 58 6d 6c 4e 6f foreach($XmlNo
3d90: 64 65 20 69 6e 20 24 58 6d 6c 29 20 7b 0d 0a 20 de in $Xml) {..
3da0: 20 20 20 20 20 20 20 24 73 65 6c 65 63 74 20 3d $select =
3db0: 20 40 7b 7d 0d 0a 20 20 20 20 20 20 20 20 24 73 @{}.. $s
3dc0: 65 6c 65 63 74 2e 58 6d 6c 20 3d 20 24 58 6d 6c elect.Xml = $Xml
3dd0: 4e 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 24 73 Node.. $s
3de0: 65 6c 65 63 74 2e 58 50 61 74 68 20 3d 20 24 58 elect.XPath = $X
3df0: 50 61 74 68 0d 0a 20 20 20 20 20 20 20 20 69 66 Path.. if
3e00: 28 24 4e 61 6d 65 73 70 61 63 65 29 20 7b 20 20 ($Namespace) {
3e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 73 .. $s
3e20: 65 6c 65 63 74 2e 4e 61 6d 65 73 70 61 63 65 20 elect.Namespace
3e30: 3d 20 24 4e 61 6d 65 73 70 61 63 65 0d 0a 20 20 = $Namespace..
3e40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
3e50: 20 24 64 6f 63 75 6d 65 6e 74 20 3d 0d 0a 20 20 $document =..
3e60: 20 20 20 20 20 20 20 20 20 20 69 66 28 24 58 6d if($Xm
3e70: 6c 4e 6f 64 65 20 2d 69 73 20 5b 53 79 73 74 65 lNode -is [Syste
3e80: 6d 2e 58 6d 6c 2e 58 6d 6c 44 6f 63 75 6d 65 6e m.Xml.XmlDocumen
3e90: 74 5d 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 t]) {..
3ea0: 20 20 20 20 20 20 20 24 58 6d 6c 4e 6f 64 65 0d $XmlNode.
3eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e
3ec0: 6c 73 65 20 7b 20 0d 0a 20 20 20 20 20 20 20 20 lse { ..
3ed0: 20 20 20 20 20 20 20 20 24 58 6d 6c 4e 6f 64 65 $XmlNode
3ee0: 2e 67 65 74 5f 4f 77 6e 65 72 44 6f 63 75 6d 65 .get_OwnerDocume
3ef0: 6e 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 nt()..
3f00: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 69 66 28 }.. if(
3f10: 24 78 56 61 6c 75 65 20 3d 20 24 56 61 6c 75 65 $xValue = $Value
3f20: 20 2d 61 73 20 5b 58 6d 6c 5d 29 20 7b 0d 0a 20 -as [Xml]) {..
3f30: 20 20 20 20 20 20 20 20 20 20 20 24 78 56 61 6c $xVal
3f40: 75 65 20 3d 20 24 64 6f 63 75 6d 65 6e 74 2e 49 ue = $document.I
3f50: 6d 70 6f 72 74 4e 6f 64 65 28 24 78 56 61 6c 75 mportNode($xValu
3f60: 65 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f e.SelectSingleNo
3f70: 64 65 28 22 2f 2a 22 29 2c 20 24 74 72 75 65 29 de("/*"), $true)
3f80: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }..
3f90: 20 20 20 20 20 24 6e 6f 64 65 73 20 3d 20 53 65 $nodes = Se
3fa0: 6c 65 63 74 2d 58 6d 6c 20 40 53 65 6c 65 63 74 lect-Xml @Select
3fb0: 20 7c 20 57 68 65 72 65 2d 4f 62 6a 65 63 74 20 | Where-Object
3fc0: 7b 20 24 5f 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 { $_ }....
3fd0: 20 20 69 66 28 40 28 24 6e 6f 64 65 73 29 2e 43 if(@($nodes).C
3fe0: 6f 75 6e 74 20 2d 65 71 20 30 29 20 7b 20 57 72 ount -eq 0) { Wr
3ff0: 69 74 65 2d 57 61 72 6e 69 6e 67 20 22 4e 6f 20 ite-Warning "No
4000: 6e 6f 64 65 73 20 6d 61 74 63 68 65 64 20 79 6f nodes matched yo
4010: 75 72 20 58 50 61 74 68 2c 20 6e 6f 74 68 69 6e ur XPath, nothin
4020: 67 20 77 69 6c 6c 20 62 65 20 75 70 64 61 74 65 g will be update
4030: 64 22 20 7d 0d 0a 20 20 20 20 20 20 20 20 0d 0a d" }.. ..
4040: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 28 foreach(
4050: 24 6e 6f 64 65 20 69 6e 20 24 6e 6f 64 65 73 29 $node in $nodes)
4060: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
4070: 24 73 65 6c 65 63 74 2e 58 50 61 74 68 20 3d 20 $select.XPath =
4080: 22 24 58 50 61 74 68 2f 70 61 72 65 6e 74 3a 3a "$XPath/parent::
4090: 2a 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 *"..
40a0: 24 70 61 72 65 6e 74 20 3d 20 53 65 6c 65 63 74 $parent = Select
40b0: 2d 58 6d 6c 20 40 53 65 6c 65 63 74 0d 0a 20 20 -Xml @Select..
40c0: 20 20 20 20 20 20 20 20 20 20 69 66 28 21 24 78 if(!$x
40d0: 56 61 6c 75 65 29 20 7b 0d 0a 20 20 20 20 20 20 Value) {..
40e0: 20 20 20 20 20 20 20 20 20 20 69 66 28 24 6e 6f if($no
40f0: 64 65 20 2d 69 73 20 5b 53 79 73 74 65 6d 2e 58 de -is [System.X
4100: 6d 6c 2e 58 6d 6c 41 74 74 72 69 62 75 74 65 5d ml.XmlAttribute]
4110: 20 2d 61 6e 64 20 24 56 61 6c 75 65 2e 43 6f 6e -and $Value.Con
4120: 74 61 69 6e 73 28 22 3d 22 29 29 20 7b 0d 0a 20 tains("=")) {..
4130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4140: 20 20 20 24 61 4e 61 6d 65 2c 20 24 61 56 61 6c $aName, $aVal
4150: 75 65 20 3d 20 24 56 61 6c 75 65 2e 53 70 6c 69 ue = $Value.Spli
4160: 74 28 22 3d 22 2c 32 29 0d 0a 20 20 20 20 20 20 t("=",2)..
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
4180: 28 24 61 4e 61 6d 65 2e 43 6f 6e 74 61 69 6e 73 ($aName.Contains
4190: 28 22 3a 22 29 29 7b 0d 0a 20 20 20 20 20 20 20 (":")){..
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
41b0: 20 24 6e 73 2c 24 6e 61 6d 65 20 3d 20 24 61 4e $ns,$name = $aN
41c0: 61 6d 65 2e 53 70 6c 69 74 28 22 3a 22 2c 32 29 ame.Split(":",2)
41d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
41e0: 20 20 20 20 20 20 20 20 20 20 24 78 56 61 6c 75 $xValu
41f0: 65 20 3d 20 24 64 6f 63 75 6d 65 6e 74 2e 43 72 e = $document.Cr
4200: 65 61 74 65 41 74 74 72 69 62 75 74 65 28 20 24 eateAttribute( $
4210: 6e 61 6d 65 2c 20 24 4e 61 6d 65 73 70 61 63 65 name, $Namespace
4220: 5b 24 6e 73 5d 20 29 0d 0a 20 20 20 20 20 20 20 [$ns] )..
4230: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 } e
4240: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {..
4250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 $
4260: 78 56 61 6c 75 65 20 3d 20 24 64 6f 63 75 6d 65 xValue = $docume
4270: 6e 74 2e 43 72 65 61 74 65 41 74 74 72 69 62 75 nt.CreateAttribu
4280: 74 65 28 20 24 61 4e 61 6d 65 20 29 0d 0a 20 20 te( $aName )..
4290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
42a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
42b0: 20 20 20 20 20 20 20 20 20 24 78 56 61 6c 75 65 $xValue
42c0: 2e 56 61 6c 75 65 20 3d 20 24 61 56 61 6c 75 65 .Value = $aValue
42d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
42e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
42f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
4300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 77 .. sw
4310: 69 74 63 68 28 24 50 53 43 6d 64 6c 65 74 2e 50 itch($PSCmdlet.P
4320: 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 29 arameterSetName)
4330: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
4340: 20 20 20 20 22 42 65 66 6f 72 65 22 20 7b 0d 0a "Before" {..
4350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4360: 20 20 20 20 24 6e 75 6c 6c 20 3d 20 24 70 61 72 $null = $par
4370: 65 6e 74 2e 49 6e 73 65 72 74 42 65 66 6f 72 65 ent.InsertBefore
4380: 28 20 24 78 56 61 6c 75 65 2c 20 24 6e 6f 64 65 ( $xValue, $node
4390: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 )..
43a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
43b0: 20 20 20 20 20 20 20 22 41 66 74 65 72 22 20 7b "After" {
43c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
43d0: 20 20 20 20 20 20 24 6e 75 6c 6c 20 3d 20 24 70 $null = $p
43e0: 61 72 65 6e 74 2e 49 6e 73 65 72 74 41 66 74 65 arent.InsertAfte
43f0: 72 28 20 24 78 56 61 6c 75 65 2c 20 24 6e 6f 64 r( $xValue, $nod
4400: 65 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e )..
4410: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
4420: 20 20 20 20 20 20 20 20 22 41 70 70 65 6e 64 22 "Append"
4430: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
4440: 20 20 20 20 20 20 20 20 24 6e 75 6c 6c 20 3d 20 $null =
4450: 24 70 61 72 65 6e 74 2e 41 70 70 65 6e 64 43 68 $parent.AppendCh
4460: 69 6c 64 28 20 24 78 56 61 6c 75 65 20 29 0d 0a ild( $xValue )..
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4480: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
4490: 20 20 20 22 52 65 6d 6f 76 65 22 20 7b 0d 0a 20 "Remove" {..
44a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
44b0: 20 20 20 24 6e 75 6c 6c 20 3d 20 24 70 61 72 65 $null = $pare
44c0: 6e 74 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 20 nt.RemoveChild(
44d0: 24 6e 6f 64 65 20 29 0d 0a 20 20 20 20 20 20 20 $node )..
44e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 22 52 65 70 "Rep
4500: 6c 61 63 65 22 20 7b 0d 0a 20 20 20 20 20 20 20 lace" {..
4510: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 if(
4520: 21 24 78 56 61 6c 75 65 29 20 7b 0d 0a 20 20 20 !$xValue) {..
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4540: 20 20 20 20 20 24 78 56 61 6c 75 65 20 3d 20 24 $xValue = $
4550: 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 54 document.CreateT
4560: 65 78 74 4e 6f 64 65 28 20 24 56 61 6c 75 65 20 extNode( $Value
4570: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
4580: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
4590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6e $n
45a0: 75 6c 6c 20 3d 20 24 70 61 72 65 6e 74 2e 52 65 ull = $parent.Re
45b0: 70 6c 61 63 65 43 68 69 6c 64 28 20 24 78 56 61 placeChild( $xVa
45c0: 6c 75 65 2c 20 24 6e 6f 64 65 20 29 0d 0a 20 20 lue, $node )..
45d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
45e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
45f0: 20 22 53 65 74 22 20 7b 0d 0a 20 20 20 20 20 20 "Set" {..
4600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
4610: 28 21 24 78 56 61 6c 75 65 20 2d 61 6e 64 20 24 (!$xValue -and $
4620: 6e 6f 64 65 2e 22 23 74 65 78 74 22 29 20 7b 0d node."#text") {.
4630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4640: 20 20 20 20 20 20 20 20 20 24 6e 6f 64 65 2e 22 $node."
4650: 23 74 65 78 74 22 20 3d 20 24 56 61 6c 75 65 0d #text" = $Value.
4660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4670: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {..
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4690: 20 20 20 20 20 20 20 69 66 28 24 6e 6f 64 65 20 if($node
46a0: 2d 69 73 20 5b 53 79 73 74 65 6d 2e 58 6d 6c 2e -is [System.Xml.
46b0: 58 6d 6c 45 6c 65 6d 65 6e 74 5d 29 20 7b 0d 0a XmlElement]) {..
46c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
46d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 21 if(!
46e0: 24 78 56 61 6c 75 65 29 20 7b 0d 0a 20 20 20 20 $xValue) {..
46f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4700: 20 20 20 20 20 20 20 20 20 20 20 20 24 78 56 61 $xVa
4710: 6c 75 65 20 3d 20 24 64 6f 63 75 6d 65 6e 74 2e lue = $document.
4720: 43 72 65 61 74 65 54 65 78 74 4e 6f 64 65 28 20 CreateTextNode(
4730: 24 56 61 6c 75 65 20 29 0d 0a 20 20 20 20 20 20 $Value )..
4740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4750: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
4760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4770: 20 20 20 20 20 24 6e 75 6c 6c 20 3d 20 24 6e 6f $null = $no
4780: 64 65 2e 73 65 74 5f 69 6e 6e 65 72 58 6d 6c 28 de.set_innerXml(
4790: 22 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 "")..
47a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
47b0: 20 24 6e 75 6c 6c 20 3d 20 24 6e 6f 64 65 2e 41 $null = $node.A
47c0: 70 70 65 6e 64 43 68 69 6c 64 28 24 78 56 61 6c ppendChild($xVal
47d0: 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ue)..
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4800: 20 20 20 20 20 20 20 20 65 6c 73 65 69 66 28 24 elseif($
4810: 6e 6f 64 65 20 2d 69 73 20 5b 53 79 73 74 65 6d node -is [System
4820: 2e 58 6d 6c 2e 58 6d 6c 41 74 74 72 69 62 75 74 .Xml.XmlAttribut
4830: 65 5d 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 e]) {..
4840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4850: 20 20 20 24 6e 6f 64 65 2e 56 61 6c 75 65 20 3d $node.Value =
4860: 20 24 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 $Value..
4870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4880: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {..
4890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
48a0: 20 20 20 20 20 20 20 57 72 69 74 65 2d 57 61 72 Write-War
48b0: 6e 69 6e 67 20 22 24 58 50 61 74 68 20 73 65 6c ning "$XPath sel
48c0: 65 63 74 73 20 61 20 6e 6f 64 65 20 6f 66 20 74 ects a node of t
48d0: 79 70 65 20 24 28 24 6e 6f 64 65 2e 47 65 74 54 ype $($node.GetT
48e0: 79 70 65 28 29 29 2c 20 77 68 69 63 68 20 77 65 ype()), which we
48f0: 20 68 61 76 65 6e 27 74 20 68 61 6e 64 6c 65 64 haven't handled
4900: 2e 20 50 6c 65 61 73 65 20 61 64 64 20 74 68 61 . Please add tha
4910: 74 20 68 61 6e 64 6c 65 72 21 22 0d 0a 20 20 20 t handler!"..
4920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4930: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
4940: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
4950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
4960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
4970: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }..
4980: 20 20 20 20 69 66 28 24 50 61 73 73 74 68 72 75 if($Passthru
4990: 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ) {..
49a0: 20 57 72 69 74 65 2d 4f 75 74 70 75 74 20 24 58 Write-Output $X
49b0: 6d 6c 4e 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 mlNode..
49c0: 7d 0d 0a 20 20 20 20 7d 0d 0a 7d 7d 0d 0a 53 65 }.. }..}}..Se
49d0: 74 2d 41 6c 69 61 73 20 75 78 6d 6c 20 55 70 64 t-Alias uxml Upd
49e0: 61 74 65 2d 58 6d 6c 20 2d 45 41 20 30 0d 0a 53 ate-Xml -EA 0..S
49f0: 65 74 2d 41 6c 69 61 73 20 75 78 20 55 70 64 61 et-Alias ux Upda
4a00: 74 65 2d 58 6d 6c 20 2d 45 41 20 30 0d 0a 0d 0a te-Xml -EA 0....
4a10: 66 75 6e 63 74 69 6f 6e 20 43 6f 6e 76 65 72 74 function Convert
4a20: 2d 4e 6f 64 65 20 7b 0d 0a 23 2e 53 79 6e 6f 70 -Node {..#.Synop
4a30: 73 69 73 20 0d 0a 23 20 43 6f 6e 76 65 72 74 20 sis ..# Convert
4a40: 61 20 73 69 6e 67 6c 65 20 58 4d 4c 20 4e 6f 64 a single XML Nod
4a50: 65 20 76 69 61 20 58 53 4c 20 73 74 79 6c 65 73 e via XSL styles
4a60: 68 65 65 74 73 0d 0a 5b 43 6d 64 6c 65 74 42 69 heets..[CmdletBi
4a70: 6e 64 69 6e 67 28 44 65 66 61 75 6c 74 50 61 72 nding(DefaultPar
4a80: 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 52 ameterSetName="R
4a90: 65 61 64 65 72 22 29 5d 0d 0a 70 61 72 61 6d 28 eader")]..param(
4aa0: 0d 0a 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 .. [Parameter(
4ab0: 50 61 72 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 ParameterSetName
4ac0: 3d 22 42 79 4e 6f 64 65 22 2c 4d 61 6e 64 61 74 ="ByNode",Mandat
4ad0: 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c 75 65 46 ory=$true,ValueF
4ae0: 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 74 72 75 romPipeline=$tru
4af0: 65 29 5d 0d 0a 20 20 20 5b 53 79 73 74 65 6d 2e e)].. [System.
4b00: 58 6d 6c 2e 58 6d 6c 4e 6f 64 65 5d 24 4e 6f 64 Xml.XmlNode]$Nod
4b10: 65 0d 0a 2c 0d 0a 20 20 20 5b 50 61 72 61 6d 65 e..,.. [Parame
4b20: 74 65 72 28 50 61 72 61 6d 65 74 65 72 53 65 74 ter(ParameterSet
4b30: 4e 61 6d 65 3d 22 52 65 61 64 65 72 22 2c 4d 61 Name="Reader",Ma
4b40: 6e 64 61 74 6f 72 79 3d 24 74 72 75 65 2c 56 61 ndatory=$true,Va
4b50: 6c 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d lueFromPipeline=
4b60: 24 74 72 75 65 29 5d 0d 0a 20 20 20 5b 53 79 73 $true)].. [Sys
4b70: 74 65 6d 2e 58 6d 6c 2e 58 6d 6c 52 65 61 64 65 tem.Xml.XmlReade
4b80: 72 5d 24 58 6d 6c 52 65 61 64 65 72 0d 0a 2c 0d r]$XmlReader..,.
4b90: 0a 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 50 . [Parameter(P
4ba0: 6f 73 69 74 69 6f 6e 3d 31 2c 4d 61 6e 64 61 74 osition=1,Mandat
4bb0: 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c 75 65 46 ory=$true,ValueF
4bc0: 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 66 61 6c romPipeline=$fal
4bd0: 73 65 29 5d 0d 0a 20 20 20 5b 53 79 73 74 65 6d se)].. [System
4be0: 2e 58 6d 6c 2e 58 73 6c 2e 58 73 6c 43 6f 6d 70 .Xml.Xsl.XslComp
4bf0: 69 6c 65 64 54 72 61 6e 73 66 6f 72 6d 5d 24 53 iledTransform]$S
4c00: 74 79 6c 65 53 68 65 65 74 0d 0a 2c 0d 0a 20 20 tyleSheet..,..
4c10: 20 5b 50 61 72 61 6d 65 74 65 72 28 50 6f 73 69 [Parameter(Posi
4c20: 74 69 6f 6e 3d 32 2c 4d 61 6e 64 61 74 6f 72 79 tion=2,Mandatory
4c30: 3d 24 66 61 6c 73 65 29 5d 0d 0a 20 20 20 5b 41 =$false)].. [A
4c40: 6c 69 61 73 28 22 50 61 72 61 6d 65 74 65 72 73 lias("Parameters
4c50: 22 29 5d 0d 0a 20 20 20 5b 68 61 73 68 74 61 62 ")].. [hashtab
4c60: 6c 65 5d 24 41 72 67 75 6d 65 6e 74 73 0d 0a 29 le]$Arguments..)
4c70: 0d 0a 50 52 4f 43 45 53 53 20 7b 0d 0a 20 20 20 ..PROCESS {..
4c80: 69 66 28 24 50 53 43 6d 64 6c 65 74 2e 50 61 72 if($PSCmdlet.Par
4c90: 61 6d 65 74 65 72 53 65 74 4e 61 6d 65 20 2d 65 ameterSetName -e
4ca0: 71 20 22 42 79 4e 6f 64 65 22 29 20 7b 0d 0a 20 q "ByNode") {..
4cb0: 20 20 20 20 20 24 58 6d 6c 52 65 61 64 65 72 20 $XmlReader
4cc0: 3d 20 4e 65 77 2d 4f 62 6a 65 63 74 20 58 6d 6c = New-Object Xml
4cd0: 2e 58 6d 6c 4e 6f 64 65 52 65 61 64 65 72 20 24 .XmlNodeReader $
4ce0: 6e 6f 64 65 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 node.. }....
4cf0: 20 24 6f 75 74 70 75 74 20 3d 20 4e 65 77 2d 4f $output = New-O
4d00: 62 6a 65 63 74 20 49 4f 2e 53 74 72 69 6e 67 57 bject IO.StringW
4d10: 72 69 74 65 72 0d 0a 20 20 20 24 61 72 67 4c 69 riter.. $argLi
4d20: 73 74 20 3d 20 24 6e 75 6c 6c 0d 0a 20 20 20 0d st = $null.. .
4d30: 0a 20 20 20 69 66 28 24 41 72 67 75 6d 65 6e 74 . if($Argument
4d40: 73 29 20 7b 0d 0a 20 20 20 20 20 20 24 61 72 67 s) {.. $arg
4d50: 4c 69 73 74 20 3d 20 4e 65 77 2d 4f 62 6a 65 63 List = New-Objec
4d60: 74 20 53 79 73 74 65 6d 2e 58 6d 6c 2e 58 73 6c t System.Xml.Xsl
4d70: 2e 58 73 6c 74 41 72 67 75 6d 65 6e 74 4c 69 73 .XsltArgumentLis
4d80: 74 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 t.. foreach
4d90: 28 24 61 72 67 20 69 6e 20 24 41 72 67 75 6d 65 ($arg in $Argume
4da0: 6e 74 73 2e 47 65 74 45 6e 75 6d 65 72 61 74 6f nts.GetEnumerato
4db0: 72 28 29 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 r()) {..
4dc0: 20 24 6e 61 6d 65 73 70 61 63 65 2c 20 24 6e 61 $namespace, $na
4dd0: 6d 65 20 3d 20 24 61 72 67 2e 4b 65 79 20 2d 73 me = $arg.Key -s
4de0: 70 6c 69 74 20 22 3a 22 0d 0a 20 20 20 20 20 20 plit ":"..
4df0: 20 20 20 23 23 20 46 69 78 20 6e 61 6d 65 73 70 ## Fix namesp
4e00: 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 69 66 ace.. if
4e10: 28 21 24 6e 61 6d 65 29 20 7b 20 0d 0a 20 20 20 (!$name) { ..
4e20: 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65 20 3d $name =
4e30: 20 24 4e 61 6d 65 73 70 61 63 65 0d 0a 20 20 20 $Namespace..
4e40: 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65 73 70 $namesp
4e50: 61 63 65 20 3d 20 22 22 0d 0a 20 20 20 20 20 20 ace = ""..
4e60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 0d }.. .
4e70: 0a 20 20 20 20 20 20 20 20 20 57 72 69 74 65 2d . Write-
4e80: 56 65 72 62 6f 73 65 20 22 6e 73 3a 24 6e 61 6d Verbose "ns:$nam
4e90: 65 73 70 61 63 65 20 6e 61 6d 65 3a 24 6e 61 6d espace name:$nam
4ea0: 65 20 76 61 6c 75 65 3a 24 28 24 61 72 67 2e 56 e value:$($arg.V
4eb0: 61 6c 75 65 29 22 0d 0a 20 20 20 20 20 20 20 20 alue)"..
4ec0: 20 24 61 72 67 4c 69 73 74 2e 41 64 64 50 61 72 $argList.AddPar
4ed0: 61 6d 28 24 6e 61 6d 65 2c 22 24 6e 61 6d 65 73 am($name,"$names
4ee0: 70 61 63 65 22 2c 24 61 72 67 2e 56 61 6c 75 65 pace",$arg.Value
4ef0: 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 7d ).. }.. }
4f00: 0d 0a 20 20 20 0d 0a 20 20 20 24 53 74 79 6c 65 .. .. $Style
4f10: 53 68 65 65 74 2e 54 72 61 6e 73 66 6f 72 6d 28 Sheet.Transform(
4f20: 20 24 58 6d 6c 52 65 61 64 65 72 2c 20 24 61 72 $XmlReader, $ar
4f30: 67 4c 69 73 74 2c 20 24 6f 75 74 70 75 74 20 29 gList, $output )
4f40: 0d 0a 20 20 20 57 72 69 74 65 2d 4f 75 74 70 75 .. Write-Outpu
4f50: 74 20 24 6f 75 74 70 75 74 2e 54 6f 53 74 72 69 t $output.ToStri
4f60: 6e 67 28 29 0d 0a 7d 0d 0a 7d 0d 0a 0d 0a 66 75 ng()..}..}....fu
4f70: 6e 63 74 69 6f 6e 20 43 6f 6e 76 65 72 74 2d 58 nction Convert-X
4f80: 6d 6c 20 7b 0d 0a 23 2e 53 79 6e 6f 70 73 69 73 ml {..#.Synopsis
4f90: 0d 0a 23 20 20 20 54 68 65 20 43 6f 6e 76 65 72 ..# The Conver
4fa0: 74 2d 58 4d 4c 20 66 75 6e 63 74 69 6f 6e 20 6c t-XML function l
4fb0: 65 74 73 20 79 6f 75 20 75 73 65 20 58 73 6c 74 ets you use Xslt
4fc0: 20 74 6f 20 74 72 61 6e 73 66 6f 72 6d 20 58 4d to transform XM
4fd0: 4c 20 73 74 72 69 6e 67 73 20 61 6e 64 20 64 6f L strings and do
4fe0: 63 75 6d 65 6e 74 73 2e 0d 0a 23 2e 44 65 73 63 cuments...#.Desc
4ff0: 72 69 70 74 69 6f 6e 0d 0a 23 20 20 20 44 6f 63 ription..# Doc
5000: 75 6d 65 6e 74 61 74 69 6f 6e 20 54 4f 44 4f 0d umentation TODO.
5010: 0a 5b 43 6d 64 6c 65 74 42 69 6e 64 69 6e 67 28 .[CmdletBinding(
5020: 44 65 66 61 75 6c 74 50 61 72 61 6d 65 74 65 72 DefaultParameter
5030: 53 65 74 4e 61 6d 65 3d 22 58 6d 6c 22 29 5d 0d SetName="Xml")].
5040: 0a 70 61 72 61 6d 28 0d 0a 20 20 20 20 23 20 53 .param(.. # S
5050: 70 65 63 69 66 69 65 73 20 6f 6e 65 20 6f 72 20 pecifies one or
5060: 6d 6f 72 65 20 58 4d 4c 20 6e 6f 64 65 73 20 74 more XML nodes t
5070: 6f 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 o process...
5080: 5b 50 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74 [Parameter(Posit
5090: 69 6f 6e 3d 31 2c 50 61 72 61 6d 65 74 65 72 53 ion=1,ParameterS
50a0: 65 74 4e 61 6d 65 3d 22 58 6d 6c 22 2c 4d 61 6e etName="Xml",Man
50b0: 64 61 74 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c datory=$true,Val
50c0: 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 ueFromPipeline=$
50d0: 74 72 75 65 2c 56 61 6c 75 65 46 72 6f 6d 50 69 true,ValueFromPi
50e0: 70 65 6c 69 6e 65 42 79 50 72 6f 70 65 72 74 79 pelineByProperty
50f0: 4e 61 6d 65 3d 24 74 72 75 65 29 5d 0d 0a 20 20 Name=$true)]..
5100: 20 20 5b 56 61 6c 69 64 61 74 65 4e 6f 74 4e 75 [ValidateNotNu
5110: 6c 6c 4f 72 45 6d 70 74 79 28 29 5d 0d 0a 20 20 llOrEmpty()]..
5120: 20 20 5b 41 6c 69 61 73 28 22 4e 6f 64 65 22 29 [Alias("Node")
5130: 5d 0d 0a 20 20 20 20 5b 53 79 73 74 65 6d 2e 58 ].. [System.X
5140: 6d 6c 2e 58 6d 6c 4e 6f 64 65 5b 5d 5d 24 58 6d ml.XmlNode[]]$Xm
5150: 6c 0d 0a 2c 20 20 20 0d 0a 20 20 20 20 23 20 53 l.., .. # S
5160: 70 65 63 69 66 69 65 73 20 61 6e 20 58 6d 6c 20 pecifies an Xml
5170: 53 74 79 6c 65 53 68 65 65 74 20 74 6f 20 74 72 StyleSheet to tr
5180: 61 6e 73 66 6f 72 6d 20 77 69 74 68 2e 2e 2e 0d ansform with....
5190: 0a 20 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 . [Parameter(
51a0: 50 6f 73 69 74 69 6f 6e 3d 30 2c 4d 61 6e 64 61 Position=0,Manda
51b0: 74 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c 75 65 tory=$true,Value
51c0: 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 66 61 FromPipeline=$fa
51d0: 6c 73 65 29 5d 0d 0a 20 20 20 20 5b 56 61 6c 69 lse)].. [Vali
51e0: 64 61 74 65 4e 6f 74 4e 75 6c 6c 4f 72 45 6d 70 dateNotNullOrEmp
51f0: 74 79 28 29 5d 0d 0a 20 20 20 20 5b 41 6c 69 61 ty()].. [Alia
5200: 73 28 22 53 74 79 6c 65 53 68 65 65 74 22 29 5d s("StyleSheet")]
5210: 0d 0a 20 20 20 20 5b 53 74 72 69 6e 67 5d 24 58 .. [String]$X
5220: 73 6c 74 0d 0a 2c 0d 0a 20 20 20 20 23 20 53 70 slt..,.. # Sp
5230: 65 63 69 66 79 20 61 72 67 75 6d 65 6e 74 73 20 ecify arguments
5240: 74 6f 20 74 68 65 20 58 53 4c 20 54 72 61 6e 73 to the XSL Trans
5250: 66 6f 72 6d 61 74 69 6f 6e 0d 0a 20 20 20 20 5b formation.. [
5260: 41 6c 69 61 73 28 22 50 61 72 61 6d 65 74 65 72 Alias("Parameter
5270: 73 22 29 5d 0d 0a 20 20 20 20 5b 68 61 73 68 74 s")].. [hasht
5280: 61 62 6c 65 5d 24 41 72 67 75 6d 65 6e 74 73 0d able]$Arguments.
5290: 0a 29 0d 0a 62 65 67 69 6e 20 7b 20 0d 0a 20 20 .)..begin { ..
52a0: 20 24 53 74 79 6c 65 53 68 65 65 74 20 3d 20 4e $StyleSheet = N
52b0: 65 77 2d 4f 62 6a 65 63 74 20 53 79 73 74 65 6d ew-Object System
52c0: 2e 58 6d 6c 2e 58 73 6c 2e 58 73 6c 43 6f 6d 70 .Xml.Xsl.XslComp
52d0: 69 6c 65 64 54 72 61 6e 73 66 6f 72 6d 0d 0a 20 iledTransform..
52e0: 20 20 69 66 28 54 65 73 74 2d 50 61 74 68 20 24 if(Test-Path $
52f0: 58 73 6c 74 20 2d 45 41 20 30 29 20 7b 20 0d 0a Xslt -EA 0) { ..
5300: 20 20 20 20 20 20 57 72 69 74 65 2d 56 65 72 62 Write-Verb
5310: 6f 73 65 20 22 4c 6f 61 64 69 6e 67 20 53 74 79 ose "Loading Sty
5320: 6c 65 73 68 65 65 74 20 66 72 6f 6d 20 24 28 52 lesheet from $(R
5330: 65 73 6f 6c 76 65 2d 50 61 74 68 20 24 58 73 6c esolve-Path $Xsl
5340: 74 29 22 0d 0a 20 20 20 20 20 20 24 53 74 79 6c t)".. $Styl
5350: 65 53 68 65 65 74 2e 4c 6f 61 64 28 20 28 52 65 eSheet.Load( (Re
5360: 73 6f 6c 76 65 2d 50 61 74 68 20 24 58 73 6c 74 solve-Path $Xslt
5370: 29 20 29 0d 0a 20 20 20 7d 20 65 6c 73 65 20 7b ) ).. } else {
5380: 0d 0a 20 20 20 20 20 20 24 4f 46 53 20 3d 20 22 .. $OFS = "
5390: 60 6e 22 0d 0a 20 20 20 20 20 20 57 72 69 74 65 `n".. Write
53a0: 2d 56 65 72 62 6f 73 65 20 22 24 58 73 6c 74 22 -Verbose "$Xslt"
53b0: 0d 0a 20 20 20 20 20 20 24 53 74 79 6c 65 53 68 .. $StyleSh
53c0: 65 65 74 2e 4c 6f 61 64 28 28 5b 53 79 73 74 65 eet.Load(([Syste
53d0: 6d 2e 58 6d 6c 2e 58 6d 6c 52 65 61 64 65 72 5d m.Xml.XmlReader]
53e0: 3a 3a 43 72 65 61 74 65 28 28 4e 65 77 2d 4f 62 ::Create((New-Ob
53f0: 6a 65 63 74 20 53 79 73 74 65 6d 2e 49 4f 2e 53 ject System.IO.S
5400: 74 72 69 6e 67 52 65 61 64 65 72 20 24 58 73 6c tringReader $Xsl
5410: 74 29 29 29 29 0d 0a 20 20 20 7d 0d 0a 7d 0d 0a t)))).. }..}..
5420: 70 72 6f 63 65 73 73 20 7b 0d 0a 20 20 20 66 6f process {.. fo
5430: 72 65 61 63 68 28 24 6e 6f 64 65 20 69 6e 20 24 reach($node in $
5440: 58 6d 6c 29 20 7b 0d 0a 20 20 20 20 20 20 43 6f Xml) {.. Co
5450: 6e 76 65 72 74 2d 4e 6f 64 65 20 2d 58 6d 6c 20 nvert-Node -Xml
5460: 28 4e 65 77 2d 4f 62 6a 65 63 74 20 58 6d 6c 2e (New-Object Xml.
5470: 58 6d 6c 4e 6f 64 65 52 65 61 64 65 72 20 24 6e XmlNodeReader $n
5480: 6f 64 65 29 20 24 53 74 79 6c 65 53 68 65 65 74 ode) $StyleSheet
5490: 20 24 41 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 $Arguments..
54a0: 7d 0d 0a 7d 0d 0a 7d 0d 0a 53 65 74 2d 41 6c 69 }..}..}..Set-Ali
54b0: 61 73 20 63 76 78 6d 6c 20 43 6f 6e 76 65 72 74 as cvxml Convert
54c0: 2d 58 6d 6c 20 2d 45 41 20 30 0d 0a 0d 0a 66 75 -Xml -EA 0....fu
54d0: 6e 63 74 69 6f 6e 20 52 65 6d 6f 76 65 2d 58 6d nction Remove-Xm
54e0: 6c 4e 61 6d 65 73 70 61 63 65 20 7b 0d 0a 23 2e lNamespace {..#.
54f0: 53 79 6e 6f 70 73 69 73 0d 0a 23 20 20 52 65 6d Synopsis..# Rem
5500: 6f 76 65 73 20 6e 61 6d 65 73 70 61 63 65 20 64 oves namespace d
5510: 65 66 69 6e 69 74 69 6f 6e 73 20 61 6e 64 20 70 efinitions and p
5520: 72 65 66 69 78 65 73 20 66 72 6f 6d 20 78 6d 6c refixes from xml
5530: 20 64 6f 63 75 6d 65 6e 74 73 0d 0a 23 2e 44 65 documents..#.De
5540: 73 63 72 69 70 74 69 6f 6e 0d 0a 23 20 20 52 75 scription..# Ru
5550: 6e 73 20 61 6e 20 78 6d 6c 20 64 6f 63 75 6d 65 ns an xml docume
5560: 6e 74 20 74 68 72 6f 75 67 68 20 61 6e 20 58 53 nt through an XS
5570: 4c 20 54 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e L Transformation
5580: 20 74 6f 20 72 65 6d 6f 76 65 20 6e 61 6d 65 73 to remove names
5590: 70 61 63 65 73 20 66 72 6f 6d 20 69 74 20 69 66 paces from it if
55a0: 20 74 68 65 79 20 65 78 69 73 74 2e 0d 0a 23 20 they exist...#
55b0: 20 45 6e 74 69 74 69 65 73 20 61 72 65 20 61 6c Entities are al
55c0: 73 6f 20 6e 61 74 75 72 61 6c 6c 79 20 65 78 70 so naturally exp
55d0: 61 6e 64 65 64 0d 0a 23 2e 50 61 72 61 6d 65 74 anded..#.Paramet
55e0: 65 72 20 43 6f 6e 74 65 6e 74 0d 0a 23 20 20 53 er Content..# S
55f0: 70 65 63 69 66 69 65 73 20 61 20 73 74 72 69 6e pecifies a strin
5600: 67 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 g that contains
5610: 74 68 65 20 58 4d 4c 20 74 6f 20 74 72 61 6e 73 the XML to trans
5620: 66 6f 72 6d 2e 0d 0a 23 2e 50 61 72 61 6d 65 74 form...#.Paramet
5630: 65 72 20 50 61 74 68 0d 0a 23 20 20 53 70 65 63 er Path..# Spec
5640: 69 66 69 65 73 20 74 68 65 20 70 61 74 68 20 61 ifies the path a
5650: 6e 64 20 66 69 6c 65 20 6e 61 6d 65 73 20 6f 66 nd file names of
5660: 20 74 68 65 20 58 4d 4c 20 66 69 6c 65 73 20 74 the XML files t
5670: 6f 20 74 72 61 6e 73 66 6f 72 6d 2e 20 57 69 6c o transform. Wil
5680: 64 63 61 72 64 73 20 61 72 65 20 70 65 72 6d 69 dcards are permi
5690: 74 74 65 64 2e 0d 0a 23 0d 0a 23 20 20 54 68 65 tted...#..# The
56a0: 72 65 20 77 69 6c 6c 20 62 6e 65 20 6f 6e 65 20 re will bne one
56b0: 6f 75 74 70 75 74 20 64 6f 63 75 6d 65 6e 74 20 output document
56c0: 66 6f 72 20 65 61 63 68 20 6d 61 74 63 68 69 6e for each matchin
56d0: 67 20 69 6e 70 75 74 20 66 69 6c 65 2e 0d 0a 23 g input file...#
56e0: 2e 50 61 72 61 6d 65 74 65 72 20 58 6d 6c 0d 0a .Parameter Xml..
56f0: 23 20 20 53 70 65 63 69 66 69 65 73 20 6f 6e 65 # Specifies one
5700: 20 6f 72 20 6d 6f 72 65 20 58 4d 4c 20 64 6f 63 or more XML doc
5710: 75 6d 65 6e 74 73 20 74 6f 20 74 72 61 6e 73 66 uments to transf
5720: 6f 72 6d 0d 0a 5b 43 6d 64 6c 65 74 42 69 6e 64 orm..[CmdletBind
5730: 69 6e 67 28 44 65 66 61 75 6c 74 50 61 72 61 6d ing(DefaultParam
5740: 65 74 65 72 53 65 74 4e 61 6d 65 3d 22 58 6d 6c eterSetName="Xml
5750: 22 29 5d 0d 0a 50 41 52 41 4d 28 0d 0a 20 20 20 ")]..PARAM(..
5760: 5b 50 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74 [Parameter(Posit
5770: 69 6f 6e 3d 31 2c 50 61 72 61 6d 65 74 65 72 53 ion=1,ParameterS
5780: 65 74 4e 61 6d 65 3d 22 58 6d 6c 22 2c 4d 61 6e etName="Xml",Man
5790: 64 61 74 6f 72 79 3d 24 74 72 75 65 2c 56 61 6c datory=$true,Val
57a0: 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24 ueFromPipeline=$
57b0: 74 72 75 65 2c 56 61 6c 75 65 46 72 6f 6d 50 69 true,ValueFromPi
57c0: 70 65 6c 69 6e 65 42 79 50 72 6f 70 65 72 74 79 pelineByProperty
57d0: 4e 61 6d 65 3d 24 74 72 75 65 29 5d 0d 0a 20 20 Name=$true)]..
57e0: 20 5b 56 61 6c 69 64 61 74 65 4e 6f 74 4e 75 6c [ValidateNotNul
57f0: 6c 4f 72 45 6d 70 74 79 28 29 5d 0d 0a 20 20 20 lOrEmpty()]..
5800: 5b 41 6c 69 61 73 28 22 4e 6f 64 65 22 29 5d 0d [Alias("Node")].
5810: 0a 20 20 20 5b 53 79 73 74 65 6d 2e 58 6d 6c 2e . [System.Xml.
5820: 58 6d 6c 4e 6f 64 65 5b 5d 5d 24 58 6d 6c 0d 0a XmlNode[]]$Xml..
5830: 29 0d 0a 42 45 47 49 4e 20 7b 20 0d 0a 20 20 20 )..BEGIN { ..
5840: 24 53 74 79 6c 65 53 68 65 65 74 20 3d 20 4e 65 $StyleSheet = Ne
5850: 77 2d 4f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e w-Object System.
5860: 58 6d 6c 2e 58 73 6c 2e 58 73 6c 43 6f 6d 70 69 Xml.Xsl.XslCompi
5870: 6c 65 64 54 72 61 6e 73 66 6f 72 6d 0d 0a 20 20 ledTransform..
5880: 20 24 53 74 79 6c 65 53 68 65 65 74 2e 4c 6f 61 $StyleSheet.Loa
5890: 64 28 28 5b 53 79 73 74 65 6d 2e 58 6d 6c 2e 58 d(([System.Xml.X
58a0: 6d 6c 52 65 61 64 65 72 5d 3a 3a 43 72 65 61 74 mlReader]::Creat
58b0: 65 28 28 4e 65 77 2d 4f 62 6a 65 63 74 20 53 79 e((New-Object Sy
58c0: 73 74 65 6d 2e 49 4f 2e 53 74 72 69 6e 67 52 65 stem.IO.StringRe
58d0: 61 64 65 72 20 40 22 0d 0a 3c 78 73 6c 3a 73 74 ader @"..<xsl:st
58e0: 79 6c 65 73 68 65 65 74 20 76 65 72 73 69 6f 6e ylesheet version
58f0: 3d 22 31 2e 30 22 20 78 6d 6c 6e 73 3a 78 73 6c ="1.0" xmlns:xsl
5900: 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e ="http://www.w3.
5910: 6f 72 67 2f 31 39 39 39 2f 58 53 4c 2f 54 72 61 org/1999/XSL/Tra
5920: 6e 73 66 6f 72 6d 22 3e 0d 0a 20 20 20 3c 78 73 nsform">.. <xs
5930: 6c 3a 6f 75 74 70 75 74 20 6d 65 74 68 6f 64 3d l:output method=
5940: 22 78 6d 6c 22 20 69 6e 64 65 6e 74 3d 22 79 65 "xml" indent="ye
5950: 73 22 2f 3e 0d 0a 20 20 20 3c 78 73 6c 3a 74 65 s"/>.. <xsl:te
5960: 6d 70 6c 61 74 65 20 6d 61 74 63 68 3d 22 2f 7c mplate match="/|
5970: 63 6f 6d 6d 65 6e 74 28 29 7c 70 72 6f 63 65 73 comment()|proces
5980: 73 69 6e 67 2d 69 6e 73 74 72 75 63 74 69 6f 6e sing-instruction
5990: 28 29 22 3e 0d 0a 20 20 20 20 20 20 3c 78 73 6c ()">.. <xsl
59a0: 3a 63 6f 70 79 3e 0d 0a 20 20 20 20 20 20 20 20 :copy>..
59b0: 20 3c 78 73 6c 3a 61 70 70 6c 79 2d 74 65 6d 70 <xsl:apply-temp
59c0: 6c 61 74 65 73 2f 3e 0d 0a 20 20 20 20 20 20 3c lates/>.. <
59d0: 2f 78 73 6c 3a 63 6f 70 79 3e 0d 0a 20 20 20 3c /xsl:copy>.. <
59e0: 2f 78 73 6c 3a 74 65 6d 70 6c 61 74 65 3e 0d 0a /xsl:template>..
59f0: 0d 0a 20 20 20 3c 78 73 6c 3a 74 65 6d 70 6c 61 .. <xsl:templa
5a00: 74 65 20 6d 61 74 63 68 3d 22 2a 22 3e 0d 0a 20 te match="*">..
5a10: 20 20 20 20 20 3c 78 73 6c 3a 65 6c 65 6d 65 6e <xsl:elemen
5a20: 74 20 6e 61 6d 65 3d 22 7b 6c 6f 63 61 6c 2d 6e t name="{local-n
5a30: 61 6d 65 28 29 7d 22 3e 0d 0a 20 20 20 20 20 20 ame()}">..
5a40: 20 20 20 3c 78 73 6c 3a 61 70 70 6c 79 2d 74 65 <xsl:apply-te
5a50: 6d 70 6c 61 74 65 73 20 73 65 6c 65 63 74 3d 22 mplates select="
5a60: 40 2a 7c 6e 6f 64 65 28 29 22 2f 3e 0d 0a 20 20 @*|node()"/>..
5a70: 20 20 20 20 3c 2f 78 73 6c 3a 65 6c 65 6d 65 6e </xsl:elemen
5a80: 74 3e 0d 0a 20 20 20 3c 2f 78 73 6c 3a 74 65 6d t>.. </xsl:tem
5a90: 70 6c 61 74 65 3e 0d 0a 0d 0a 20 20 20 3c 78 73 plate>.... <xs
5aa0: 6c 3a 74 65 6d 70 6c 61 74 65 20 6d 61 74 63 68 l:template match
5ab0: 3d 22 40 2a 22 3e 0d 0a 20 20 20 20 20 20 3c 78 ="@*">.. <x
5ac0: 73 6c 3a 61 74 74 72 69 62 75 74 65 20 6e 61 6d sl:attribute nam
5ad0: 65 3d 22 7b 6c 6f 63 61 6c 2d 6e 61 6d 65 28 29 e="{local-name()
5ae0: 7d 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 3c 78 }">.. <x
5af0: 73 6c 3a 76 61 6c 75 65 2d 6f 66 20 73 65 6c 65 sl:value-of sele
5b00: 63 74 3d 22 2e 22 2f 3e 0d 0a 20 20 20 20 20 20 ct="."/>..
5b10: 3c 2f 78 73 6c 3a 61 74 74 72 69 62 75 74 65 3e </xsl:attribute>
5b20: 0d 0a 20 20 20 3c 2f 78 73 6c 3a 74 65 6d 70 6c .. </xsl:templ
5b30: 61 74 65 3e 0d 0a 3c 2f 78 73 6c 3a 73 74 79 6c ate>..</xsl:styl
5b40: 65 73 68 65 65 74 3e 0d 0a 22 40 29 29 29 29 0d esheet>.."@)))).
5b50: 0a 20 20 20 5b 54 65 78 74 2e 53 74 72 69 6e 67 . [Text.String
5b60: 42 75 69 6c 64 65 72 5d 24 58 6d 6c 43 6f 6e 74 Builder]$XmlCont
5b70: 65 6e 74 20 3d 20 5b 53 74 72 69 6e 67 5d 3a 3a ent = [String]::
5b80: 45 6d 70 74 79 20 0d 0a 7d 0d 0a 50 52 4f 43 45 Empty ..}..PROCE
5b90: 53 53 20 7b 0d 0a 20 20 20 24 58 6d 6c 20 7c 20 SS {.. $Xml |
5ba0: 43 6f 6e 76 65 72 74 2d 4e 6f 64 65 20 24 53 74 Convert-Node $St
5bb0: 79 6c 65 53 68 65 65 74 0d 0a 7d 0d 0a 7d 0d 0a yleSheet..}..}..
5bc0: 53 65 74 2d 41 6c 69 61 73 20 72 6d 6e 73 20 52 Set-Alias rmns R
5bd0: 65 6d 6f 76 65 2d 58 6d 6c 4e 61 6d 65 73 70 61 emove-XmlNamespa
5be0: 63 65 20 2d 45 41 20 30 0d 0a 53 65 74 2d 41 6c ce -EA 0..Set-Al
5bf0: 69 61 73 20 72 6d 78 6e 73 20 52 65 6d 6f 76 65 ias rmxns Remove
5c00: 2d 58 6d 6c 4e 61 6d 65 73 70 61 63 65 20 2d 45 -XmlNamespace -E
5c10: 41 20 30 0d 0a 0d 0a 23 23 23 23 23 23 23 23 20 A 0....########
5c20: 48 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 73 Helper functions
5c30: 20 66 6f 72 20 77 6f 72 6b 69 6e 67 20 77 69 74 for working wit
5c40: 68 20 43 6c 69 58 6d 6c 0d 0a 0d 0a 66 75 6e 63 h CliXml....func
5c50: 74 69 6f 6e 20 43 6f 6e 76 65 72 74 46 72 6f 6d tion ConvertFrom
5c60: 2d 43 6c 69 58 6d 6c 20 7b 0d 0a 20 20 20 70 61 -CliXml {.. pa
5c70: 72 61 6d 28 0d 0a 20 20 20 20 20 20 5b 50 61 72 ram(.. [Par
5c80: 61 6d 65 74 65 72 28 50 6f 73 69 74 69 6f 6e 3d ameter(Position=
5c90: 30 2c 20 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 0, Mandatory=$tr
5ca0: 75 65 2c 20 56 61 6c 75 65 46 72 6f 6d 50 69 70 ue, ValueFromPip
5cb0: 65 6c 69 6e 65 3d 24 74 72 75 65 29 5d 0d 0a 20 eline=$true)]..
5cc0: 20 20 20 20 20 5b 56 61 6c 69 64 61 74 65 4e 6f [ValidateNo
5cd0: 74 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 29 5d 0d tNullOrEmpty()].
5ce0: 0a 20 20 20 20 20 20 5b 53 74 72 69 6e 67 5b 5d . [String[]
5cf0: 5d 24 49 6e 70 75 74 4f 62 6a 65 63 74 0d 0a 20 ]$InputObject..
5d00: 20 20 29 0d 0a 20 20 20 62 65 67 69 6e 0d 0a 20 ).. begin..
5d10: 20 20 7b 0d 0a 20 20 20 20 20 20 24 4f 46 53 20 {.. $OFS
5d20: 3d 20 22 60 6e 22 0d 0a 20 20 20 20 20 20 5b 53 = "`n".. [S
5d30: 74 72 69 6e 67 5d 24 78 6d 6c 53 74 72 69 6e 67 tring]$xmlString
5d40: 20 3d 20 22 22 0d 0a 20 20 20 7d 0d 0a 20 20 20 = "".. }..
5d50: 70 72 6f 63 65 73 73 0d 0a 20 20 20 7b 0d 0a 20 process.. {..
5d60: 20 20 20 20 20 24 78 6d 6c 53 74 72 69 6e 67 20 $xmlString
5d70: 2b 3d 20 24 49 6e 70 75 74 4f 62 6a 65 63 74 0d += $InputObject.
5d80: 0a 20 20 20 7d 0d 0a 20 20 20 65 6e 64 0d 0a 20 . }.. end..
5d90: 20 20 7b 0d 0a 20 20 20 20 20 20 24 74 79 70 65 {.. $type
5da0: 20 3d 20 5b 74 79 70 65 5d 3a 3a 67 65 74 74 79 = [type]::getty
5db0: 70 65 28 22 53 79 73 74 65 6d 2e 4d 61 6e 61 67 pe("System.Manag
5dc0: 65 6d 65 6e 74 2e 41 75 74 6f 6d 61 74 69 6f 6e ement.Automation
5dd0: 2e 44 65 73 65 72 69 61 6c 69 7a 65 72 22 29 0d .Deserializer").
5de0: 0a 20 20 20 20 20 20 24 63 74 6f 72 20 3d 20 24 . $ctor = $
5df0: 74 79 70 65 2e 67 65 74 63 6f 6e 73 74 72 75 63 type.getconstruc
5e00: 74 6f 72 28 22 69 6e 73 74 61 6e 63 65 2c 6e 6f tor("instance,no
5e10: 6e 70 75 62 6c 69 63 22 2c 20 24 6e 75 6c 6c 2c npublic", $null,
5e20: 20 40 28 5b 78 6d 6c 2e 78 6d 6c 72 65 61 64 65 @([xml.xmlreade
5e30: 72 5d 29 2c 20 24 6e 75 6c 6c 29 0d 0a 20 20 20 r]), $null)..
5e40: 20 20 20 24 73 72 20 3d 20 6e 65 77 2d 6f 62 6a $sr = new-obj
5e50: 65 63 74 20 53 79 73 74 65 6d 2e 49 4f 2e 53 74 ect System.IO.St
5e60: 72 69 6e 67 52 65 61 64 65 72 20 24 78 6d 6c 53 ringReader $xmlS
5e70: 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 24 78 72 tring.. $xr
5e80: 20 3d 20 6e 65 77 2d 6f 62 6a 65 63 74 20 53 79 = new-object Sy
5e90: 73 74 65 6d 2e 58 6d 6c 2e 58 6d 6c 54 65 78 74 stem.Xml.XmlText
5ea0: 52 65 61 64 65 72 20 24 73 72 0d 0a 20 20 20 20 Reader $sr..
5eb0: 20 20 24 64 65 73 65 72 69 61 6c 69 7a 65 72 20 $deserializer
5ec0: 3d 20 24 63 74 6f 72 2e 69 6e 76 6f 6b 65 28 24 = $ctor.invoke($
5ed0: 78 72 29 0d 0a 20 20 20 20 20 20 24 6d 65 74 68 xr).. $meth
5ee0: 6f 64 20 3d 20 40 28 24 74 79 70 65 2e 67 65 74 od = @($type.get
5ef0: 6d 65 74 68 6f 64 73 28 22 6e 6f 6e 70 75 62 6c methods("nonpubl
5f00: 69 63 2c 69 6e 73 74 61 6e 63 65 22 29 20 7c 20 ic,instance") |
5f10: 77 68 65 72 65 2d 6f 62 6a 65 63 74 20 7b 24 5f where-object {$_
5f20: 2e 6e 61 6d 65 20 2d 6c 69 6b 65 20 22 44 65 73 .name -like "Des
5f30: 65 72 69 61 6c 69 7a 65 22 7d 29 5b 31 5d 0d 0a erialize"})[1]..
5f40: 20 20 20 20 20 20 24 64 6f 6e 65 20 3d 20 24 74 $done = $t
5f50: 79 70 65 2e 67 65 74 6d 65 74 68 6f 64 28 22 44 ype.getmethod("D
5f60: 6f 6e 65 22 2c 20 5b 53 79 73 74 65 6d 2e 52 65 one", [System.Re
5f70: 66 6c 65 63 74 69 6f 6e 2e 42 69 6e 64 69 6e 67 flection.Binding
5f80: 46 6c 61 67 73 5d 22 6e 6f 6e 70 75 62 6c 69 63 Flags]"nonpublic
5f90: 2c 69 6e 73 74 61 6e 63 65 22 29 0d 0a 20 20 20 ,instance")..
5fa0: 20 20 20 77 68 69 6c 65 20 28 21 24 64 6f 6e 65 while (!$done
5fb0: 2e 69 6e 76 6f 6b 65 28 24 64 65 73 65 72 69 61 .invoke($deseria
5fc0: 6c 69 7a 65 72 2c 20 40 28 29 29 29 0d 0a 20 20 lizer, @()))..
5fd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
5fe0: 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 try {..
5ff0: 20 20 20 24 6d 65 74 68 6f 64 2e 69 6e 76 6f 6b $method.invok
6000: 65 28 24 64 65 73 65 72 69 61 6c 69 7a 65 72 2c e($deserializer,
6010: 20 22 22 29 0d 0a 20 20 20 20 20 20 20 20 20 7d "").. }
6020: 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {..
6030: 20 20 20 20 20 20 77 72 69 74 65 2d 77 61 72 6e write-warn
6040: 69 6e 67 20 22 43 6f 75 6c 64 20 6e 6f 74 20 64 ing "Could not d
6050: 65 73 65 72 69 61 6c 69 7a 65 20 24 73 74 72 69 eserialize $stri
6060: 6e 67 3a 20 24 5f 22 0d 0a 20 20 20 20 20 20 20 ng: $_"..
6070: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }..
6080: 20 20 20 20 24 78 72 2e 43 6c 6f 73 65 28 29 0d $xr.Close().
6090: 0a 20 20 20 20 20 20 24 73 72 2e 44 69 73 70 6f . $sr.Dispo
60a0: 73 65 28 29 0d 0a 20 20 20 7d 0d 0a 7d 0d 0a 0d se().. }..}...
60b0: 0a 66 75 6e 63 74 69 6f 6e 20 43 6f 6e 76 65 72 .function Conver
60c0: 74 54 6f 2d 43 6c 69 58 6d 6c 20 7b 0d 0a 20 20 tTo-CliXml {..
60d0: 20 70 61 72 61 6d 28 0d 0a 20 20 20 20 20 20 5b param(.. [
60e0: 50 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74 69 Parameter(Positi
60f0: 6f 6e 3d 30 2c 20 4d 61 6e 64 61 74 6f 72 79 3d on=0, Mandatory=
6100: 24 74 72 75 65 2c 20 56 61 6c 75 65 46 72 6f 6d $true, ValueFrom
6110: 50 69 70 65 6c 69 6e 65 3d 24 74 72 75 65 29 5d Pipeline=$true)]
6120: 0d 0a 20 20 20 20 20 20 5b 56 61 6c 69 64 61 74 .. [Validat
6130: 65 4e 6f 74 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 eNotNullOrEmpty(
6140: 29 5d 0d 0a 20 20 20 20 20 20 5b 50 53 4f 62 6a )].. [PSObj
6150: 65 63 74 5b 5d 5d 24 49 6e 70 75 74 4f 62 6a 65 ect[]]$InputObje
6160: 63 74 0d 0a 20 20 20 29 0d 0a 20 20 20 62 65 67 ct.. ).. beg
6170: 69 6e 20 7b 0d 0a 20 20 20 20 20 20 24 74 79 70 in {.. $typ
6180: 65 20 3d 20 5b 74 79 70 65 5d 3a 3a 67 65 74 74 e = [type]::gett
6190: 79 70 65 28 22 53 79 73 74 65 6d 2e 4d 61 6e 61 ype("System.Mana
61a0: 67 65 6d 65 6e 74 2e 41 75 74 6f 6d 61 74 69 6f gement.Automatio
61b0: 6e 2e 53 65 72 69 61 6c 69 7a 65 72 22 29 0d 0a n.Serializer")..
61c0: 20 20 20 20 20 20 24 63 74 6f 72 20 3d 20 24 74 $ctor = $t
61d0: 79 70 65 2e 67 65 74 63 6f 6e 73 74 72 75 63 74 ype.getconstruct
61e0: 6f 72 28 22 69 6e 73 74 61 6e 63 65 2c 6e 6f 6e or("instance,non
61f0: 70 75 62 6c 69 63 22 2c 20 24 6e 75 6c 6c 2c 20 public", $null,
6200: 40 28 5b 53 79 73 74 65 6d 2e 58 6d 6c 2e 58 6d @([System.Xml.Xm
6210: 6c 57 72 69 74 65 72 5d 29 2c 20 24 6e 75 6c 6c lWriter]), $null
6220: 29 0d 0a 20 20 20 20 20 20 24 73 77 20 3d 20 6e ).. $sw = n
6230: 65 77 2d 6f 62 6a 65 63 74 20 53 79 73 74 65 6d ew-object System
6240: 2e 49 4f 2e 53 74 72 69 6e 67 57 72 69 74 65 72 .IO.StringWriter
6250: 0d 0a 20 20 20 20 20 20 24 78 77 20 3d 20 6e 65 .. $xw = ne
6260: 77 2d 6f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e w-object System.
6270: 58 6d 6c 2e 58 6d 6c 54 65 78 74 57 72 69 74 65 Xml.XmlTextWrite
6280: 72 20 24 73 77 0d 0a 20 20 20 20 20 20 24 73 65 r $sw.. $se
6290: 72 69 61 6c 69 7a 65 72 20 3d 20 24 63 74 6f 72 rializer = $ctor
62a0: 2e 69 6e 76 6f 6b 65 28 24 78 77 29 0d 0a 20 20 .invoke($xw)..
62b0: 20 20 20 20 24 6d 65 74 68 6f 64 20 3d 20 24 74 $method = $t
62c0: 79 70 65 2e 67 65 74 6d 65 74 68 6f 64 28 22 53 ype.getmethod("S
62d0: 65 72 69 61 6c 69 7a 65 22 2c 20 22 6e 6f 6e 70 erialize", "nonp
62e0: 75 62 6c 69 63 2c 69 6e 73 74 61 6e 63 65 22 2c ublic,instance",
62f0: 20 24 6e 75 6c 6c 2c 20 5b 74 79 70 65 5b 5d 5d $null, [type[]]
6300: 40 28 5b 6f 62 6a 65 63 74 5d 29 2c 20 24 6e 75 @([object]), $nu
6310: 6c 6c 29 0d 0a 20 20 20 20 20 20 24 64 6f 6e 65 ll).. $done
6320: 20 3d 20 24 74 79 70 65 2e 67 65 74 6d 65 74 68 = $type.getmeth
6330: 6f 64 28 22 44 6f 6e 65 22 2c 20 5b 53 79 73 74 od("Done", [Syst
6340: 65 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 2e 42 69 em.Reflection.Bi
6350: 6e 64 69 6e 67 46 6c 61 67 73 5d 22 6e 6f 6e 70 ndingFlags]"nonp
6360: 75 62 6c 69 63 2c 69 6e 73 74 61 6e 63 65 22 29 ublic,instance")
6370: 0d 0a 20 20 20 7d 0d 0a 20 20 20 70 72 6f 63 65 .. }.. proce
6380: 73 73 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 20 ss {.. try
6390: 7b 0d 0a 20 20 20 20 20 20 20 20 20 5b 76 6f 69 {.. [voi
63a0: 64 5d 24 6d 65 74 68 6f 64 2e 69 6e 76 6f 6b 65 d]$method.invoke
63b0: 28 24 73 65 72 69 61 6c 69 7a 65 72 2c 20 24 49 ($serializer, $I
63c0: 6e 70 75 74 4f 62 6a 65 63 74 29 0d 0a 20 20 20 nputObject)..
63d0: 20 20 20 7d 20 63 61 74 63 68 20 7b 0d 0a 20 20 } catch {..
63e0: 20 20 20 20 20 20 20 77 72 69 74 65 2d 77 61 72 write-war
63f0: 6e 69 6e 67 20 22 43 6f 75 6c 64 20 6e 6f 74 20 ning "Could not
6400: 73 65 72 69 61 6c 69 7a 65 20 24 28 24 49 6e 70 serialize $($Inp
6410: 75 74 4f 62 6a 65 63 74 2e 67 65 74 74 79 70 65 utObject.gettype
6420: 28 29 29 3a 20 24 5f 22 0d 0a 20 20 20 20 20 20 ()): $_"..
6430: 7d 0d 0a 20 20 20 7d 0d 0a 20 20 20 65 6e 64 20 }.. }.. end
6440: 7b 20 20 20 20 0d 0a 20 20 20 20 20 20 5b 76 6f { .. [vo
6450: 69 64 5d 24 64 6f 6e 65 2e 69 6e 76 6f 6b 65 28 id]$done.invoke(
6460: 24 73 65 72 69 61 6c 69 7a 65 72 2c 20 40 28 29 $serializer, @()
6470: 29 0d 0a 20 20 20 20 20 20 24 73 77 2e 54 6f 53 ).. $sw.ToS
6480: 74 72 69 6e 67 28 29 0d 0a 20 20 20 20 20 20 24 tring().. $
6490: 78 77 2e 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20 xw.Close()..
64a0: 20 20 24 73 77 2e 44 69 73 70 6f 73 65 28 29 0d $sw.Dispose().
64b0: 0a 20 20 20 7d 0d 0a 7d 0d 0a 0d 0a 0d 0a 23 23 . }..}......##
64c0: 23 23 23 23 23 23 20 46 72 6f 6d 20 68 65 72 65 ###### From here
64d0: 20 64 6f 77 6e 20 69 73 20 61 6c 6c 20 74 68 65 down is all the
64e0: 20 63 6f 64 65 20 72 65 6c 61 74 65 64 20 74 6f code related to
64f0: 20 6d 79 20 58 4d 4c 20 44 53 4c 3a 0d 0a 0d 0a my XML DSL:....
6500: 66 75 6e 63 74 69 6f 6e 20 4e 65 77 2d 58 44 6f function New-XDo
6510: 63 75 6d 65 6e 74 20 7b 0d 0a 23 2e 53 79 6e 6f cument {..#.Syno
6520: 70 73 69 73 0d 0a 23 20 20 20 43 72 65 61 74 65 psis..# Create
6530: 73 20 61 20 6e 65 77 20 58 44 6f 63 75 6d 65 6e s a new XDocumen
6540: 74 20 28 74 68 65 20 6e 65 77 20 78 6d 6c 20 64 t (the new xml d
6550: 6f 63 75 6d 65 6e 74 20 74 79 70 65 29 0d 0a 23 ocument type)..#
6560: 2e 44 65 73 63 72 69 70 74 69 6f 6e 0d 0a 23 20 .Description..#
6570: 20 54 68 69 73 20 69 73 20 74 68 65 20 72 6f 6f This is the roo
6580: 74 20 66 6f 72 20 61 20 6e 65 77 20 58 4d 4c 20 t for a new XML
6590: 6d 69 6e 69 2d 64 73 6c 2c 20 61 6b 69 6e 20 74 mini-dsl, akin t
65a0: 6f 20 4e 65 77 2d 42 6f 6f 74 73 57 69 6e 64 6f o New-BootsWindo
65b0: 77 20 66 6f 72 20 58 41 4d 4c 0d 0a 23 20 20 49 w for XAML..# I
65c0: 74 20 63 72 65 61 74 65 73 20 61 20 6e 65 77 20 t creates a new
65d0: 58 44 6f 63 75 6d 65 6e 74 2c 20 61 6e 64 20 74 XDocument, and t
65e0: 61 6b 65 73 20 73 63 72 69 74 70 62 6c 6f 63 6b akes scritpblock
65f0: 28 73 29 20 74 6f 20 64 65 66 69 6e 65 20 69 74 (s) to define it
6600: 27 73 20 63 6f 6e 74 65 6e 74 73 0d 0a 23 2e 50 's contents..#.P
6610: 61 72 61 6d 65 74 65 72 20 72 6f 6f 74 0d 0a 23 arameter root..#
6620: 20 20 20 54 68 65 20 72 6f 6f 74 20 6e 6f 64 65 The root node
6630: 20 6e 61 6d 65 0d 0a 23 2e 50 61 72 61 6d 65 74 name..#.Paramet
6640: 65 72 20 76 65 72 73 69 6f 6e 0d 0a 23 20 20 20 er version..#
6650: 4f 70 74 69 6f 6e 61 6c 3a 20 74 68 65 20 58 4d Optional: the XM
6660: 4c 20 76 65 72 73 69 6f 6e 2e 20 44 65 66 61 75 L version. Defau
6670: 6c 74 73 20 74 6f 20 31 2e 30 0d 0a 23 2e 50 61 lts to 1.0..#.Pa
6680: 72 61 6d 65 74 65 72 20 65 6e 63 6f 64 69 6e 67 rameter encoding
6690: 0d 0a 23 20 20 20 4f 70 74 69 6f 6e 61 6c 3a 20 ..# Optional:
66a0: 74 68 65 20 45 6e 63 6f 64 69 6e 67 2e 20 44 65 the Encoding. De
66b0: 66 61 75 6c 74 73 20 74 6f 20 55 54 46 2d 38 0d faults to UTF-8.
66c0: 0a 23 2e 50 61 72 61 6d 65 74 65 72 20 73 74 61 .#.Parameter sta
66d0: 6e 64 61 6c 6f 6e 65 0d 0a 23 20 20 4f 70 74 69 ndalone..# Opti
66e0: 6f 6e 61 6c 3a 20 77 68 65 74 68 65 72 20 74 6f onal: whether to
66f0: 20 73 70 65 63 69 66 79 20 73 74 61 6e 64 61 6c specify standal
6700: 6f 6e 65 20 69 6e 20 74 68 65 20 78 6d 6c 20 64 one in the xml d
6710: 65 63 6c 61 72 61 74 69 6f 6e 2e 20 44 65 66 61 eclaration. Defa
6720: 75 6c 74 73 20 74 6f 20 22 79 65 73 22 0d 0a 23 ults to "yes"..#
6730: 2e 50 61 72 61 6d 65 74 65 72 20 61 72 67 73 0d .Parameter args.
6740: 0a 23 20 20 20 74 68 69 73 20 69 73 20 77 68 65 .# this is whe
6750: 72 65 20 61 6c 6c 20 74 68 65 20 64 73 6c 20 6d re all the dsl m
6760: 61 67 69 63 20 68 61 70 70 65 6e 73 2e 20 50 6c agic happens. Pl
6770: 65 61 73 65 20 73 65 65 20 74 68 65 20 45 78 61 ease see the Exa
6780: 6d 70 6c 65 73 2e 20 3a 29 0d 0a 23 0d 0a 23 2e mples. :)..#..#.
6790: 45 78 61 6d 70 6c 65 0d 0a 23 20 5b 73 74 72 69 Example..# [stri
67a0: 6e 67 5d 24 78 6d 6c 20 3d 20 4e 65 77 2d 58 44 ng]$xml = New-XD
67b0: 6f 63 75 6d 65 6e 74 20 72 73 73 20 2d 76 65 72 ocument rss -ver
67c0: 73 69 6f 6e 20 22 32 2e 30 22 20 7b 0d 0a 23 20 sion "2.0" {..#
67d0: 20 20 20 63 68 61 6e 6e 65 6c 20 7b 0d 0a 23 20 channel {..#
67e0: 20 20 20 20 20 20 74 69 74 6c 65 20 7b 22 54 65 title {"Te
67f0: 73 74 20 52 53 53 20 46 65 65 64 22 7d 0d 0a 23 st RSS Feed"}..#
6800: 20 20 20 20 20 20 20 6c 69 6e 6b 20 7b 22 68 74 link {"ht
6810: 74 70 60 3a 2f 2f 48 75 64 64 6c 65 64 4d 61 73 tp`://HuddledMas
6820: 73 65 73 2e 6f 72 67 22 7d 0d 0a 23 20 20 20 20 ses.org"}..#
6830: 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b description {
6840: 22 41 6e 20 52 53 53 20 46 65 65 64 20 67 65 6e "An RSS Feed gen
6850: 65 72 61 74 65 64 20 73 69 6d 70 6c 79 20 74 6f erated simply to
6860: 20 64 65 6d 6f 6e 73 74 72 61 74 65 20 6d 79 20 demonstrate my
6870: 58 4d 4c 20 44 53 4c 22 7d 0d 0a 23 20 20 20 20 XML DSL"}..#
6880: 20 20 20 69 74 65 6d 20 7b 0d 0a 23 20 20 20 20 item {..#
6890: 20 20 20 20 20 20 74 69 74 6c 65 20 7b 22 54 68 title {"Th
68a0: 65 20 46 69 72 73 74 20 49 74 65 6d 22 7d 0d 0a e First Item"}..
68b0: 23 20 20 20 20 20 20 20 20 20 20 6c 69 6e 6b 20 # link
68c0: 7b 22 68 74 74 70 60 3a 2f 2f 68 75 64 64 6c 65 {"http`://huddle
68d0: 64 6d 61 73 73 65 73 2e 6f 72 67 2f 6e 65 77 2d dmasses.org/new-
68e0: 73 69 74 65 2d 6e 65 77 2d 6c 61 79 6f 75 74 2d site-new-layout-
68f0: 6c 6f 73 74 2d 70 6f 73 74 73 2f 22 7d 0d 0a 23 lost-posts/"}..#
6900: 20 20 20 20 20 20 20 20 20 20 67 75 69 64 20 2d guid -
6910: 69 73 50 65 72 6d 61 4c 69 6e 6b 20 74 72 75 65 isPermaLink true
6920: 20 7b 22 68 74 74 70 60 3a 2f 2f 68 75 64 64 6c {"http`://huddl
6930: 65 64 6d 61 73 73 65 73 2e 6f 72 67 2f 6e 65 77 edmasses.org/new
6940: 2d 73 69 74 65 2d 6e 65 77 2d 6c 61 79 6f 75 74 -site-new-layout
6950: 2d 6c 6f 73 74 2d 70 6f 73 74 73 2f 22 7d 0d 0a -lost-posts/"}..
6960: 23 20 20 20 20 20 20 20 20 20 20 64 65 73 63 72 # descr
6970: 69 70 74 69 6f 6e 20 7b 22 45 6d 61 20 4c 61 7a iption {"Ema Laz
6980: 61 72 75 73 27 20 50 6f 65 6d 22 7d 0d 0a 23 20 arus' Poem"}..#
6990: 20 20 20 20 20 20 20 20 20 70 75 62 44 61 74 65 pubDate
69a0: 20 7b 28 47 65 74 2d 44 61 74 65 20 31 30 2f 33 {(Get-Date 10/3
69b0: 31 2f 32 30 30 33 20 2d 66 20 75 29 20 2d 72 65 1/2003 -f u) -re
69c0: 70 6c 61 63 65 20 22 20 22 2c 22 54 22 7d 0d 0a place " ","T"}..
69d0: 23 20 20 20 20 20 20 20 7d 0d 0a 23 20 20 20 20 # }..#
69e0: 7d 0d 0a 23 20 7d 0d 0a 23 0d 0a 23 20 43 3a 5c }..# }..#..# C:\
69f0: 50 53 3e 24 78 6d 6c 2e 44 65 63 6c 61 72 61 74 PS>$xml.Declarat
6a00: 69 6f 6e 2e 54 6f 53 74 72 69 6e 67 28 29 20 20 ion.ToString()
6a10: 23 23 20 49 20 63 61 6e 27 74 20 66 69 6e 64 20 ## I can't find
6a20: 61 20 77 61 79 20 74 6f 20 68 61 76 65 20 74 68 a way to have th
6a30: 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 is included in t
6a40: 68 65 20 24 78 6d 6c 2e 54 6f 53 74 72 69 6e 67 he $xml.ToString
6a50: 28 29 0d 0a 23 20 43 3a 5c 50 53 3e 24 78 6d 6c ()..# C:\PS>$xml
6a60: 2e 54 6f 53 74 72 69 6e 67 28 29 0d 0a 23 0d 0a .ToString()..#..
6a70: 23 20 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d # <?xml version=
6a80: 22 31 2e 30 22 20 65 6e 63 6f 64 69 6e 67 3d 22 "1.0" encoding="
6a90: 55 54 46 2d 38 22 20 73 74 61 6e 64 61 6c 6f 6e UTF-8" standalon
6aa0: 65 3d 22 79 65 73 22 3f 3e 0d 0a 23 20 3c 72 73 e="yes"?>..# <rs
6ab0: 73 20 76 65 72 73 69 6f 6e 3d 22 32 2e 30 22 3e s version="2.0">
6ac0: 0d 0a 23 20 20 20 3c 63 68 61 6e 6e 65 6c 3e 0d ..# <channel>.
6ad0: 0a 23 20 20 20 20 20 3c 74 69 74 6c 65 3e 54 65 .# <title>Te
6ae0: 73 74 20 52 53 53 20 46 65 65 64 3c 2f 74 69 74 st RSS Feed</tit
6af0: 6c 65 3e 0d 0a 23 20 20 20 20 20 3c 6c 69 6e 6b le>..# <link
6b00: 3e 68 74 74 70 20 3a 2f 2f 48 75 64 64 6c 65 64 >http ://Huddled
6b10: 4d 61 73 73 65 73 2e 6f 72 67 3c 2f 6c 69 6e 6b Masses.org</link
6b20: 3e 0d 0a 23 20 20 20 20 20 3c 64 65 73 63 72 69 >..# <descri
6b30: 70 74 69 6f 6e 3e 41 6e 20 52 53 53 20 46 65 65 ption>An RSS Fee
6b40: 64 20 67 65 6e 65 72 61 74 65 64 20 73 69 6d 70 d generated simp
6b50: 6c 79 20 74 6f 20 64 65 6d 6f 6e 73 74 72 61 74 ly to demonstrat
6b60: 65 20 6d 79 20 58 4d 4c 20 44 53 4c 3c 2f 64 65 e my XML DSL</de
6b70: 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 23 20 20 20 scription>..#
6b80: 20 20 3c 69 74 65 6d 3e 0d 0a 23 20 20 20 20 20 <item>..#
6b90: 20 20 3c 74 69 74 6c 65 3e 54 68 65 20 46 69 72 <title>The Fir
6ba0: 73 74 20 49 74 65 6d 3c 2f 74 69 74 6c 65 3e 0d st Item</title>.
6bb0: 0a 23 20 20 20 20 20 20 20 3c 6c 69 6e 6b 3e 68 .# <link>h
6bc0: 74 74 70 20 3a 2f 2f 68 75 64 64 6c 65 64 6d 61 ttp ://huddledma
6bd0: 73 73 65 73 2e 6f 72 67 2f 6e 65 77 2d 73 69 74 sses.org/new-sit
6be0: 65 2d 6e 65 77 2d 6c 61 79 6f 75 74 2d 6c 6f 73 e-new-layout-los
6bf0: 74 2d 70 6f 73 74 73 2f 3c 2f 6c 69 6e 6b 3e 0d t-posts/</link>.
6c00: 0a 23 20 20 20 20 20 20 20 3c 67 75 69 64 20 69 .# <guid i
6c10: 73 50 65 72 6d 61 4c 69 6e 6b 3d 22 74 72 75 65 sPermaLink="true
6c20: 22 3e 68 74 74 70 20 3a 2f 2f 68 75 64 64 6c 65 ">http ://huddle
6c30: 64 6d 61 73 73 65 73 2e 6f 72 67 2f 6e 65 77 2d dmasses.org/new-
6c40: 73 69 74 65 2d 6e 65 77 2d 6c 61 79 6f 75 74 2d site-new-layout-
6c50: 6c 6f 73 74 2d 70 6f 73 74 73 2f 3c 2f 67 75 69 lost-posts/</gui
6c60: 64 3e 0d 0a 23 20 20 20 20 20 20 20 3c 64 65 73 d>..# <des
6c70: 63 72 69 70 74 69 6f 6e 3e 45 6d 61 20 4c 61 7a cription>Ema Laz
6c80: 61 72 75 73 27 20 50 6f 65 6d 3c 2f 64 65 73 63 arus' Poem</desc
6c90: 72 69 70 74 69 6f 6e 3e 0d 0a 23 20 20 20 20 20 ription>..#
6ca0: 20 20 3c 70 75 62 44 61 74 65 3e 32 30 30 33 2d <pubDate>2003-
6cb0: 31 30 2d 33 31 54 30 30 3a 30 30 3a 30 30 5a 3c 10-31T00:00:00Z<
6cc0: 2f 70 75 62 44 61 74 65 3e 0d 0a 23 20 20 20 20 /pubDate>..#
6cd0: 20 3c 2f 69 74 65 6d 3e 0d 0a 23 20 20 20 3c 2f </item>..# </
6ce0: 63 68 61 6e 6e 65 6c 3e 0d 0a 23 20 3c 2f 72 73 channel>..# </rs
6cf0: 73 3e 0d 0a 23 0d 0a 23 0d 0a 23 20 44 65 73 63 s>..#..#..# Desc
6d00: 72 69 70 74 69 6f 6e 0d 0a 23 20 2d 2d 2d 2d 2d ription..# -----
6d10: 2d 2d 2d 2d 2d 2d 0d 0a 23 20 54 68 69 73 20 65 ------..# This e
6d20: 78 61 6d 70 6c 65 20 73 68 6f 77 73 20 74 68 65 xample shows the
6d30: 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 61 20 63 creation of a c
6d40: 6f 6d 70 6c 65 74 65 20 52 53 53 20 66 65 65 64 omplete RSS feed
6d50: 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 69 with a single i
6d60: 74 65 6d 20 69 6e 20 69 74 2e 20 0d 0a 23 0d 0a tem in it. ..#..
6d70: 23 20 4e 4f 54 45 20 74 68 61 74 20 74 68 65 20 # NOTE that the
6d80: 62 61 63 6b 74 69 63 6b 20 69 6e 20 74 68 65 20 backtick in the
6d90: 68 74 74 70 60 3a 20 69 6e 20 74 68 65 20 55 52 http`: in the UR
6da0: 4c 73 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20 Ls in the input
6db0: 69 73 20 75 6e 65 63 65 73 73 61 72 79 2c 20 61 is unecessary, a
6dc0: 6e 64 20 49 20 61 64 64 65 64 20 74 68 65 20 73 nd I added the s
6dd0: 70 61 63 65 20 61 66 74 65 72 20 74 68 65 20 68 pace after the h
6de0: 74 74 70 3a 20 69 6e 20 74 68 65 20 55 52 4c 73 ttp: in the URLs
6df0: 20 20 69 6e 20 74 68 65 20 6f 75 74 70 75 74 20 in the output
6e00: 2d 2d 20 74 68 65 73 65 20 61 72 65 20 61 63 63 -- these are acc
6e10: 6f 6d 6f 64 61 74 69 6f 6e 73 20 74 6f 20 50 6f omodations to Po
6e20: 73 68 43 6f 64 65 27 73 20 73 70 61 6d 20 66 69 shCode's spam fi
6e30: 6c 74 65 72 2e 20 42 61 63 6b 74 69 63 6b 73 20 lter. Backticks
6e40: 61 72 65 20 6e 6f 74 20 6e 65 65 64 20 69 6e 20 are not need in
6e50: 74 68 65 20 69 6e 70 75 74 2c 20 61 6e 64 20 73 the input, and s
6e60: 70 61 63 65 73 20 64 6f 20 6e 6f 74 20 61 70 70 paces do not app
6e70: 65 61 72 20 69 6e 20 74 68 65 20 61 63 74 75 61 ear in the actua
6e80: 6c 20 6f 75 74 70 75 74 2e 0d 0a 23 0d 0a 23 0d l output...#..#.
6e90: 0a 23 2e 45 78 61 6d 70 6c 65 20 0d 0a 23 20 5b .#.Example ..# [
6ea0: 58 4e 61 6d 65 73 70 61 63 65 5d 24 61 74 6f 6d XNamespace]$atom
6eb0: 3d 22 68 74 74 70 60 3a 2f 2f 77 77 77 2e 77 33 ="http`://www.w3
6ec0: 2e 6f 72 67 2f 32 30 30 35 2f 41 74 6f 6d 22 0d .org/2005/Atom".
6ed0: 0a 23 20 43 3a 5c 50 53 3e 5b 58 4e 61 6d 65 73 .# C:\PS>[XNames
6ee0: 70 61 63 65 5d 24 64 63 20 3d 20 22 68 74 74 70 pace]$dc = "http
6ef0: 60 3a 2f 2f 70 75 72 6c 2e 6f 72 67 2f 64 63 2f `://purl.org/dc/
6f00: 65 6c 65 6d 65 6e 74 73 2f 31 2e 31 22 0d 0a 23 elements/1.1"..#
6f10: 20 0d 0a 23 20 43 3a 5c 50 53 3e 4e 65 77 2d 58 ..# C:\PS>New-X
6f20: 44 6f 63 75 6d 65 6e 74 20 28 24 61 74 6f 6d 20 Document ($atom
6f30: 2b 20 22 66 65 65 64 22 29 20 2d 45 6e 63 6f 64 + "feed") -Encod
6f40: 69 6e 67 20 22 55 54 46 2d 31 36 22 20 2d 24 28 ing "UTF-16" -$(
6f50: 5b 58 4e 61 6d 65 73 70 61 63 65 5d 3a 3a 58 6d [XNamespace]::Xm
6f60: 6c 20 2b 27 6c 61 6e 67 27 29 20 22 65 6e 2d 55 l +'lang') "en-U
6f70: 53 22 20 2d 64 63 20 24 64 63 20 7b 0d 0a 23 20 S" -dc $dc {..#
6f80: 20 20 20 74 69 74 6c 65 20 7b 22 54 65 73 74 20 title {"Test
6f90: 46 69 72 73 74 20 45 6e 74 72 79 22 7d 0d 0a 23 First Entry"}..#
6fa0: 20 20 20 20 6c 69 6e 6b 20 7b 22 68 74 74 70 60 link {"http`
6fb0: 3a 2f 2f 48 75 64 64 6c 65 64 4d 61 73 73 65 73 ://HuddledMasses
6fc0: 2e 6f 72 67 22 7d 0d 0a 23 20 20 20 20 75 70 64 .org"}..# upd
6fd0: 61 74 65 64 20 7b 28 47 65 74 2d 44 61 74 65 20 ated {(Get-Date
6fe0: 2d 66 20 75 29 20 2d 72 65 70 6c 61 63 65 20 22 -f u) -replace "
6ff0: 20 22 2c 22 54 22 7d 0d 0a 23 20 20 20 20 61 75 ","T"}..# au
7000: 74 68 6f 72 20 7b 0d 0a 23 20 20 20 20 20 20 20 thor {..#
7010: 6e 61 6d 65 20 7b 22 4a 6f 65 6c 20 42 65 6e 6e name {"Joel Benn
7020: 65 74 74 22 7d 0d 0a 23 20 20 20 20 20 20 20 75 ett"}..# u
7030: 72 69 20 7b 22 68 74 74 70 60 3a 2f 2f 48 75 64 ri {"http`://Hud
7040: 64 6c 65 64 4d 61 73 73 65 73 2e 6f 72 67 22 7d dledMasses.org"}
7050: 0d 0a 23 20 20 20 20 7d 0d 0a 23 20 20 20 20 69 ..# }..# i
7060: 64 20 7b 22 68 74 74 70 60 3a 2f 2f 68 75 64 64 d {"http`://hudd
7070: 6c 65 64 6d 61 73 73 65 73 2e 6f 72 67 2f 22 20 ledmasses.org/"
7080: 7d 0d 0a 23 0d 0a 23 20 20 20 20 65 6e 74 72 79 }..#..# entry
7090: 20 7b 0d 0a 23 20 20 20 20 20 20 20 74 69 74 6c {..# titl
70a0: 65 20 7b 22 54 65 73 74 20 46 69 72 73 74 20 45 e {"Test First E
70b0: 6e 74 72 79 22 7d 0d 0a 23 20 20 20 20 20 20 20 ntry"}..#
70c0: 6c 69 6e 6b 20 7b 22 68 74 74 70 60 3a 2f 2f 48 link {"http`://H
70d0: 75 64 64 6c 65 64 4d 61 73 73 65 73 2e 6f 72 67 uddledMasses.org
70e0: 2f 6e 65 77 2d 73 69 74 65 2d 6e 65 77 2d 6c 61 /new-site-new-la
70f0: 79 6f 75 74 2d 6c 6f 73 74 2d 70 6f 73 74 73 2f yout-lost-posts/
7100: 22 20 7d 0d 0a 23 20 20 20 20 20 20 20 69 64 20 " }..# id
7110: 7b 22 68 74 74 70 60 3a 2f 2f 68 75 64 64 6c 65 {"http`://huddle
7120: 64 6d 61 73 73 65 73 2e 6f 72 67 2f 6e 65 77 2d dmasses.org/new-
7130: 73 69 74 65 2d 6e 65 77 2d 6c 61 79 6f 75 74 2d site-new-layout-
7140: 6c 6f 73 74 2d 70 6f 73 74 73 2f 22 20 7d 0d 0a lost-posts/" }..
7150: 23 20 20 20 20 20 20 20 75 70 64 61 74 65 64 20 # updated
7160: 7b 28 47 65 74 2d 44 61 74 65 20 31 30 2f 33 31 {(Get-Date 10/31
7170: 2f 32 30 30 33 20 2d 66 20 75 29 20 2d 72 65 70 /2003 -f u) -rep
7180: 6c 61 63 65 20 22 20 22 2c 22 54 22 7d 0d 0a 23 lace " ","T"}..#
7190: 20 20 20 20 20 20 20 73 75 6d 6d 61 72 79 20 7b summary {
71a0: 22 45 6d 61 20 4c 61 7a 61 72 75 73 27 20 50 6f "Ema Lazarus' Po
71b0: 65 6d 22 7d 0d 0a 23 20 20 20 20 20 20 20 6c 69 em"}..# li
71c0: 6e 6b 20 2d 72 65 6c 20 6c 69 63 65 6e 73 65 20 nk -rel license
71d0: 2d 68 72 65 66 20 22 68 74 74 70 60 3a 2f 2f 63 -href "http`://c
71e0: 72 65 61 74 69 76 65 63 6f 6d 6d 6f 6e 73 2e 6f reativecommons.o
71f0: 72 67 2f 6c 69 63 65 6e 73 65 73 2f 62 79 2f 33 rg/licenses/by/3
7200: 2e 30 2f 22 20 2d 74 69 74 6c 65 20 22 43 43 20 .0/" -title "CC
7210: 42 79 2d 41 74 74 72 69 62 75 74 69 6f 6e 22 0d By-Attribution".
7220: 0a 23 20 20 20 20 20 20 20 64 63 3a 72 69 67 68 .# dc:righ
7230: 74 73 20 7b 20 22 43 6f 70 79 72 69 67 68 74 20 ts { "Copyright
7240: 32 30 30 39 2c 20 53 6f 6d 65 20 72 69 67 68 74 2009, Some right
7250: 73 20 72 65 73 65 72 76 65 64 20 28 6c 69 63 65 s reserved (lice
7260: 6e 73 65 64 20 75 6e 64 65 72 20 74 68 65 20 43 nsed under the C
7270: 72 65 61 74 69 76 65 20 43 6f 6d 6d 6f 6e 73 20 reative Commons
7280: 41 74 74 72 69 62 75 74 69 6f 6e 20 33 2e 30 20 Attribution 3.0
7290: 55 6e 70 6f 72 74 65 64 20 6c 69 63 65 6e 73 65 Unported license
72a0: 29 22 20 7d 0d 0a 23 20 20 20 20 20 20 20 63 61 )" }..# ca
72b0: 74 65 67 6f 72 79 20 2d 73 63 68 65 6d 65 20 22 tegory -scheme "
72c0: 68 74 74 70 60 3a 2f 2f 68 75 64 64 6c 65 64 6d http`://huddledm
72d0: 61 73 73 65 73 2e 6f 72 67 2f 74 61 67 2f 22 20 asses.org/tag/"
72e0: 2d 74 65 72 6d 20 22 68 75 64 64 6c 65 64 2d 6d -term "huddled-m
72f0: 61 73 73 65 73 22 0d 0a 23 20 20 20 20 7d 0d 0a asses"..# }..
7300: 23 20 7d 20 7c 20 25 20 7b 20 24 5f 2e 44 65 63 # } | % { $_.Dec
7310: 6c 61 72 61 74 69 6f 6e 2e 54 6f 53 74 72 69 6e laration.ToStrin
7320: 67 28 29 3b 20 24 5f 2e 54 6f 53 74 72 69 6e 67 g(); $_.ToString
7330: 28 29 20 7d 0d 0a 23 0d 0a 23 20 3c 3f 78 6d 6c () }..#..# <?xml
7340: 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 65 version="1.0" e
7350: 6e 63 6f 64 69 6e 67 3d 22 55 54 46 2d 31 36 22 ncoding="UTF-16"
7360: 20 73 74 61 6e 64 61 6c 6f 6e 65 3d 22 79 65 73 standalone="yes
7370: 22 3f 3e 0d 0a 23 20 3c 66 65 65 64 20 78 6d 6c "?>..# <feed xml
7380: 3a 6c 61 6e 67 3d 22 65 6e 2d 55 53 22 20 78 6d :lang="en-US" xm
7390: 6c 6e 73 3d 22 68 74 74 70 20 3a 2f 2f 77 77 77 lns="http ://www
73a0: 2e 77 33 2e 6f 72 67 2f 32 30 30 35 2f 41 74 6f .w3.org/2005/Ato
73b0: 6d 22 3e 0d 0a 23 20 20 20 3c 74 69 74 6c 65 3e m">..# <title>
73c0: 54 65 73 74 20 46 69 72 73 74 20 45 6e 74 72 79 Test First Entry
73d0: 3c 2f 74 69 74 6c 65 3e 0d 0a 23 20 20 20 3c 6c </title>..# <l
73e0: 69 6e 6b 3e 68 74 74 70 20 3a 2f 2f 48 75 64 64 ink>http ://Hudd
73f0: 6c 65 64 4d 61 73 73 65 73 2e 6f 72 67 3c 2f 6c ledMasses.org</l
7400: 69 6e 6b 3e 0d 0a 23 20 20 20 3c 75 70 64 61 74 ink>..# <updat
7410: 65 64 3e 32 30 30 39 2d 30 37 2d 32 39 54 31 37 ed>2009-07-29T17
7420: 3a 32 35 3a 34 39 5a 3c 2f 75 70 64 61 74 65 64 :25:49Z</updated
7430: 3e 0d 0a 23 20 20 20 3c 61 75 74 68 6f 72 3e 0d >..# <author>.
7440: 0a 23 20 20 20 20 20 20 3c 6e 61 6d 65 3e 4a 6f .# <name>Jo
7450: 65 6c 20 42 65 6e 6e 65 74 74 3c 2f 6e 61 6d 65 el Bennett</name
7460: 3e 0d 0a 23 20 20 20 20 20 20 3c 75 72 69 3e 68 >..# <uri>h
7470: 74 74 70 20 3a 2f 2f 48 75 64 64 6c 65 64 4d 61 ttp ://HuddledMa
7480: 73 73 65 73 2e 6f 72 67 3c 2f 75 72 69 3e 0d 0a sses.org</uri>..
7490: 23 20 20 20 3c 2f 61 75 74 68 6f 72 3e 0d 0a 23 # </author>..#
74a0: 20 20 20 3c 69 64 3e 68 74 74 70 20 3a 2f 2f 68 <id>http ://h
74b0: 75 64 64 6c 65 64 6d 61 73 73 65 73 2e 6f 72 67 uddledmasses.org
74c0: 2f 3c 2f 69 64 3e 0d 0a 23 20 20 20 3c 65 6e 74 /</id>..# <ent
74d0: 72 79 3e 0d 0a 23 20 20 20 20 20 3c 74 69 74 6c ry>..# <titl
74e0: 65 3e 54 65 73 74 20 46 69 72 73 74 20 45 6e 74 e>Test First Ent
74f0: 72 79 3c 2f 74 69 74 6c 65 3e 0d 0a 23 20 20 20 ry</title>..#
7500: 20 20 3c 6c 69 6e 6b 3e 68 74 74 70 20 3a 2f 2f <link>http ://
7510: 48 75 64 64 6c 65 64 4d 61 73 73 65 73 2e 6f 72 HuddledMasses.or
7520: 67 2f 6e 65 77 2d 73 69 74 65 2d 6e 65 77 2d 6c g/new-site-new-l
7530: 61 79 6f 75 74 2d 6c 6f 73 74 2d 70 6f 73 74 73 ayout-lost-posts
7540: 2f 3c 2f 6c 69 6e 6b 3e 0d 0a 23 20 20 20 20 20 /</link>..#
7550: 3c 69 64 3e 68 74 74 70 20 3a 2f 2f 68 75 64 64 <id>http ://hudd
7560: 6c 65 64 6d 61 73 73 65 73 2e 6f 72 67 2f 6e 65 ledmasses.org/ne
7570: 77 2d 73 69 74 65 2d 6e 65 77 2d 6c 61 79 6f 75 w-site-new-layou
7580: 74 2d 6c 6f 73 74 2d 70 6f 73 74 73 2f 3c 2f 69 t-lost-posts/</i
7590: 64 3e 0d 0a 23 20 20 20 20 20 3c 75 70 64 61 74 d>..# <updat
75a0: 65 64 3e 32 30 30 33 2d 31 30 2d 33 31 54 30 30 ed>2003-10-31T00
75b0: 3a 30 30 3a 30 30 5a 3c 2f 75 70 64 61 74 65 64 :00:00Z</updated
75c0: 3e 0d 0a 23 20 20 20 20 20 3c 73 75 6d 6d 61 72 >..# <summar
75d0: 79 3e 45 6d 61 20 4c 61 7a 61 72 75 73 27 20 50 y>Ema Lazarus' P
75e0: 6f 65 6d 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 23 oem</summary>..#
75f0: 20 20 20 20 20 3c 6c 69 6e 6b 20 72 65 6c 3d 22 <link rel="
7600: 6c 69 63 65 6e 73 65 22 20 68 72 65 66 3d 22 68 license" href="h
7610: 74 74 70 20 3a 2f 2f 63 72 65 61 74 69 76 65 63 ttp ://creativec
7620: 6f 6d 6d 6f 6e 73 2e 6f 72 67 2f 6c 69 63 65 6e ommons.org/licen
7630: 73 65 73 2f 62 79 2f 33 2e 30 2f 22 20 74 69 74 ses/by/3.0/" tit
7640: 6c 65 3d 22 43 43 20 42 79 2d 41 74 74 72 69 62 le="CC By-Attrib
7650: 75 74 69 6f 6e 22 20 2f 3e 0d 0a 23 20 20 20 20 ution" />..#
7660: 20 3c 64 63 3a 72 69 67 68 74 73 3e 43 6f 70 79 <dc:rights>Copy
7670: 72 69 67 68 74 20 32 30 30 39 2c 20 53 6f 6d 65 right 2009, Some
7680: 20 72 69 67 68 74 73 20 72 65 73 65 72 76 65 64 rights reserved
7690: 20 28 6c 69 63 65 6e 73 65 64 20 75 6e 64 65 72 (licensed under
76a0: 20 74 68 65 20 43 72 65 61 74 69 76 65 20 43 6f the Creative Co
76b0: 6d 6d 6f 6e 73 20 41 74 74 72 69 62 75 74 69 6f mmons Attributio
76c0: 6e 20 33 2e 30 20 55 6e 70 6f 72 74 65 64 20 6c n 3.0 Unported l
76d0: 69 63 65 6e 73 65 29 3c 2f 64 63 3a 72 69 67 68 icense)</dc:righ
76e0: 74 73 3e 0d 0a 23 20 20 20 20 20 3c 63 61 74 65 ts>..# <cate
76f0: 67 6f 72 79 20 73 63 68 65 6d 65 3d 22 68 74 74 gory scheme="htt
7700: 70 20 3a 2f 2f 68 75 64 64 6c 65 64 6d 61 73 73 p ://huddledmass
7710: 65 73 2e 6f 72 67 2f 74 61 67 2f 22 20 74 65 72 es.org/tag/" ter
7720: 6d 3d 22 68 75 64 64 6c 65 64 2d 6d 61 73 73 65 m="huddled-masse
7730: 73 22 20 2f 3e 0d 0a 23 20 20 20 3c 2f 65 6e 74 s" />..# </ent
7740: 72 79 3e 0d 0a 23 20 3c 2f 66 65 65 64 3e 0d 0a ry>..# </feed>..
7750: 23 0d 0a 23 0d 0a 23 20 44 65 73 63 72 69 70 74 #..#..# Descript
7760: 69 6f 6e 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d ion..# ---------
7770: 2d 2d 0d 0a 23 20 54 68 69 73 20 65 78 61 6d 70 --..# This examp
7780: 6c 65 20 73 68 6f 77 73 20 74 68 65 20 75 73 65 le shows the use
7790: 20 6f 66 20 61 20 64 65 66 61 75 6c 74 20 6e 61 of a default na
77a0: 6d 65 73 70 61 63 65 2c 20 61 73 20 77 65 6c 6c mespace, as well
77b0: 20 61 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 73 as additional s
77c0: 70 65 63 69 66 69 63 20 6e 61 6d 65 73 70 61 63 pecific namespac
77d0: 65 73 20 66 6f 72 20 74 68 65 20 22 64 63 22 20 es for the "dc"
77e0: 6e 61 6d 65 73 70 61 63 65 2e 20 49 74 20 61 6c namespace. It al
77f0: 73 6f 20 64 65 6d 6f 6e 73 74 72 61 74 65 73 20 so demonstrates
7800: 68 6f 77 20 79 6f 75 20 63 61 6e 20 67 65 74 20 how you can get
7810: 74 68 65 20 3c 3f 78 6d 6c 3f 3e 20 64 65 63 6c the <?xml?> decl
7820: 61 72 61 74 69 6f 6e 20 77 68 69 63 68 20 64 6f aration which do
7830: 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e es not appear in
7840: 20 61 20 73 69 6d 70 6c 65 20 2e 54 6f 53 74 72 a simple .ToStr
7850: 69 6e 67 28 29 2e 0d 0a 23 0d 0a 23 20 4e 4f 54 ing()...#..# NOT
7860: 45 20 74 68 61 74 20 74 68 65 20 62 61 63 6b 74 E that the backt
7870: 69 63 6b 20 69 6e 20 74 68 65 20 68 74 74 70 60 ick in the http`
7880: 3a 20 69 6e 20 74 68 65 20 55 52 4c 73 20 69 6e : in the URLs in
7890: 20 74 68 65 20 69 6e 70 75 74 20 69 73 20 75 6e the input is un
78a0: 65 63 65 73 73 61 72 79 2c 20 61 6e 64 20 49 20 ecessary, and I
78b0: 61 64 64 65 64 20 74 68 65 20 73 70 61 63 65 20 added the space
78c0: 61 66 74 65 72 20 74 68 65 20 68 74 74 70 3a 20 after the http:
78d0: 69 6e 20 74 68 65 20 55 52 4c 73 20 20 69 6e 20 in the URLs in
78e0: 74 68 65 20 6f 75 74 70 75 74 20 2d 2d 20 74 68 the output -- th
78f0: 65 73 65 20 61 72 65 20 61 63 63 6f 6d 6f 64 61 ese are accomoda
7900: 74 69 6f 6e 73 20 74 6f 20 50 6f 73 68 43 6f 64 tions to PoshCod
7910: 65 27 73 20 73 70 61 6d 20 66 69 6c 74 65 72 2e e's spam filter.
7920: 20 42 61 63 6b 74 69 63 6b 73 20 61 72 65 20 6e Backticks are n
7930: 6f 74 20 6e 65 65 64 20 69 6e 20 74 68 65 20 69 ot need in the i
7940: 6e 70 75 74 2c 20 61 6e 64 20 73 70 61 63 65 73 nput, and spaces
7950: 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69 do not appear i
7960: 6e 20 74 68 65 20 61 63 74 75 61 6c 20 6f 75 74 n the actual out
7970: 70 75 74 2e 23 0d 0a 23 20 0d 0a 5b 43 6d 64 6c put.#..# ..[Cmdl
7980: 65 74 42 69 6e 64 69 6e 67 28 29 5d 0d 0a 50 61 etBinding()]..Pa
7990: 72 61 6d 28 0d 0a 20 20 20 5b 50 61 72 61 6d 65 ram(.. [Parame
79a0: 74 65 72 28 4d 61 6e 64 61 74 6f 72 79 20 3d 20 ter(Mandatory =
79b0: 24 74 72 75 65 2c 20 50 6f 73 69 74 69 6f 6e 20 $true, Position
79c0: 3d 20 30 29 5d 0d 0a 20 20 20 5b 53 79 73 74 65 = 0)].. [Syste
79d0: 6d 2e 58 6d 6c 2e 4c 69 6e 71 2e 58 4e 61 6d 65 m.Xml.Linq.XName
79e0: 5d 24 72 6f 6f 74 0d 0a 2c 0d 0a 20 20 20 5b 50 ]$root..,.. [P
79f0: 61 72 61 6d 65 74 65 72 28 4d 61 6e 64 61 74 6f arameter(Mandato
7a00: 72 79 20 3d 20 24 66 61 6c 73 65 29 5d 0d 0a 20 ry = $false)]..
7a10: 20 20 5b 73 74 72 69 6e 67 5d 24 56 65 72 73 69 [string]$Versi
7a20: 6f 6e 20 3d 20 22 31 2e 30 22 0d 0a 2c 0d 0a 20 on = "1.0"..,..
7a30: 20 20 5b 50 61 72 61 6d 65 74 65 72 28 4d 61 6e [Parameter(Man
7a40: 64 61 74 6f 72 79 20 3d 20 24 66 61 6c 73 65 29 datory = $false)
7a50: 5d 0d 0a 20 20 20 5b 73 74 72 69 6e 67 5d 24 45 ].. [string]$E
7a60: 6e 63 6f 64 69 6e 67 20 3d 20 22 55 54 46 2d 38 ncoding = "UTF-8
7a70: 22 0d 0a 2c 0d 0a 20 20 20 5b 50 61 72 61 6d 65 "..,.. [Parame
7a80: 74 65 72 28 4d 61 6e 64 61 74 6f 72 79 20 3d 20 ter(Mandatory =
7a90: 24 66 61 6c 73 65 29 5d 0d 0a 20 20 20 5b 73 74 $false)].. [st
7aa0: 72 69 6e 67 5d 24 53 74 61 6e 64 61 6c 6f 6e 65 ring]$Standalone
7ab0: 20 3d 20 22 79 65 73 22 0d 0a 2c 0d 0a 20 20 20 = "yes"..,..
7ac0: 5b 41 6c 6c 6f 77 4e 75 6c 6c 28 29 5d 5b 41 6c [AllowNull()][Al
7ad0: 6c 6f 77 45 6d 70 74 79 53 74 72 69 6e 67 28 29 lowEmptyString()
7ae0: 5d 5b 41 6c 6c 6f 77 45 6d 70 74 79 43 6f 6c 6c ][AllowEmptyColl
7af0: 65 63 74 69 6f 6e 28 29 5d 0d 0a 20 20 20 5b 50 ection()].. [P
7b00: 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74 69 6f arameter(Positio
7b10: 6e 3d 39 39 2c 20 4d 61 6e 64 61 74 6f 72 79 20 n=99, Mandatory
7b20: 3d 20 24 66 61 6c 73 65 2c 20 56 61 6c 75 65 46 = $false, ValueF
7b30: 72 6f 6d 52 65 6d 61 69 6e 69 6e 67 41 72 67 75 romRemainingArgu
7b40: 6d 65 6e 74 73 3d 24 74 72 75 65 29 5d 0d 0a 20 ments=$true)]..
7b50: 20 20 5b 50 53 4f 62 6a 65 63 74 5b 5d 5d 24 61 [PSObject[]]$a
7b60: 72 67 73 0d 0a 29 0d 0a 42 45 47 49 4e 20 7b 0d rgs..)..BEGIN {.
7b70: 0a 20 20 20 24 73 63 72 69 70 74 3a 4e 61 6d 65 . $script:Name
7b80: 53 70 61 63 65 48 61 73 68 20 3d 20 4e 65 77 2d SpaceHash = New-
7b90: 4f 62 6a 65 63 74 20 27 44 69 63 74 69 6f 6e 61 Object 'Dictiona
7ba0: 72 79 5b 53 74 72 69 6e 67 2c 58 4e 61 6d 65 73 ry[String,XNames
7bb0: 70 61 63 65 5d 27 0d 0a 20 20 20 69 66 28 24 72 pace]'.. if($r
7bc0: 6f 6f 74 2e 4e 61 6d 65 73 70 61 63 65 4e 61 6d oot.NamespaceNam
7bd0: 65 29 20 7b 0d 0a 20 20 20 20 20 20 24 73 63 72 e) {.. $scr
7be0: 69 70 74 3a 4e 61 6d 65 53 70 61 63 65 48 61 73 ipt:NameSpaceHas
7bf0: 68 2e 41 64 64 28 22 22 2c 20 24 72 6f 6f 74 2e h.Add("", $root.
7c00: 4e 61 6d 65 73 70 61 63 65 29 0d 0a 20 20 20 7d Namespace).. }
7c10: 0d 0a 7d 0d 0a 50 52 4f 43 45 53 53 20 7b 0d 0a ..}..PROCESS {..
7c20: 20 20 20 4e 65 77 2d 4f 62 6a 65 63 74 20 58 44 New-Object XD
7c30: 6f 63 75 6d 65 6e 74 20 28 4e 65 77 2d 4f 62 6a ocument (New-Obj
7c40: 65 63 74 20 58 44 65 63 6c 61 72 61 74 69 6f 6e ect XDeclaration
7c50: 20 24 56 65 72 73 69 6f 6e 2c 20 24 45 6e 63 6f $Version, $Enco
7c60: 64 69 6e 67 2c 20 24 73 74 61 6e 64 61 6c 6f 6e ding, $standalon
7c70: 65 29 2c 28 0d 0a 20 20 20 20 20 20 4e 65 77 2d e),(.. New-
7c80: 4f 62 6a 65 63 74 20 58 45 6c 65 6d 65 6e 74 20 Object XElement
7c90: 24 28 0d 0a 20 20 20 20 20 20 20 20 20 24 72 6f $(.. $ro
7ca0: 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 77 68 69 ot.. whi
7cb0: 6c 65 28 24 61 72 67 73 29 20 7b 0d 0a 20 20 20 le($args) {..
7cc0: 20 20 20 20 20 20 20 20 20 24 61 74 74 72 69 62 $attrib
7cd0: 2c 20 24 76 61 6c 75 65 2c 20 24 61 72 67 73 20 , $value, $args
7ce0: 3d 20 24 61 72 67 73 0d 0a 20 20 20 20 20 20 20 = $args..
7cf0: 20 20 20 20 20 69 66 28 24 61 74 74 72 69 62 20 if($attrib
7d00: 2d 69 73 20 5b 53 63 72 69 70 74 42 6c 6f 63 6b -is [ScriptBlock
7d10: 5d 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ]) {..
7d20: 20 20 20 20 20 23 20 57 72 69 74 65 2d 56 65 72 # Write-Ver
7d30: 62 6f 73 65 20 22 50 72 65 70 61 72 73 65 64 20 bose "Preparsed
7d40: 44 53 4c 3a 20 24 61 74 74 72 69 62 22 0d 0a 20 DSL: $attrib"..
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 61 $a
7d60: 74 74 72 69 62 20 3d 20 43 6f 6e 76 65 72 74 46 ttrib = ConvertF
7d70: 72 6f 6d 2d 58 6d 6c 44 73 6c 20 24 61 74 74 72 rom-XmlDsl $attr
7d80: 69 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ib..
7d90: 20 20 20 57 72 69 74 65 2d 56 65 72 62 6f 73 65 Write-Verbose
7da0: 20 22 52 65 70 61 72 73 65 64 20 44 53 4c 3a 20 "Reparsed DSL:
7db0: 24 61 74 74 72 69 62 22 0d 0a 20 20 20 20 20 20 $attrib"..
7dc0: 20 20 20 20 20 20 20 20 20 26 24 61 74 74 72 69 &$attri
7dd0: 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d b.. }
7de0: 20 65 6c 73 65 69 66 20 28 20 24 76 61 6c 75 65 elseif ( $value
7df0: 20 2d 69 73 20 5b 53 63 72 69 70 74 42 6c 6f 63 -is [ScriptBloc
7e00: 6b 5d 20 2d 61 6e 64 20 22 2d 43 4f 4e 54 45 4e k] -and "-CONTEN
7e10: 54 22 2e 53 74 61 72 74 73 57 69 74 68 28 24 61 T".StartsWith($a
7e20: 74 74 72 69 62 2e 54 72 69 6d 45 6e 64 28 27 3a ttrib.TrimEnd(':
7e30: 27 29 2e 54 6f 55 70 70 65 72 28 29 29 29 20 7b ').ToUpper())) {
7e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
7e50: 20 24 76 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72 $value = Conver
7e60: 74 46 72 6f 6d 2d 58 6d 6c 44 73 6c 20 24 76 61 tFrom-XmlDsl $va
7e70: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 lue..
7e80: 20 20 20 20 26 24 76 61 6c 75 65 0d 0a 20 20 20 &$value..
7e90: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 } elsei
7ea0: 66 20 28 20 24 76 61 6c 75 65 20 2d 69 73 20 5b f ( $value -is [
7eb0: 58 4e 61 6d 65 73 70 61 63 65 5d 29 20 7b 0d 0a XNamespace]) {..
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e N
7ed0: 65 77 2d 4f 62 6a 65 63 74 20 58 41 74 74 72 69 ew-Object XAttri
7ee0: 62 75 74 65 20 28 5b 58 4e 61 6d 65 73 70 61 63 bute ([XNamespac
7ef0: 65 5d 3a 3a 58 6d 6c 6e 73 20 2b 20 24 61 74 74 e]::Xmlns + $att
7f00: 72 69 62 2e 54 72 69 6d 53 74 61 72 74 28 22 2d rib.TrimStart("-
7f10: 22 29 2e 54 72 69 6d 45 6e 64 28 27 3a 27 29 29 ").TrimEnd(':'))
7f20: 2c 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 , $value..
7f30: 20 20 20 20 20 20 20 20 20 24 73 63 72 69 70 74 $script
7f40: 3a 4e 61 6d 65 53 70 61 63 65 48 61 73 68 2e 41 :NameSpaceHash.A
7f50: 64 64 28 24 61 74 74 72 69 62 2e 54 72 69 6d 53 dd($attrib.TrimS
7f60: 74 61 72 74 28 22 2d 22 29 2e 54 72 69 6d 45 6e tart("-").TrimEn
7f70: 64 28 27 3a 27 29 2c 20 24 76 61 6c 75 65 29 0d d(':'), $value).
7f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e
7f90: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {..
7fa0: 20 20 20 20 20 20 57 72 69 74 65 2d 56 65 72 62 Write-Verb
7fb0: 6f 73 65 20 22 58 41 74 74 72 69 62 75 74 65 20 ose "XAttribute
7fc0: 24 61 74 74 72 69 62 20 3d 20 24 76 61 6c 75 65 $attrib = $value
7fd0: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 "..
7fe0: 20 20 4e 65 77 2d 4f 62 6a 65 63 74 20 58 41 74 New-Object XAt
7ff0: 74 72 69 62 75 74 65 20 24 61 74 74 72 69 62 2e tribute $attrib.
8000: 54 72 69 6d 53 74 61 72 74 28 22 2d 22 29 2e 54 TrimStart("-").T
8010: 72 69 6d 45 6e 64 28 27 3a 27 29 2c 20 24 76 61 rimEnd(':'), $va
8020: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 lue..
8030: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }..
8040: 20 20 20 20 20 20 29 29 0d 0a 7d 0d 0a 7d 0d 0a ))..}..}..
8050: 0d 0a 53 65 74 2d 41 6c 69 61 73 20 78 6d 6c 20 ..Set-Alias xml
8060: 4e 65 77 2d 58 44 6f 63 75 6d 65 6e 74 20 2d 45 New-XDocument -E
8070: 41 20 30 0d 0a 53 65 74 2d 41 6c 69 61 73 20 4e A 0..Set-Alias N
8080: 65 77 2d 58 6d 6c 20 4e 65 77 2d 58 44 6f 63 75 ew-Xml New-XDocu
8090: 6d 65 6e 74 20 2d 45 41 20 30 0d 0a 0d 0a 66 75 ment -EA 0....fu
80a0: 6e 63 74 69 6f 6e 20 4e 65 77 2d 58 41 74 74 72 nction New-XAttr
80b0: 69 62 75 74 65 20 7b 0d 0a 23 2e 53 79 6e 6f 70 ibute {..#.Synop
80c0: 73 79 73 0d 0a 23 20 20 20 43 72 65 61 74 65 73 sys..# Creates
80d0: 20 61 20 6e 65 77 20 58 41 74 74 72 69 62 75 74 a new XAttribut
80e0: 65 20 28 61 6e 20 78 6d 6c 20 61 74 74 72 69 62 e (an xml attrib
80f0: 75 74 65 20 6f 6e 20 61 6e 20 58 45 6c 65 6d 65 ute on an XEleme
8100: 6e 74 20 66 6f 72 20 58 44 6f 63 75 6d 65 6e 74 nt for XDocument
8110: 29 0d 0a 23 2e 44 65 73 63 72 69 70 74 69 6f 6e )..#.Description
8120: 0d 0a 23 20 20 54 68 69 73 20 69 73 20 74 68 65 ..# This is the
8130: 20 77 6f 72 6b 2d 68 6f 72 73 65 20 66 6f 72 20 work-horse for
8140: 74 68 65 20 58 4d 4c 20 6d 69 6e 69 2d 64 73 6c the XML mini-dsl
8150: 0d 0a 23 2e 50 61 72 61 6d 65 74 65 72 20 6e 61 ..#.Parameter na
8160: 6d 65 0d 0a 23 20 20 20 54 68 65 20 61 74 74 72 me..# The attr
8170: 69 62 75 74 65 20 6e 61 6d 65 0d 0a 23 2e 50 61 ibute name..#.Pa
8180: 72 61 6d 65 74 65 72 20 76 61 6c 75 65 0d 0a 23 rameter value..#
8190: 20 20 54 68 65 20 61 74 74 72 69 62 75 74 65 20 The attribute
81a0: 76 61 6c 75 65 0d 0a 5b 43 6d 64 6c 65 74 42 69 value..[CmdletBi
81b0: 6e 64 69 6e 67 28 29 5d 0d 0a 50 61 72 61 6d 28 nding()]..Param(
81c0: 5b 50 61 72 61 6d 65 74 65 72 28 4d 61 6e 64 61 [Parameter(Manda
81d0: 74 6f 72 79 3d 24 74 72 75 65 29 5d 24 6e 61 6d tory=$true)]$nam
81e0: 65 2c 5b 50 61 72 61 6d 65 74 65 72 28 4d 61 6e e,[Parameter(Man
81f0: 64 61 74 6f 72 79 3d 24 74 72 75 65 29 5d 24 76 datory=$true)]$v
8200: 61 6c 75 65 29 0d 0a 20 20 20 4e 65 77 2d 4f 62 alue).. New-Ob
8210: 6a 65 63 74 20 58 41 74 74 72 69 62 75 74 65 20 ject XAttribute
8220: 24 6e 61 6d 65 2c 20 24 76 61 6c 75 65 0d 0a 7d $name, $value..}
8230: 0d 0a 53 65 74 2d 41 6c 69 61 73 20 78 61 20 4e ..Set-Alias xa N
8240: 65 77 2d 58 41 74 74 72 69 62 75 74 65 20 2d 45 ew-XAttribute -E
8250: 41 20 30 0d 0a 53 65 74 2d 41 6c 69 61 73 20 4e A 0..Set-Alias N
8260: 65 77 2d 58 6d 6c 41 74 74 72 69 62 75 74 65 20 ew-XmlAttribute
8270: 4e 65 77 2d 58 41 74 74 72 69 62 75 74 65 20 2d New-XAttribute -
8280: 45 41 20 30 0d 0a 0d 0a 0d 0a 66 75 6e 63 74 69 EA 0......functi
8290: 6f 6e 20 4e 65 77 2d 58 45 6c 65 6d 65 6e 74 20 on New-XElement
82a0: 7b 0d 0a 23 2e 53 79 6e 6f 70 73 79 73 0d 0a 23 {..#.Synopsys..#
82b0: 20 20 20 43 72 65 61 74 65 73 20 61 20 6e 65 77 Creates a new
82c0: 20 58 45 6c 65 6d 65 6e 74 20 28 61 6e 20 78 6d XElement (an xm
82d0: 6c 20 74 61 67 20 66 6f 72 20 58 44 6f 63 75 6d l tag for XDocum
82e0: 65 6e 74 29 0d 0a 23 2e 44 65 73 63 72 69 70 74 ent)..#.Descript
82f0: 69 6f 6e 0d 0a 23 20 20 54 68 69 73 20 69 73 20 ion..# This is
8300: 74 68 65 20 77 6f 72 6b 2d 68 6f 72 73 65 20 66 the work-horse f
8310: 6f 72 20 74 68 65 20 58 4d 4c 20 6d 69 6e 69 2d or the XML mini-
8320: 64 73 6c 0d 0a 23 2e 50 61 72 61 6d 65 74 65 72 dsl..#.Parameter
8330: 20 74 61 67 0d 0a 23 20 20 20 54 68 65 20 6e 61 tag..# The na
8340: 6d 65 20 6f 66 20 74 68 65 20 78 6d 6c 20 74 61 me of the xml ta
8350: 67 0d 0a 23 2e 50 61 72 61 6d 65 74 65 72 20 61 g..#.Parameter a
8360: 72 67 73 0d 0a 23 20 20 20 74 68 69 73 20 69 73 rgs..# this is
8370: 20 77 68 65 72 65 20 61 6c 6c 20 74 68 65 20 64 where all the d
8380: 73 6c 20 6d 61 67 69 63 20 68 61 70 70 65 6e 73 sl magic happens
8390: 2e 20 50 6c 65 61 73 65 20 73 65 65 20 74 68 65 . Please see the
83a0: 20 45 78 61 6d 70 6c 65 73 2e 20 3a 29 0d 0a 5b Examples. :)..[
83b0: 43 6d 64 6c 65 74 42 69 6e 64 69 6e 67 28 29 5d CmdletBinding()]
83c0: 0d 0a 50 61 72 61 6d 28 0d 0a 20 20 20 5b 50 61 ..Param(.. [Pa
83d0: 72 61 6d 65 74 65 72 28 4d 61 6e 64 61 74 6f 72 rameter(Mandator
83e0: 79 20 3d 20 24 74 72 75 65 2c 20 50 6f 73 69 74 y = $true, Posit
83f0: 69 6f 6e 20 3d 20 30 29 5d 0d 0a 20 20 20 5b 53 ion = 0)].. [S
8400: 79 73 74 65 6d 2e 58 6d 6c 2e 4c 69 6e 71 2e 58 ystem.Xml.Linq.X
8410: 4e 61 6d 65 5d 24 74 61 67 0d 0a 2c 0d 0a 20 20 Name]$tag..,..
8420: 20 5b 41 6c 6c 6f 77 4e 75 6c 6c 28 29 5d 5b 41 [AllowNull()][A
8430: 6c 6c 6f 77 45 6d 70 74 79 53 74 72 69 6e 67 28 llowEmptyString(
8440: 29 5d 5b 41 6c 6c 6f 77 45 6d 70 74 79 43 6f 6c )][AllowEmptyCol
8450: 6c 65 63 74 69 6f 6e 28 29 5d 0d 0a 20 20 20 5b lection()].. [
8460: 50 61 72 61 6d 65 74 65 72 28 50 6f 73 69 74 69 Parameter(Positi
8470: 6f 6e 3d 39 39 2c 20 4d 61 6e 64 61 74 6f 72 79 on=99, Mandatory
8480: 20 3d 20 24 66 61 6c 73 65 2c 20 56 61 6c 75 65 = $false, Value
8490: 46 72 6f 6d 52 65 6d 61 69 6e 69 6e 67 41 72 67 FromRemainingArg
84a0: 75 6d 65 6e 74 73 3d 24 74 72 75 65 29 5d 0d 0a uments=$true)]..
84b0: 20 20 20 5b 50 53 4f 62 6a 65 63 74 5b 5d 5d 24 [PSObject[]]$
84c0: 61 72 67 73 0d 0a 29 0d 0a 50 52 4f 43 45 53 53 args..)..PROCESS
84d0: 20 7b 0d 0a 20 20 4e 65 77 2d 4f 62 6a 65 63 74 {.. New-Object
84e0: 20 58 45 6c 65 6d 65 6e 74 20 24 28 0d 0a 20 20 XElement $(..
84f0: 20 20 20 24 74 61 67 0d 0a 20 20 20 20 20 77 68 $tag.. wh
8500: 69 6c 65 28 24 61 72 67 73 29 20 7b 0d 0a 20 20 ile($args) {..
8510: 20 20 20 20 20 20 24 61 74 74 72 69 62 2c 20 24 $attrib, $
8520: 76 61 6c 75 65 2c 20 24 61 72 67 73 20 3d 20 24 value, $args = $
8530: 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20 69 66 args.. if
8540: 28 24 61 74 74 72 69 62 20 2d 69 73 20 5b 53 63 ($attrib -is [Sc
8550: 72 69 70 74 42 6c 6f 63 6b 5d 29 20 7b 20 23 20 riptBlock]) { #
8560: 74 68 65 6e 20 69 74 27 73 20 63 6f 6e 74 65 6e then it's conten
8570: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 26 24 t.. &$
8580: 61 74 74 72 69 62 0d 0a 20 20 20 20 20 20 20 20 attrib..
8590: 7d 20 65 6c 73 65 69 66 20 28 20 24 76 61 6c 75 } elseif ( $valu
85a0: 65 20 2d 69 73 20 5b 53 63 72 69 70 74 42 6c 6f e -is [ScriptBlo
85b0: 63 6b 5d 20 2d 61 6e 64 20 22 2d 43 4f 4e 54 45 ck] -and "-CONTE
85c0: 4e 54 22 2e 53 74 61 72 74 73 57 69 74 68 28 24 NT".StartsWith($
85d0: 61 74 74 72 69 62 2e 54 72 69 6d 45 6e 64 28 27 attrib.TrimEnd('
85e0: 3a 27 29 2e 54 6f 55 70 70 65 72 28 29 29 29 20 :').ToUpper()))
85f0: 7b 20 23 20 74 68 65 6e 20 69 74 27 73 20 63 6f { # then it's co
8600: 6e 74 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 ntent..
8610: 20 20 26 24 76 61 6c 75 65 0d 0a 20 20 20 20 20 &$value..
8620: 20 20 20 7d 20 65 6c 73 65 69 66 20 28 20 24 76 } elseif ( $v
8630: 61 6c 75 65 20 2d 69 73 20 5b 58 4e 61 6d 65 73 alue -is [XNames
8640: 70 61 63 65 5d 29 20 7b 0d 0a 20 20 20 20 20 20 pace]) {..
8650: 20 20 20 20 20 4e 65 77 2d 4f 62 6a 65 63 74 20 New-Object
8660: 58 41 74 74 72 69 62 75 74 65 20 28 5b 58 4e 61 XAttribute ([XNa
8670: 6d 65 73 70 61 63 65 5d 3a 3a 58 6d 6c 6e 73 20 mespace]::Xmlns
8680: 2b 20 24 61 74 74 72 69 62 2e 54 72 69 6d 53 74 + $attrib.TrimSt
8690: 61 72 74 28 22 2d 22 29 2e 54 72 69 6d 45 6e 64 art("-").TrimEnd
86a0: 28 27 3a 27 29 29 2c 20 24 76 61 6c 75 65 0d 0a (':')), $value..
86b0: 20 20 20 20 20 20 20 20 20 20 20 24 73 63 72 69 $scri
86c0: 70 74 3a 4e 61 6d 65 53 70 61 63 65 48 61 73 68 pt:NameSpaceHash
86d0: 2e 41 64 64 28 24 61 74 74 72 69 62 2e 54 72 69 .Add($attrib.Tri
86e0: 6d 53 74 61 72 74 28 22 2d 22 29 2e 54 72 69 6d mStart("-").Trim
86f0: 45 6e 64 28 27 3a 27 29 2c 20 24 76 61 6c 75 65 End(':'), $value
8700: 29 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 ).. } els
8710: 65 69 66 28 24 76 61 6c 75 65 20 2d 6d 61 74 63 eif($value -matc
8720: 68 20 22 2d 28 3f 21 5c 64 29 5c 77 22 29 20 7b h "-(?!\d)\w") {
8730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 61 .. $a
8740: 72 67 73 20 3d 20 40 28 24 76 61 6c 75 65 29 2b rgs = @($value)+
8750: 40 28 24 61 72 67 73 29 0d 0a 20 20 20 20 20 20 @($args)..
8760: 20 20 7d 20 65 6c 73 65 69 66 28 24 76 61 6c 75 } elseif($valu
8770: 65 20 2d 6e 65 20 24 6e 75 6c 6c 29 20 7b 0d 0a e -ne $null) {..
8780: 20 20 20 20 20 20 20 20 20 20 20 4e 65 77 2d 4f New-O
8790: 62 6a 65 63 74 20 58 41 74 74 72 69 62 75 74 65 bject XAttribute
87a0: 20 24 61 74 74 72 69 62 2e 54 72 69 6d 53 74 61 $attrib.TrimSta
87b0: 72 74 28 22 2d 22 29 2e 54 72 69 6d 45 6e 64 28 rt("-").TrimEnd(
87c0: 27 3a 27 29 2c 20 24 76 61 6c 75 65 0d 0a 20 20 ':'), $value..
87d0: 20 20 20 20 20 20 7d 20 20 20 20 20 20 20 20 0d } .
87e0: 0a 20 20 20 20 20 20 20 20 0d 0a 20 20 20 20 20 . ..
87f0: 7d 0d 0a 20 20 20 29 0d 0a 7d 0d 0a 7d 0d 0a 53 }.. )..}..}..S
8800: 65 74 2d 41 6c 69 61 73 20 78 65 20 4e 65 77 2d et-Alias xe New-
8810: 58 45 6c 65 6d 65 6e 74 0d 0a 53 65 74 2d 41 6c XElement..Set-Al
8820: 69 61 73 20 4e 65 77 2d 58 6d 6c 45 6c 65 6d 65 ias New-XmlEleme
8830: 6e 74 20 4e 65 77 2d 58 45 6c 65 6d 65 6e 74 0d nt New-XElement.
8840: 0a 0d 0a 66 75 6e 63 74 69 6f 6e 20 43 6f 6e 76 ...function Conv
8850: 65 72 74 46 72 6f 6d 2d 58 6d 6c 44 73 6c 20 7b ertFrom-XmlDsl {
8860: 0d 0a 50 61 72 61 6d 28 5b 53 63 72 69 70 74 42 ..Param([ScriptB
8870: 6c 6f 63 6b 5d 24 73 63 72 69 70 74 29 0d 0a 20 lock]$script)..
8880: 20 20 24 70 61 72 73 65 72 72 6f 72 73 20 3d 20 $parserrors =
8890: 24 6e 75 6c 6c 0d 0a 20 20 20 24 67 6c 6f 62 61 $null.. $globa
88a0: 6c 3a 74 6f 6b 65 6e 73 20 3d 20 5b 50 53 50 61 l:tokens = [PSPa
88b0: 72 73 65 72 5d 3a 3a 54 6f 6b 65 6e 69 7a 65 28 rser]::Tokenize(
88c0: 20 24 73 63 72 69 70 74 2c 20 5b 72 65 66 5d 24 $script, [ref]$
88d0: 70 61 72 73 65 72 72 6f 72 73 20 29 0d 0a 20 20 parserrors )..
88e0: 20 5b 41 72 72 61 79 5d 24 64 75 64 73 20 3d 20 [Array]$duds =
88f0: 24 67 6c 6f 62 61 6c 3a 74 6f 6b 65 6e 73 20 7c $global:tokens |
8900: 20 57 68 65 72 65 2d 4f 62 6a 65 63 74 20 7b 20 Where-Object {
8910: 24 5f 2e 54 79 70 65 20 2d 65 71 20 22 43 6f 6d $_.Type -eq "Com
8920: 6d 61 6e 64 22 20 2d 61 6e 64 20 21 24 5f 2e 43 mand" -and !$_.C
8930: 6f 6e 74 65 6e 74 2e 43 6f 6e 74 61 69 6e 73 28 ontent.Contains(
8940: 27 2d 27 29 20 2d 61 6e 64 20 28 24 28 47 65 74 '-') -and ($(Get
8950: 2d 43 6f 6d 6d 61 6e 64 20 24 5f 2e 43 6f 6e 74 -Command $_.Cont
8960: 65 6e 74 20 2d 54 79 70 65 20 43 6d 64 6c 65 74 ent -Type Cmdlet
8970: 2c 46 75 6e 63 74 69 6f 6e 2c 45 78 74 65 72 6e ,Function,Extern
8980: 61 6c 53 63 72 69 70 74 20 2d 45 41 20 30 29 20 alScript -EA 0)
8990: 2d 65 71 20 24 4e 75 6c 6c 29 20 7d 0d 0a 20 20 -eq $Null) }..
89a0: 20 5b 41 72 72 61 79 5d 3a 3a 52 65 76 65 72 73 [Array]::Revers
89b0: 65 28 20 24 64 75 64 73 20 29 0d 0a 20 20 20 0d e( $duds ).. .
89c0: 0a 20 20 20 5b 73 74 72 69 6e 67 5b 5d 5d 24 53 . [string[]]$S
89d0: 63 72 69 70 74 54 65 78 74 20 3d 20 22 24 73 63 criptText = "$sc
89e0: 72 69 70 74 22 20 2d 73 70 6c 69 74 20 22 60 6e ript" -split "`n
89f0: 22 0d 0a 0d 0a 20 20 20 46 6f 72 45 61 63 68 28 ".... ForEach(
8a00: 24 74 6f 6b 65 6e 20 69 6e 20 24 64 75 64 73 20 $token in $duds
8a10: 29 20 7b 0d 0a 20 20 20 20 20 20 23 20 72 65 70 ) {.. # rep
8a20: 6c 61 63 65 20 3a 20 6e 6f 74 61 74 69 6f 6e 20 lace : notation
8a30: 77 69 74 68 20 6e 61 6d 65 73 70 61 63 65 20 6e with namespace n
8a40: 6f 74 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 69 otation.. i
8a50: 66 28 20 24 74 6f 6b 65 6e 2e 43 6f 6e 74 65 6e f( $token.Conten
8a60: 74 2e 43 6f 6e 74 61 69 6e 73 28 22 3a 22 29 20 t.Contains(":")
8a70: 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 24 6b ) {.. $k
8a80: 65 79 2c 20 24 6c 6f 63 61 6c 6e 61 6d 65 20 3d ey, $localname =
8a90: 20 24 74 6f 6b 65 6e 2e 43 6f 6e 74 65 6e 74 20 $token.Content
8aa0: 2d 73 70 6c 69 74 20 22 3a 22 0d 0a 20 20 20 20 -split ":"..
8ab0: 20 20 20 20 20 24 53 63 72 69 70 74 54 65 78 74 $ScriptText
8ac0: 5b 28 24 74 6f 6b 65 6e 2e 53 74 61 72 74 4c 69 [($token.StartLi
8ad0: 6e 65 20 2d 20 31 29 5d 20 3d 20 24 53 63 72 69 ne - 1)] = $Scri
8ae0: 70 74 54 65 78 74 5b 28 24 74 6f 6b 65 6e 2e 53 ptText[($token.S
8af0: 74 61 72 74 4c 69 6e 65 20 2d 20 31 29 5d 2e 52 tartLine - 1)].R
8b00: 65 6d 6f 76 65 28 20 24 74 6f 6b 65 6e 2e 53 74 emove( $token.St
8b10: 61 72 74 43 6f 6c 75 6d 6e 20 2d 31 2c 20 24 74 artColumn -1, $t
8b20: 6f 6b 65 6e 2e 4c 65 6e 67 74 68 20 29 2e 49 6e oken.Length ).In
8b30: 73 65 72 74 28 20 24 74 6f 6b 65 6e 2e 53 74 61 sert( $token.Sta
8b40: 72 74 43 6f 6c 75 6d 6e 20 2d 31 2c 20 22 27 22 rtColumn -1, "'"
8b50: 20 2b 20 24 28 24 73 63 72 69 70 74 3a 4e 61 6d + $($script:Nam
8b60: 65 53 70 61 63 65 48 61 73 68 5b 24 6b 65 79 5d eSpaceHash[$key]
8b70: 20 2b 20 24 6c 6f 63 61 6c 6e 61 6d 65 29 20 2b + $localname) +
8b80: 20 22 27 22 20 29 0d 0a 20 20 20 20 20 20 7d 20 "'" ).. }
8b90: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {..
8ba0: 20 24 53 63 72 69 70 74 54 65 78 74 5b 28 24 74 $ScriptText[($t
8bb0: 6f 6b 65 6e 2e 53 74 61 72 74 4c 69 6e 65 20 2d oken.StartLine -
8bc0: 20 31 29 5d 20 3d 20 24 53 63 72 69 70 74 54 65 1)] = $ScriptTe
8bd0: 78 74 5b 28 24 74 6f 6b 65 6e 2e 53 74 61 72 74 xt[($token.Start
8be0: 4c 69 6e 65 20 2d 20 31 29 5d 2e 52 65 6d 6f 76 Line - 1)].Remov
8bf0: 65 28 20 24 74 6f 6b 65 6e 2e 53 74 61 72 74 43 e( $token.StartC
8c00: 6f 6c 75 6d 6e 20 2d 31 2c 20 24 74 6f 6b 65 6e olumn -1, $token
8c10: 2e 4c 65 6e 67 74 68 20 29 2e 49 6e 73 65 72 74 .Length ).Insert
8c20: 28 20 24 74 6f 6b 65 6e 2e 53 74 61 72 74 43 6f ( $token.StartCo
8c30: 6c 75 6d 6e 20 2d 31 2c 20 22 27 22 20 2b 20 24 lumn -1, "'" + $
8c40: 28 24 73 63 72 69 70 74 3a 4e 61 6d 65 53 70 61 ($script:NameSpa
8c50: 63 65 48 61 73 68 5b 27 27 5d 20 2b 20 24 74 6f ceHash[''] + $to
8c60: 6b 65 6e 2e 43 6f 6e 74 65 6e 74 29 20 2b 20 22 ken.Content) + "
8c70: 27 22 20 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 '" ).. }..
8c80: 20 20 20 20 20 23 20 69 6e 73 65 72 74 20 27 78 # insert 'x
8c90: 65 27 20 62 65 66 6f 72 65 20 65 76 65 72 79 74 e' before everyt
8ca0: 68 69 6e 67 20 28 75 6e 6c 65 73 73 20 69 74 27 hing (unless it'
8cb0: 73 20 61 20 76 61 6c 69 64 20 63 6f 6d 6d 61 6e s a valid comman
8cc0: 64 29 0d 0a 20 20 20 20 20 20 24 53 63 72 69 70 d).. $Scrip
8cd0: 74 54 65 78 74 5b 28 24 74 6f 6b 65 6e 2e 53 74 tText[($token.St
8ce0: 61 72 74 4c 69 6e 65 20 2d 20 31 29 5d 20 3d 20 artLine - 1)] =
8cf0: 24 53 63 72 69 70 74 54 65 78 74 5b 28 24 74 6f $ScriptText[($to
8d00: 6b 65 6e 2e 53 74 61 72 74 4c 69 6e 65 20 2d 20 ken.StartLine -
8d10: 31 29 5d 2e 49 6e 73 65 72 74 28 20 24 74 6f 6b 1)].Insert( $tok
8d20: 65 6e 2e 53 74 61 72 74 43 6f 6c 75 6d 6e 20 2d en.StartColumn -
8d30: 31 2c 20 22 78 65 20 22 20 29 0d 0a 20 20 20 7d 1, "xe " ).. }
8d40: 0d 0a 20 20 20 57 72 69 74 65 2d 4f 75 74 70 75 .. Write-Outpu
8d50: 74 20 28 5b 53 63 72 69 70 74 42 6c 6f 63 6b 5d t ([ScriptBlock]
8d60: 3a 3a 43 72 65 61 74 65 28 20 28 24 53 63 72 69 ::Create( ($Scri
8d70: 70 74 54 65 78 74 20 2d 6a 6f 69 6e 20 22 60 6e ptText -join "`n
8d80: 22 29 20 29 29 0d 0a 7d 0d 0a 0d 0a 0d 0a 0d 0a ") ))..}........
8d90: 23 23 23 23 23 23 23 23 20 58 61 6d 6c 0d 0a 23 ######## Xaml..#
8da0: 20 20 69 66 28 24 50 53 56 65 72 73 69 6f 6e 54 if($PSVersionT
8db0: 61 62 6c 65 2e 43 4c 52 56 65 72 73 69 6f 6e 20 able.CLRVersion
8dc0: 2d 67 65 20 22 34 2e 30 22 29 7b 0d 0a 23 20 20 -ge "4.0"){..#
8dd0: 20 20 20 74 72 61 70 20 7b 20 63 6f 6e 74 69 6e trap { contin
8de0: 75 65 20 7d 0d 0a 23 20 20 20 20 20 5b 52 65 66 ue }..# [Ref
8df0: 6c 65 63 74 69 6f 6e 2e 41 73 73 65 6d 62 6c 79 lection.Assembly
8e00: 5d 3a 3a 4c 6f 61 64 57 69 74 68 50 61 72 74 69 ]::LoadWithParti
8e10: 61 6c 4e 61 6d 65 28 22 53 79 73 74 65 6d 2e 58 alName("System.X
8e20: 61 6d 6c 22 29 20 7c 20 4f 75 74 2d 4e 75 6c 6c aml") | Out-Null
8e30: 0d 0a 23 20 20 20 20 20 69 66 28 22 53 79 73 74 ..# if("Syst
8e40: 65 6d 2e 58 61 6d 6c 2e 58 61 6d 6c 53 65 72 76 em.Xaml.XamlServ
8e50: 69 63 65 73 22 20 2d 61 73 20 5b 74 79 70 65 5d ices" -as [type]
8e60: 29 20 7b 0d 0a 20 20 20 20 0d 0a 20 20 20 23 20 ) {.. .. #
8e70: 20 7d 0d 0a 23 20 20 7d 0d 0a 20 20 20 0d 0a 45 }..# }.. ..E
8e80: 78 70 6f 72 74 2d 4d 6f 64 75 6c 65 4d 65 6d 62 xport-ModuleMemb
8e90: 65 72 20 2d 61 6c 69 61 73 20 2a 20 2d 66 75 6e er -alias * -fun
8ea0: 63 74 69 6f 6e 20 4e 65 77 2d 58 44 6f 63 75 6d ction New-XDocum
8eb0: 65 6e 74 2c 20 4e 65 77 2d 58 41 74 74 72 69 62 ent, New-XAttrib
8ec0: 75 74 65 2c 20 4e 65 77 2d 58 45 6c 65 6d 65 6e ute, New-XElemen
8ed0: 74 2c 20 52 65 6d 6f 76 65 2d 58 6d 6c 4e 61 6d t, Remove-XmlNam
8ee0: 65 73 70 61 63 65 2c 20 49 6d 70 6f 72 74 2d 58 espace, Import-X
8ef0: 6d 6c 2c 20 45 78 70 6f 72 74 2d 58 6d 6c 2c 20 ml, Export-Xml,
8f00: 43 6f 6e 76 65 72 74 54 6f 2d 58 6d 6c 2c 20 53 ConvertTo-Xml, S
8f10: 65 6c 65 63 74 2d 58 6d 6c 2c 20 55 70 64 61 74 elect-Xml, Updat
8f20: 65 2d 58 6d 6c 2c 20 46 6f 72 6d 61 74 2d 58 6d e-Xml, Format-Xm
8f30: 6c 2c 20 43 6f 6e 76 65 72 74 54 6f 2d 43 6c 69 l, ConvertTo-Cli
8f40: 58 6d 6c 2c 20 43 6f 6e 76 65 72 74 46 72 6f 6d Xml, ConvertFrom
8f50: 2d 43 6c 69 58 6d 6c 0d 0a 0d 0a 23 20 53 49 47 -CliXml....# SIG
8f60: 20 23 20 42 65 67 69 6e 20 73 69 67 6e 61 74 75 # Begin signatu
8f70: 72 65 20 62 6c 6f 63 6b 0d 0a 23 20 4d 49 49 49 re block..# MIII
8f80: 44 51 59 4a 4b 6f 5a 49 68 76 63 4e 41 51 63 43 DQYJKoZIhvcNAQcC
8f90: 6f 49 49 48 2f 6a 43 43 42 2f 6f 43 41 51 45 78 oIIH/jCCB/oCAQEx
8fa0: 43 7a 41 4a 42 67 55 72 44 67 4d 43 47 67 55 41 CzAJBgUrDgMCGgUA
8fb0: 4d 47 6b 47 43 69 73 47 41 51 51 42 0d 0a 23 20 MGkGCisGAQQB..#
8fc0: 67 6a 63 43 41 51 53 67 57 7a 42 5a 4d 44 51 47 gjcCAQSgWzBZMDQG
8fd0: 43 69 73 47 41 51 51 42 67 6a 63 43 41 52 34 77 CisGAQQBgjcCAR4w
8fe0: 4a 67 49 44 41 51 41 41 42 42 41 66 7a 44 74 67 JgIDAQAABBAfzDtg
8ff0: 57 55 73 49 54 72 63 6b 30 73 59 70 66 76 4e 52 WUsITrck0sYpfvNR
9000: 0d 0a 23 20 41 67 45 41 41 67 45 41 41 67 45 41 ..# AgEAAgEAAgEA
9010: 41 67 45 41 41 67 45 41 4d 43 45 77 43 51 59 46 AgEAAgEAMCEwCQYF
9020: 4b 77 34 44 41 68 6f 46 41 41 51 55 69 4d 52 4c Kw4DAhoFAAQUiMRL
9030: 49 37 69 4c 50 65 57 75 58 4c 64 62 37 6c 4d 64 I7iLPeWuXLdb7lMd
9040: 5a 6c 79 6d 0d 0a 23 20 66 7a 43 67 67 67 55 72 Zlym..# fzCgggUr
9050: 4d 49 49 46 4a 7a 43 43 42 41 2b 67 41 77 49 42 MIIFJzCCBA+gAwIB
9060: 41 67 49 51 48 43 41 67 66 35 37 70 56 4f 6e 4a AgIQHCAgf57pVOnJ
9070: 63 6a 4b 72 4d 4f 2f 64 74 6a 41 4e 42 67 6b 71 cjKrMO/dtjANBgkq
9080: 68 6b 69 47 39 77 30 42 0d 0a 23 20 41 51 55 46 hkiG9w0B..# AQUF
9090: 41 44 43 42 6c 54 45 4c 4d 41 6b 47 41 31 55 45 ADCBlTELMAkGA1UE
90a0: 42 68 4d 43 56 56 4d 78 43 7a 41 4a 42 67 4e 56 BhMCVVMxCzAJBgNV
90b0: 42 41 67 54 41 6c 56 55 4d 52 63 77 46 51 59 44 BAgTAlVUMRcwFQYD
90c0: 56 51 51 48 45 77 35 54 59 57 78 30 0d 0a 23 20 VQQHEw5TYWx0..#
90d0: 49 45 78 68 61 32 55 67 51 32 6c 30 65 54 45 65 IExha2UgQ2l0eTEe
90e0: 4d 42 77 47 41 31 55 45 43 68 4d 56 56 47 68 6c MBwGA1UEChMVVGhl
90f0: 49 46 56 54 52 56 4a 55 55 6c 56 54 56 43 42 4f IFVTRVJUUlVTVCBO
9100: 5a 58 52 33 62 33 4a 72 4d 53 45 77 48 77 59 44 ZXR3b3JrMSEwHwYD
9110: 0d 0a 23 20 56 51 51 4c 45 78 68 6f 64 48 52 77 ..# VQQLExhodHRw
9120: 4f 69 38 76 64 33 64 33 4c 6e 56 7a 5a 58 4a 30 Oi8vd3d3LnVzZXJ0
9130: 63 6e 56 7a 64 43 35 6a 62 32 30 78 48 54 41 62 cnVzdC5jb20xHTAb
9140: 42 67 4e 56 42 41 4d 54 46 46 56 55 54 69 31 56 BgNVBAMTFFVUTi1V
9150: 55 30 56 53 0d 0a 23 20 52 6d 6c 79 63 33 51 74 U0VS..# Rmlyc3Qt
9160: 54 32 4a 71 5a 57 4e 30 4d 42 34 58 44 54 45 78 T2JqZWN0MB4XDTEx
9170: 4d 44 51 79 4e 54 41 77 4d 44 41 77 4d 46 6f 58 MDQyNTAwMDAwMFoX
9180: 44 54 45 79 4d 44 51 79 4e 44 49 7a 4e 54 6b 31 DTEyMDQyNDIzNTk1
9190: 4f 56 6f 77 67 5a 55 78 0d 0a 23 20 43 7a 41 4a OVowgZUx..# CzAJ
91a0: 42 67 4e 56 42 41 59 54 41 6c 56 54 4d 51 34 77 BgNVBAYTAlVTMQ4w
91b0: 44 41 59 44 56 51 51 52 44 41 55 77 4e 6a 67 31 DAYDVQQRDAUwNjg1
91c0: 4d 44 45 55 4d 42 49 47 41 31 55 45 43 41 77 4c MDEUMBIGA1UECAwL
91d0: 51 32 39 75 62 6d 56 6a 64 47 6c 6a 0d 0a 23 20 Q29ubmVjdGlj..#
91e0: 64 58 51 78 45 44 41 4f 42 67 4e 56 42 41 63 4d dXQxEDAOBgNVBAcM
91f0: 42 30 35 76 63 6e 64 68 62 47 73 78 46 6a 41 55 B05vcndhbGsxFjAU
9200: 42 67 4e 56 42 41 6b 4d 44 54 51 31 49 45 64 73 BgNVBAkMDTQ1IEds
9210: 62 33 5a 6c 63 69 42 42 64 6d 55 78 47 6a 41 59 b3ZlciBBdmUxGjAY
9220: 0d 0a 23 20 42 67 4e 56 42 41 6f 4d 45 56 68 6c ..# BgNVBAoMEVhl
9230: 63 6d 39 34 49 45 4e 76 63 6e 42 76 63 6d 46 30 cm94IENvcnBvcmF0
9240: 61 57 39 75 4d 52 6f 77 47 41 59 44 56 51 51 44 aW9uMRowGAYDVQQD
9250: 44 42 46 59 5a 58 4a 76 65 43 42 44 62 33 4a 77 DBFYZXJveCBDb3Jw
9260: 62 33 4a 68 0d 0a 23 20 64 47 6c 76 62 6a 43 43 b3Jh..# dGlvbjCC
9270: 41 53 49 77 44 51 59 4a 4b 6f 5a 49 68 76 63 4e ASIwDQYJKoZIhvcN
9280: 41 51 45 42 42 51 41 44 67 67 45 50 41 44 43 43 AQEBBQADggEPADCC
9290: 41 51 6f 43 67 67 45 42 41 4e 61 58 52 2b 38 57 AQoCggEBANaXR+8W
92a0: 2b 61 48 36 6f 66 69 4f 0d 0a 23 20 62 5a 52 64 +aH6ofiO..# bZRd
92b0: 49 52 42 75 76 65 6d 4a 2f 38 63 32 66 44 77 62 IRBuvemJ/8c2fDwb
92c0: 48 56 4c 42 4d 69 65 69 47 39 45 71 73 35 2b 58 HVLBMieiG9Eqs5+X
92d0: 4b 5a 33 4d 31 37 53 7a 38 47 42 4e 7a 51 34 62 KZ3M17Sz8GBNzQ4b
92e0: 6c 75 6b 32 65 73 49 79 63 72 39 7a 0d 0a 23 20 luk2esIycr9z..#
92f0: 79 52 2f 49 53 42 6a 56 78 7a 31 52 63 78 48 37 yR/ISBjVxz1RcxH7
9300: 39 76 75 76 4d 36 68 75 73 4f 41 4b 63 32 59 68 9vuvM6husOAKc2Yh
9310: 6e 47 71 41 36 76 6d 66 57 6f 6b 6d 45 66 44 72 nGqA6vmfWokmEfDr
9320: 4f 48 31 71 4c 4b 41 34 32 32 36 74 50 58 42 45 OH1qLKA4226tPXBE
9330: 0d 0a 23 20 65 4e 54 53 44 72 59 74 58 46 5a 36 ..# eNTSDrYtXFZ6
9340: 6a 59 57 76 39 6b 71 47 63 52 4d 42 7a 56 37 4e jYWv9kqGcRMBzV7N
9350: 50 76 4a 77 51 6f 4d 44 45 6c 31 64 62 4e 41 58 PvJwQoMDEl1dbNAX
9360: 6f 39 39 52 61 48 47 6a 41 66 56 6b 43 53 4e 59 o99RaHGjAfVkCSNY
9370: 4d 4d 31 31 0d 0a 23 20 6a 7a 5a 32 2f 44 79 41 MM11..# jzZ2/DyA
9380: 71 56 67 4b 56 6e 4e 76 69 52 51 2b 57 71 38 48 qVgKVnNviRQ+Wq8H
9390: 50 78 50 37 45 71 67 2f 36 62 32 44 56 77 31 4e PxP7Eqg/6b2DVw1N
93a0: 6f 6b 67 33 49 44 65 79 46 52 6c 6f 32 68 65 30 okg3IDeyFRlo2he0
93b0: 39 59 77 56 45 56 2b 72 0d 0a 23 20 47 4c 76 6a 9YwVEV+r..# GLvj
93c0: 55 42 6d 56 52 51 50 61 75 4a 49 72 31 45 55 67 UBmVRQPauJIr1EUg
93d0: 7a 38 35 62 79 57 74 59 41 55 57 4f 58 4e 49 46 z85byWtYAUWOXNIF
93e0: 69 57 72 71 4f 4b 6a 2f 43 6c 76 69 35 59 39 4d iWrqOKj/Clvi5Y9M
93f0: 30 35 61 31 54 77 53 69 34 6f 30 46 0d 0a 23 20 05a1TwSi4o0F..#
9400: 79 66 61 34 6b 65 45 43 41 77 45 41 41 61 4f 43 yfa4keECAwEAAaOC
9410: 41 57 38 77 67 67 46 72 4d 42 38 47 41 31 55 64 AW8wggFrMB8GA1Ud
9420: 49 77 51 59 4d 42 61 41 46 4e 72 74 5a 48 51 55 IwQYMBaAFNrtZHQU
9430: 6e 42 51 38 71 39 32 5a 71 62 31 62 4b 45 32 4c nBQ8q92Zqb1bKE2L
9440: 0d 0a 23 20 50 4d 6e 59 4d 42 30 47 41 31 55 64 ..# PMnYMB0GA1Ud
9450: 44 67 51 57 42 42 54 4b 61 44 67 51 30 6c 54 6f DgQWBBTKaDgQ0lTo
9460: 55 48 41 49 2b 6a 79 2f 43 44 6e 30 42 6c 75 58 UHAI+jy/CDn0BluX
9470: 46 6a 41 4f 42 67 4e 56 48 51 38 42 41 66 38 45 FjAOBgNVHQ8BAf8E
9480: 42 41 4d 43 0d 0a 23 20 42 34 41 77 44 41 59 44 BAMC..# B4AwDAYD
9490: 56 52 30 54 41 51 48 2f 42 41 49 77 41 44 41 54 VR0TAQH/BAIwADAT
94a0: 42 67 4e 56 48 53 55 45 44 44 41 4b 42 67 67 72 BgNVHSUEDDAKBggr
94b0: 42 67 45 46 42 51 63 44 41 7a 41 52 42 67 6c 67 BgEFBQcDAzARBglg
94c0: 68 6b 67 42 68 76 68 43 0d 0a 23 20 41 51 45 45 hkgBhvhC..# AQEE
94d0: 42 41 4d 43 42 42 41 77 52 67 59 44 56 52 30 67 BAMCBBAwRgYDVR0g
94e0: 42 44 38 77 50 54 41 37 42 67 77 72 42 67 45 45 BD8wPTA7BgwrBgEE
94f0: 41 62 49 78 41 51 49 42 41 77 49 77 4b 7a 41 70 AbIxAQIBAwIwKzAp
9500: 42 67 67 72 42 67 45 46 42 51 63 43 0d 0a 23 20 BggrBgEFBQcC..#
9510: 41 52 59 64 61 48 52 30 63 48 4d 36 4c 79 39 7a ARYdaHR0cHM6Ly9z
9520: 5a 57 4e 31 63 6d 55 75 59 32 39 74 62 32 52 76 ZWN1cmUuY29tb2Rv
9530: 4c 6d 35 6c 64 43 39 44 55 46 4d 77 51 67 59 44 Lm5ldC9DUFMwQgYD
9540: 56 52 30 66 42 44 73 77 4f 54 41 33 6f 44 57 67 VR0fBDswOTA3oDWg
9550: 0d 0a 23 20 4d 34 59 78 61 48 52 30 63 44 6f 76 ..# M4YxaHR0cDov
9560: 4c 32 4e 79 62 43 35 31 63 32 56 79 64 48 4a 31 L2NybC51c2VydHJ1
9570: 63 33 51 75 59 32 39 74 4c 31 56 55 54 69 31 56 c3QuY29tL1VUTi1V
9580: 55 30 56 53 52 6d 6c 79 63 33 51 74 54 32 4a 71 U0VSRmlyc3QtT2Jq
9590: 5a 57 4e 30 0d 0a 23 20 4c 6d 4e 79 62 44 41 30 ZWN0..# LmNybDA0
95a0: 42 67 67 72 42 67 45 46 42 51 63 42 41 51 51 6f BggrBgEFBQcBAQQo
95b0: 4d 43 59 77 4a 41 59 49 4b 77 59 42 42 51 55 48 MCYwJAYIKwYBBQUH
95c0: 4d 41 47 47 47 47 68 30 64 48 41 36 4c 79 39 76 MAGGGGh0dHA6Ly9v
95d0: 59 33 4e 77 4c 6d 4e 76 0d 0a 23 20 62 57 39 6b Y3NwLmNv..# bW9k
95e0: 62 32 4e 68 4c 6d 4e 76 62 54 41 68 42 67 4e 56 b2NhLmNvbTAhBgNV
95f0: 48 52 45 45 47 6a 41 59 67 52 5a 4b 62 32 56 73 HREEGjAYgRZKb2Vs
9600: 4c 6b 4a 6c 62 6d 35 6c 64 48 52 41 65 47 56 79 LkJlbm5ldHRAeGVy
9610: 62 33 67 75 59 32 39 74 4d 41 30 47 0d 0a 23 20 b3guY29tMA0G..#
9620: 43 53 71 47 53 49 62 33 44 51 45 42 42 51 55 41 CSqGSIb3DQEBBQUA
9630: 41 34 49 42 41 51 41 7a 77 55 77 79 30 30 73 45 A4IBAQAzwUwy00sE
9640: 4f 67 67 41 61 76 71 72 4e 6f 4e 65 45 56 72 30 OggAavqrNoNeEVr0
9650: 6f 36 32 33 44 67 47 32 2f 32 45 75 54 73 41 36 o623DgG2/2EuTsA6
9660: 0d 0a 23 20 32 77 49 30 41 72 62 35 44 30 73 2f ..# 2wI0Arb5D0s/
9670: 69 63 61 6e 73 68 48 67 57 77 4a 5a 42 45 4d 5a icanshHgWwJZBEMZ
9680: 65 48 61 31 37 41 69 2f 45 33 66 6f 43 70 6a 36 eHa17Ai/E3foCpj6
9690: 72 41 33 59 34 76 49 51 58 48 75 6b 6c 75 69 53 rA3Y4vIQXHukluiS
96a0: 6d 6a 55 36 0d 0a 23 20 62 57 54 67 46 35 56 62 mjU6..# bWTgF5Vb
96b0: 4e 54 70 76 68 6c 4f 4f 36 45 37 59 61 2f 72 42 NTpvhlOO6E7Ya/rB
96c0: 72 34 6f 6a 34 64 71 54 45 45 72 6b 53 37 61 63 r4oj4dqTEErkS7ac
96d0: 67 42 48 4b 72 6a 50 4f 70 74 43 69 55 34 42 53 gBHKrjPOptCiU4BS
96e0: 44 71 74 6c 30 6b 35 7a 0d 0a 23 20 4f 49 69 61 Dqtl0k5z..# OIia
96f0: 77 79 52 53 49 54 48 59 45 63 43 63 49 30 59 6c wyRSITHYEcCcI0Yl
9700: 37 56 49 7a 38 45 44 62 6c 4f 51 49 33 62 34 4a 7VIz8EDblOQI3b4J
9710: 47 59 63 6d 4a 37 44 2b 70 65 59 72 6e 49 32 7a GYcmJ7D+peYrnI2z
9720: 6f 51 79 58 44 69 67 63 49 6a 34 6c 0d 0a 23 20 oQyXDigcIj4l..#
9730: 56 6c 69 70 6e 6a 6e 76 59 73 46 2b 4a 62 50 6b VlipnjnvYsF+JbPk
9740: 51 59 38 58 62 4d 4f 2b 59 63 34 39 30 42 68 38 QY8XbMO+Yc490Bh8
9750: 42 4d 58 50 74 75 4c 52 31 4b 4d 75 49 58 50 4b BMXPtuLR1KMuIXPK
9760: 37 44 4b 58 37 4a 50 6d 4a 63 59 37 6b 4b 46 2f 7DKX7JPmJcY7kKF/
9770: 0d 0a 23 20 53 50 76 69 79 6b 30 48 45 37 52 6c ..# SPviyk0HE7Rl
9780: 64 73 73 65 73 37 33 55 46 38 77 54 33 6c 67 6a dsses73UF8wT3lgj
9790: 35 37 46 69 55 71 58 38 46 64 54 61 37 4e 6c 6c 57FiUqX8FdTa7Nll
97a0: 4d 59 49 43 54 44 43 43 41 6b 67 43 41 51 45 77 MYICTDCCAkgCAQEw
97b0: 67 61 6f 77 0d 0a 23 20 67 5a 55 78 43 7a 41 4a gaow..# gZUxCzAJ
97c0: 42 67 4e 56 42 41 59 54 41 6c 56 54 4d 51 73 77 BgNVBAYTAlVTMQsw
97d0: 43 51 59 44 56 51 51 49 45 77 4a 56 56 44 45 58 CQYDVQQIEwJVVDEX
97e0: 4d 42 55 47 41 31 55 45 42 78 4d 4f 55 32 46 73 MBUGA1UEBxMOU2Fs
97f0: 64 43 42 4d 59 57 74 6c 0d 0a 23 20 49 45 4e 70 dCBMYWtl..# IENp
9800: 64 48 6b 78 48 6a 41 63 42 67 4e 56 42 41 6f 54 dHkxHjAcBgNVBAoT
9810: 46 56 52 6f 5a 53 42 56 55 30 56 53 56 46 4a 56 FVRoZSBVU0VSVFJV
9820: 55 31 51 67 54 6d 56 30 64 32 39 79 61 7a 45 68 U1QgTmV0d29yazEh
9830: 4d 42 38 47 41 31 55 45 43 78 4d 59 0d 0a 23 20 MB8GA1UECxMY..#
9840: 61 48 52 30 63 44 6f 76 4c 33 64 33 64 79 35 31 aHR0cDovL3d3dy51
9850: 63 32 56 79 64 48 4a 31 63 33 51 75 59 32 39 74 c2VydHJ1c3QuY29t
9860: 4d 52 30 77 47 77 59 44 56 51 51 44 45 78 52 56 MR0wGwYDVQQDExRV
9870: 56 45 34 74 56 56 4e 46 55 6b 5a 70 63 6e 4e 30 VE4tVVNFUkZpcnN0
9880: 0d 0a 23 20 4c 55 39 69 61 6d 56 6a 64 41 49 51 ..# LU9iamVjdAIQ
9890: 48 43 41 67 66 35 37 70 56 4f 6e 4a 63 6a 4b 72 HCAgf57pVOnJcjKr
98a0: 4d 4f 2f 64 74 6a 41 4a 42 67 55 72 44 67 4d 43 MO/dtjAJBgUrDgMC
98b0: 47 67 55 41 6f 48 67 77 47 41 59 4b 4b 77 59 42 GgUAoHgwGAYKKwYB
98c0: 42 41 47 43 0d 0a 23 20 4e 77 49 42 44 44 45 4b BAGC..# NwIBDDEK
98d0: 4d 41 69 67 41 6f 41 41 6f 51 4b 41 41 44 41 5a MAigAoAAoQKAADAZ
98e0: 42 67 6b 71 68 6b 69 47 39 77 30 42 43 51 4d 78 BgkqhkiG9w0BCQMx
98f0: 44 41 59 4b 4b 77 59 42 42 41 47 43 4e 77 49 42 DAYKKwYBBAGCNwIB
9900: 42 44 41 63 42 67 6f 72 0d 0a 23 20 42 67 45 45 BDAcBgor..# BgEE
9910: 41 59 49 33 41 67 45 4c 4d 51 34 77 44 41 59 4b AYI3AgELMQ4wDAYK
9920: 4b 77 59 42 42 41 47 43 4e 77 49 42 46 54 41 6a KwYBBAGCNwIBFTAj
9930: 42 67 6b 71 68 6b 69 47 39 77 30 42 43 51 51 78 BgkqhkiG9w0BCQQx
9940: 46 67 51 55 67 63 32 41 6b 56 71 45 0d 0a 23 20 FgQUgc2AkVqE..#
9950: 45 4e 38 34 39 6a 38 47 30 47 6f 68 4c 6c 77 75 EN849j8G0GohLlwu
9960: 65 4a 34 77 44 51 59 4a 4b 6f 5a 49 68 76 63 4e eJ4wDQYJKoZIhvcN
9970: 41 51 45 42 42 51 41 45 67 67 45 41 4c 73 44 46 AQEBBQAEggEALsDF
9980: 42 76 4c 6e 31 53 45 42 6b 2b 66 79 4c 67 48 4c BvLn1SEBk+fyLgHL
9990: 0d 0a 23 20 69 62 6b 41 48 44 74 72 57 4d 77 66 ..# ibkAHDtrWMwf
99a0: 53 4c 76 4f 76 33 53 77 36 31 4f 61 2b 6d 76 69 SLvOv3Sw61Oa+mvi
99b0: 4a 70 38 48 30 70 4f 44 61 2b 33 7a 66 4a 78 45 Jp8H0pODa+3zfJxE
99c0: 6f 52 61 30 4a 48 59 57 55 53 4d 75 74 4e 47 30 oRa0JHYWUSMutNG0
99d0: 43 49 67 39 0d 0a 23 20 59 69 45 66 31 48 4c 4e CIg9..# YiEf1HLN
99e0: 6f 59 61 6d 39 73 39 72 74 52 39 59 57 64 76 39 oYam9s9rtR9YWdv9
99f0: 77 78 33 43 6b 55 39 43 69 32 79 47 66 42 34 6f wx3CkU9Ci2yGfB4o
9a00: 45 63 31 65 43 67 2f 31 70 72 45 48 47 37 58 57 Ec1eCg/1prEHG7XW
9a10: 6a 71 5a 44 43 36 75 47 0d 0a 23 20 76 68 46 55 jqZDC6uG..# vhFU
9a20: 4e 44 48 70 39 73 57 53 46 2f 72 75 56 53 33 52 NDHp9sWSF/ruVS3R
9a30: 42 45 6d 32 56 42 4a 6b 76 65 68 70 49 73 42 34 BEm2VBJkvehpIsB4
9a40: 57 73 51 30 61 75 6e 44 68 73 55 34 74 32 6f 46 WsQ0aunDhsU4t2oF
9a50: 6e 46 59 43 30 6c 65 61 61 73 46 79 0d 0a 23 20 nFYC0leaasFy..#
9a60: 72 4c 4e 7a 7a 6a 39 54 34 43 5a 46 79 64 74 54 rLNzzj9T4CZFydtT
9a70: 56 68 35 78 76 58 47 30 6c 57 76 35 53 4d 4e 68 Vh5xvXG0lWv5SMNh
9a80: 71 65 67 59 6a 6c 2b 67 66 78 47 78 72 4c 42 72 qegYjl+gfxGxrLBr
9a90: 4e 5a 69 43 54 6b 43 38 76 58 32 63 35 45 48 4e NZiCTkC8vX2c5EHN
9aa0: 0d 0a 23 20 41 68 73 71 44 35 33 74 48 30 77 70 ..# AhsqD53tH0wp
9ab0: 43 2b 69 63 4c 6f 4b 2b 66 2f 44 50 7a 69 36 78 C+icLoK+f/DPzi6x
9ac0: 71 4a 56 4f 61 51 31 6f 72 75 46 6b 39 34 52 59 qJVOaQ1oruFk94RY
9ad0: 4e 52 41 46 47 63 67 57 49 6e 71 4b 63 32 47 76 NRAFGcgWInqKc2Gv
9ae0: 73 66 36 50 0d 0a 23 20 72 41 3d 3d 0d 0a 23 20 sf6P..# rA==..#
9af0: 53 49 47 20 23 20 45 6e 64 20 73 69 67 6e 61 74 SIG # End signat
9b00: 75 72 65 20 62 6c 6f 63 6b 0d 0a ure block..