PoshCode Archive  Hex Artifact Content

Artifact 1d34c5526067822d70116dd7cefd48b65b98a770e584b6c5ab135ec8996e167e:

  • File Write-Output.ps1 — part of check-in [7ced72fad0] at 2018-06-10 13:08:22 on branch trunk — A Write-Output replacement with the option to output collections that don’t unwrap. (user: Joel Bennett size: 4993)

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 57  hell..# title: W
0030: 72 69 74 65 2d 4f 75 74 70 75 74 0d 0a 23 20 64  rite-Output..# d
0040: 65 73 63 72 69 70 74 69 6f 6e 3a 20 41 20 57 72  escription: A Wr
0050: 69 74 65 2d 4f 75 74 70 75 74 20 72 65 70 6c 61  ite-Output repla
0060: 63 65 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20  cement with the 
0070: 6f 70 74 69 6f 6e 20 74 6f 20 6f 75 74 70 75 74  option to output
0080: 20 63 6f 6c 6c 65 63 74 69 6f 6e 73 20 74 68 61   collections tha
0090: 74 20 64 6f 6e e2 80 99 74 20 75 6e 77 72 61 70  t don...t unwrap
00a0: 2e 0d 0a 23 20 76 65 72 73 69 6f 6e 3a 20 30 2e  ...# version: 0.
00b0: 31 0d 0a 23 20 74 79 70 65 3a 20 66 75 6e 63 74  1..# type: funct
00c0: 69 6f 6e 0d 0a 23 20 61 75 74 68 6f 72 3a 20 4a  ion..# author: J
00d0: 6f 65 6c 20 42 65 6e 6e 65 74 74 0d 0a 23 20 6c  oel Bennett..# l
00e0: 69 63 65 6e 73 65 3a 20 4d 53 2d 50 4c 2c 20 4d  icense: MS-PL, M
00f0: 53 2d 52 4c 2c 20 47 50 4c 20 32 2c 20 6f 72 20  S-RL, GPL 2, or 
0100: 42 53 44 0d 0a 23 20 66 75 6e 63 74 69 6f 6e 3a  BSD..# function:
0110: 20 57 72 69 74 65 2d 4f 75 74 70 75 74 0d 0a 23   Write-Output..#
0120: 20 78 2d 70 6f 73 68 63 6f 64 65 2d 69 64 3a 20   x-poshcode-id: 
0130: 32 33 30 30 0d 0a 23 20 78 2d 61 72 63 68 69 76  2300..# x-archiv
0140: 65 64 3a 20 32 30 31 30 2d 31 30 2d 32 30 54 30  ed: 2010-10-20T0
0150: 39 3a 31 36 3a 33 32 0d 0a 23 0d 0a 23 20 53 69  9:16:32..#..# Si
0160: 6d 70 6c 69 66 69 65 64 20 74 68 65 20 70 61 72  mplified the par
0170: 61 6d 65 74 65 72 73 20 74 6f 20 6a 75 73 74 20  ameters to just 
0180: 2d 41 73 43 6f 6c 6c 65 63 74 69 6f 6e 0d 0a 23  -AsCollection..#
0190: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
01a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01d0: 23 23 23 23 23 23 23 23 23 23 0d 0a 23 23 20 43  ##########..## C
01e0: 6f 70 79 72 69 67 68 74 20 28 63 29 20 4a 6f 65  opyright (c) Joe
01f0: 6c 20 42 65 6e 6e 65 74 74 2c 20 32 30 31 30 0d  l Bennett, 2010.
0200: 0a 23 23 20 46 72 65 65 20 66 6f 72 20 75 73 65  .## Free for use
0210: 20 75 6e 64 65 72 20 4d 53 2d 50 4c 2c 20 4d 53   under MS-PL, MS
0220: 2d 52 4c 2c 20 47 50 4c 20 32 2c 20 6f 72 20 42  -RL, GPL 2, or B
0230: 53 44 20 6c 69 63 65 6e 73 65 2e 20 59 6f 75 72  SD license. Your
0240: 20 63 68 6f 69 63 65 2e 20 0d 0a 0d 0a 66 75 6e   choice. ....fun
0250: 63 74 69 6f 6e 20 57 72 69 74 65 2d 4f 75 74 70  ction Write-Outp
0260: 75 74 20 7b 0d 0a 5b 43 6d 64 6c 65 74 42 69 6e  ut {..[CmdletBin
0270: 64 69 6e 67 28 29 5d 0d 0a 70 61 72 61 6d 28 0d  ding()]..param(.
0280: 0a 20 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28  .    [Parameter(
0290: 4d 61 6e 64 61 74 6f 72 79 3d 24 74 72 75 65 2c  Mandatory=$true,
02a0: 20 50 6f 73 69 74 69 6f 6e 3d 30 2c 20 56 61 6c   Position=0, Val
02b0: 75 65 46 72 6f 6d 50 69 70 65 6c 69 6e 65 3d 24  ueFromPipeline=$
02c0: 74 72 75 65 29 5d 0d 0a 20 20 20 20 5b 41 6c 6c  true)]..    [All
02d0: 6f 77 45 6d 70 74 79 43 6f 6c 6c 65 63 74 69 6f  owEmptyCollectio
02e0: 6e 28 29 5d 0d 0a 20 20 20 20 5b 41 6c 6c 6f 77  n()]..    [Allow
02f0: 4e 75 6c 6c 28 29 5d 0d 0a 20 20 20 20 5b 53 79  Null()]..    [Sy
0300: 73 74 65 6d 2e 4d 61 6e 61 67 65 6d 65 6e 74 2e  stem.Management.
0310: 41 75 74 6f 6d 61 74 69 6f 6e 2e 50 53 4f 62 6a  Automation.PSObj
0320: 65 63 74 5d 0d 0a 20 20 20 20 24 7b 49 6e 70 75  ect]..    ${Inpu
0330: 74 4f 62 6a 65 63 74 7d 0d 0a 2c 0d 0a 09 5b 50  tObject}..,...[P
0340: 61 72 61 6d 65 74 65 72 28 29 5d 0d 0a 09 5b 53  arameter()]...[S
0350: 77 69 74 63 68 5d 0d 0a 09 5b 41 6c 69 61 73 28  witch]...[Alias(
0360: 22 50 72 65 76 65 6e 74 55 6e 72 6f 6c 6c 69 6e  "PreventUnrollin
0370: 67 22 29 5d 0d 0a 09 24 41 73 43 6f 6c 6c 65 63  g")]...$AsCollec
0380: 74 69 6f 6e 0d 0a 29 0d 0a 0d 0a 62 65 67 69 6e  tion..)....begin
0390: 0d 0a 7b 0d 0a 09 24 43 6f 6c 6c 65 63 74 69 6f  ..{...$Collectio
03a0: 6e 20 3d 20 4e 65 77 2d 4f 62 6a 65 63 74 20 53  n = New-Object S
03b0: 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e  ystem.Collection
03c0: 73 2e 47 65 6e 65 72 69 63 2e 4c 69 73 74 5b 50  s.Generic.List[P
03d0: 53 4f 62 6a 65 63 74 5d 0d 0a 7d 0d 0a 0d 0a 70  SObject]..}....p
03e0: 72 6f 63 65 73 73 0d 0a 7b 0d 0a 09 69 66 28 24  rocess..{...if($
03f0: 49 6e 70 75 74 4f 62 6a 65 63 74 29 20 7b 0d 0a  InputObject) {..
0400: 09 09 69 66 28 24 41 73 43 6f 6c 6c 65 63 74 69  ..if($AsCollecti
0410: 6f 6e 29 20 7b 0d 0a 09 09 09 24 43 6f 6c 6c 65  on) {.....$Colle
0420: 63 74 69 6f 6e 2e 41 64 64 52 61 6e 67 65 28 20  ction.AddRange( 
0430: 28 5b 50 53 4f 62 6a 65 63 74 5b 5d 5d 40 28 24  ([PSObject[]]@($
0440: 49 6e 70 75 74 4f 62 6a 65 63 74 29 29 20 29 0d  InputObject)) ).
0450: 0a 09 09 7d 20 65 6c 73 65 20 7b 0d 0a 09 09 09  ...} else {.....
0460: 24 50 53 43 6d 64 6c 65 74 2e 57 72 69 74 65 4f  $PSCmdlet.WriteO
0470: 62 6a 65 63 74 28 20 24 49 6e 70 75 74 4f 62 6a  bject( $InputObj
0480: 65 63 74 2c 20 24 74 72 75 65 20 29 0d 0a 09 09  ect, $true )....
0490: 7d 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 65 6e 64 0d  }...}..}....end.
04a0: 0a 7b 0d 0a 09 69 66 28 24 41 73 43 6f 6c 6c 65  .{...if($AsColle
04b0: 63 74 69 6f 6e 29 20 7b 0d 0a 09 09 24 50 53 43  ction) {....$PSC
04c0: 6d 64 6c 65 74 2e 57 72 69 74 65 4f 62 6a 65 63  mdlet.WriteObjec
04d0: 74 28 20 24 43 6f 6c 6c 65 63 74 69 6f 6e 2c 20  t( $Collection, 
04e0: 24 66 61 6c 73 65 20 29 0d 0a 09 7d 0d 0a 7d 0d  $false )...}..}.
04f0: 0a 3c 23 0d 0a 2e 53 59 4e 4f 50 53 49 53 0d 0a  .<#...SYNOPSIS..
0500: 20 20 20 20 53 65 6e 64 73 20 74 68 65 20 73 70      Sends the sp
0510: 65 63 69 66 69 65 64 20 6f 62 6a 65 63 74 73 20  ecified objects 
0520: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 6f 6d 6d  to the next comm
0530: 61 6e 64 20 69 6e 20 74 68 65 20 70 69 70 65 6c  and in the pipel
0540: 69 6e 65 2e 20 49 66 20 74 68 65 20 63 6f 6d 6d  ine. If the comm
0550: 61 6e 64 20 69 73 20 74 68 65 20 6c 61 73 74 20  and is the last 
0560: 0d 0a 20 20 20 20 63 6f 6d 6d 61 6e 64 20 69 6e  ..    command in
0570: 20 74 68 65 20 70 69 70 65 6c 69 6e 65 2c 20 74   the pipeline, t
0580: 68 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 64  he objects are d
0590: 69 73 70 6c 61 79 65 64 20 69 6e 20 74 68 65 20  isplayed in the 
05a0: 63 6f 6e 73 6f 6c 65 2e 0d 0a 2e 44 45 53 43 52  console....DESCR
05b0: 49 50 54 49 4f 4e 0d 0a 20 20 20 20 54 68 65 20  IPTION..    The 
05c0: 57 72 69 74 65 2d 4f 75 74 70 75 74 20 66 75 6e  Write-Output fun
05d0: 63 74 69 6f 6e 20 73 65 6e 64 73 20 74 68 65 20  ction sends the 
05e0: 73 70 65 63 69 66 69 65 64 20 6f 62 6a 65 63 74  specified object
05f0: 20 64 6f 77 6e 20 74 68 65 20 70 69 70 65 6c 69   down the pipeli
0600: 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63  ne to the next c
0610: 6f 6d 6d 61 6e 64 2e 20 49 66 20 74 68 65 20 63  ommand. If the c
0620: 6f 6d 6d 61 6e 64 20 69 73 20 74 68 65 20 6c 61  ommand is the la
0630: 73 74 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 74 68  st command in th
0640: 65 20 70 69 70 65 6c 69 6e 65 2c 20 74 68 65 20  e pipeline, the 
0650: 6f 62 6a 65 63 74 20 69 73 20 64 69 73 70 6c 61  object is displa
0660: 79 65 64 20 69 6e 20 74 68 65 20 63 6f 6e 73 6f  yed in the conso
0670: 6c 65 2e 0d 0a 20 20 20 20 0d 0a 20 20 20 20 57  le...    ..    W
0680: 72 69 74 65 2d 4f 75 74 70 75 74 20 73 65 6e 64  rite-Output send
0690: 73 20 6f 62 6a 65 63 74 73 20 64 6f 77 6e 20 74  s objects down t
06a0: 68 65 20 70 72 69 6d 61 72 79 20 70 69 70 65 6c  he primary pipel
06b0: 69 6e 65 2c 20 61 6c 73 6f 20 6b 6e 6f 77 6e 20  ine, also known 
06c0: 61 73 20 74 68 65 20 22 6f 75 74 70 75 74 20 73  as the "output s
06d0: 74 72 65 61 6d 22 20 6f 72 20 74 68 65 20 22 73  tream" or the "s
06e0: 75 63 63 65 73 73 20 70 69 70 65 6c 69 6e 65 2e  uccess pipeline.
06f0: 22 20 54 6f 20 73 65 6e 64 20 65 72 72 6f 72 20  " To send error 
0700: 6f 62 6a 65 63 74 73 20 64 6f 77 6e 20 74 68 65  objects down the
0710: 20 65 72 72 6f 72 20 70 69 70 65 6c 69 6e 65 2c   error pipeline,
0720: 20 75 73 65 20 57 72 69 74 65 2d 45 72 72 6f 72   use Write-Error
0730: 2e 0d 0a 20 20 20 20 0d 0a 09 54 68 69 73 20 66  ...    ...This f
0740: 75 6e 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 73  unction provides
0750: 20 61 20 70 61 69 72 20 6f 66 20 65 6e 68 61 6e   a pair of enhan
0760: 63 65 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 62  cements to the b
0770: 75 69 6c 74 2d 69 6e 20 57 72 69 74 65 2d 4f 75  uilt-in Write-Ou
0780: 74 70 75 74 2e 20 46 69 72 73 74 2c 20 69 74 20  tput. First, it 
0790: 6f 66 66 65 72 73 20 74 68 65 20 6f 70 74 69 6f  offers the optio
07a0: 6e 20 6f 66 20 50 61 73 73 74 68 72 75 2c 20 77  n of Passthru, w
07b0: 68 69 63 68 20 63 61 75 73 65 73 20 63 6f 6c 6c  hich causes coll
07c0: 65 63 74 69 6f 6e 73 20 74 6f 20 62 65 20 6f 75  ections to be ou
07d0: 74 70 75 74 20 77 69 74 68 6f 75 74 20 75 6e 72  tput without unr
07e0: 6f 6c 6c 69 6e 67 20 28 74 68 61 74 20 69 73 2c  olling (that is,
07f0: 20 6f 75 74 70 75 74 20 61 73 20 63 6f 6c 6c 65   output as colle
0800: 63 74 69 6f 6e 73 20 74 6f 20 74 68 65 20 70 69  ctions to the pi
0810: 70 65 6c 69 6e 65 29 2c 20 61 6e 64 20 73 65 63  peline), and sec
0820: 6f 6e 64 2c 20 69 74 20 69 6e 63 6c 75 64 65 73  ond, it includes
0830: 20 61 6e 20 6f 70 74 69 6f 6e 20 74 6f 20 63 6f   an option to co
0840: 6c 6c 65 63 74 20 69 6e 70 75 74 20 66 72 6f 6d  llect input from
0850: 20 74 68 65 20 70 69 70 65 6c 69 6e 65 20 61 6e   the pipeline an
0860: 64 20 6f 75 74 70 75 74 20 69 74 20 61 6c 6c 20  d output it all 
0870: 61 74 20 6f 6e 63 65 20 61 74 20 74 68 65 20 65  at once at the e
0880: 6e 64 2e 0d 0a 2e 50 41 52 41 4d 45 54 45 52 20  nd....PARAMETER 
0890: 49 6e 70 75 74 4f 62 6a 65 63 74 0d 0a 20 20 20  InputObject..   
08a0: 20 53 70 65 63 69 66 69 65 73 20 74 68 65 20 6f   Specifies the o
08b0: 62 6a 65 63 74 73 20 74 6f 20 73 65 6e 64 20 64  bjects to send d
08c0: 6f 77 6e 20 74 68 65 20 70 69 70 65 6c 69 6e 65  own the pipeline
08d0: 2e 20 45 6e 74 65 72 20 61 20 76 61 72 69 61 62  . Enter a variab
08e0: 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
08f0: 20 74 68 65 20 6f 62 6a 65 63 74 73 2c 20 6f 72   the objects, or
0900: 20 74 79 70 65 20 61 20 63 6f 6d 6d 61 6e 64 20   type a command 
0910: 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  or expression th
0920: 61 74 20 67 65 74 73 20 74 68 65 20 6f 62 6a 65  at gets the obje
0930: 63 74 73 2e 0d 0a 2e 50 41 52 41 4d 45 54 45 52  cts....PARAMETER
0940: 20 41 73 43 6f 6c 6c 65 63 74 69 6f 6e 0d 0a 09   AsCollection...
0950: 53 70 65 63 69 66 69 65 73 20 74 68 61 74 20 70  Specifies that p
0960: 69 70 65 6c 69 6e 65 20 69 6e 70 75 74 20 73 68  ipeline input sh
0970: 6f 75 6c 64 20 62 65 20 63 6f 6c 6c 65 63 74 65  ould be collecte
0980: 64 20 61 6e 64 20 6f 75 74 70 75 74 20 61 6c 6c  d and output all
0990: 20 61 74 20 6f 6e 63 65 20 61 74 20 74 68 65 20   at once at the 
09a0: 65 6e 64 2e 20 0d 0a 09 54 68 69 73 20 65 66 66  end. ...This eff
09b0: 65 63 74 69 76 65 6c 79 20 61 6c 6c 6f 77 73 20  ectively allows 
09c0: 79 6f 75 20 74 6f 20 74 61 6b 65 20 73 74 72 65  you to take stre
09d0: 61 6d 69 6e 67 20 69 6e 70 75 74 20 61 6e 64 20  aming input and 
09e0: 74 75 72 6e 20 69 74 20 69 6e 74 6f 20 61 20 63  turn it into a c
09f0: 6f 6c 6c 65 63 74 69 6f 6e 2c 20 6f 72 20 6f 75  ollection, or ou
0a00: 74 70 75 74 20 61 6e 20 61 72 72 61 79 20 66 72  tput an array fr
0a10: 6f 6d 20 79 6f 75 72 20 66 75 6e 63 74 69 6f 6e  om your function
0a20: 20 77 69 74 68 6f 75 74 20 75 6e 72 6f 6c 6c 69   without unrolli
0a30: 6e 67 2e 0d 0a 09 0d 0a 09 4e 6f 74 65 20 74 68  ng.......Note th
0a40: 61 74 20 74 68 69 73 20 63 61 75 73 65 73 20 74  at this causes t
0a50: 68 65 20 6f 75 74 70 75 74 20 74 6f 20 62 65 20  he output to be 
0a60: 61 20 4c 69 73 74 5b 50 53 4f 62 6a 65 63 74 5d  a List[PSObject]
0a70: 2e 0d 0a 2e 45 58 41 4d 50 4c 45 20 20 20 20 0d  ....EXAMPLE    .
0a80: 0a 20 20 20 20 24 70 20 3d 20 67 65 74 2d 70 72  .    $p = get-pr
0a90: 6f 63 65 73 73 0d 0a 20 20 20 20 0d 0a 20 20 20  ocess..    ..   
0aa0: 20 43 3a 5c 50 53 3e 77 72 69 74 65 2d 6f 75 74   C:\PS>write-out
0ab0: 70 75 74 20 24 70 0d 0a 20 20 20 20 0d 0a 20 20  put $p..    ..  
0ac0: 20 20 44 65 73 63 72 69 70 74 69 6f 6e 0d 0a 20    Description.. 
0ad0: 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a     -----------..
0ae0: 20 20 20 20 54 68 65 73 65 20 63 6f 6d 6d 61 6e      These comman
0af0: 64 73 20 67 65 74 20 6f 62 6a 65 63 74 73 20 72  ds get objects r
0b00: 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
0b10: 70 72 6f 63 65 73 73 65 73 20 72 75 6e 6e 69 6e  processes runnin
0b20: 67 20 6f 6e 20 74 68 65 20 63 6f 6d 70 75 74 65  g on the compute
0b30: 72 20 61 6e 64 20 64 69 73 70 6c 61 79 20 74 68  r and display th
0b40: 65 20 6f 62 6a 65 63 74 73 20 6f 6e 20 74 68 65  e objects on the
0b50: 20 63 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20 0d   console...    .
0b60: 0a 2e 45 58 41 4d 50 4c 45 20 20 20 20 0d 0a 20  ..EXAMPLE    .. 
0b70: 20 20 20 24 70 20 3d 20 67 65 74 2d 70 72 6f 63     $p = get-proc
0b80: 65 73 73 20 7c 20 53 65 6c 65 63 74 2d 4f 62 6a  ess | Select-Obj
0b90: 65 63 74 20 2d 46 69 72 73 74 20 31 30 0d 0a 20  ect -First 10.. 
0ba0: 20 20 20 0d 0a 20 20 20 20 43 3a 5c 50 53 3e 77     ..    C:\PS>w
0bb0: 72 69 74 65 2d 6f 75 74 70 75 74 20 24 70 20 20  rite-output $p  
0bc0: 7c 20 46 6f 72 45 61 63 68 2d 4f 62 6a 65 63 74  | ForEach-Object
0bd0: 20 7b 20 24 5f 2e 47 65 74 54 79 70 65 28 29 20   { $_.GetType() 
0be0: 7d 0d 0a 09 09 0d 0a 09 49 73 50 75 62 6c 69 63  }.......IsPublic
0bf0: 20 49 73 53 65 72 69 61 6c 20 4e 61 6d 65 20 20   IsSerial Name  
0c00: 20 20 20 20 20 42 61 73 65 54 79 70 65 20 20 20       BaseType   
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c20: 20 20 20 20 20 20 20 20 20 20 0d 0a 09 2d 2d 2d            ...---
0c30: 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 20 2d  ----- -------- -
0c40: 2d 2d 2d 20 20 20 20 20 20 20 2d 2d 2d 2d 2d 2d  ---       ------
0c50: 2d 2d 20 20 20 20 20 20 20 20 20 20 20 20 20 20  --              
0c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0d                 .
0c70: 0a 09 54 72 75 65 20 20 20 20 20 46 61 6c 73 65  ..True     False
0c80: 20 20 20 20 50 72 6f 63 65 73 73 20 20 20 20 53      Process    S
0c90: 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e 65 6e 74 4d  ystem.ComponentM
0ca0: 6f 64 65 6c 2e 43 6f 6d 70 6f 6e 65 6e 74 20 20  odel.Component  
0cb0: 20 20 20 20 0d 0a 09 54 72 75 65 20 20 20 20 20      ...True     
0cc0: 46 61 6c 73 65 20 20 20 20 50 72 6f 63 65 73 73  False    Process
0cd0: 20 20 20 20 53 79 73 74 65 6d 2e 43 6f 6d 70 6f      System.Compo
0ce0: 6e 65 6e 74 4d 6f 64 65 6c 2e 43 6f 6d 70 6f 6e  nentModel.Compon
0cf0: 65 6e 74 20 20 20 20 20 20 0d 0a 09 54 72 75 65  ent      ...True
0d00: 20 20 20 20 20 46 61 6c 73 65 20 20 20 20 50 72       False    Pr
0d10: 6f 63 65 73 73 20 20 20 20 53 79 73 74 65 6d 2e  ocess    System.
0d20: 43 6f 6d 70 6f 6e 65 6e 74 4d 6f 64 65 6c 2e 43  ComponentModel.C
0d30: 6f 6d 70 6f 6e 65 6e 74 20 20 20 20 20 20 0d 0a  omponent      ..
0d40: 09 54 72 75 65 20 20 20 20 20 46 61 6c 73 65 20  .True     False 
0d50: 20 20 20 50 72 6f 63 65 73 73 20 20 20 20 53 79     Process    Sy
0d60: 73 74 65 6d 2e 43 6f 6d 70 6f 6e 65 6e 74 4d 6f  stem.ComponentMo
0d70: 64 65 6c 2e 43 6f 6d 70 6f 6e 65 6e 74 20 20 20  del.Component   
0d80: 20 20 20 0d 0a 09 54 72 75 65 20 20 20 20 20 46     ...True     F
0d90: 61 6c 73 65 20 20 20 20 50 72 6f 63 65 73 73 20  alse    Process 
0da0: 20 20 20 53 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e     System.Compon
0db0: 65 6e 74 4d 6f 64 65 6c 2e 43 6f 6d 70 6f 6e 65  entModel.Compone
0dc0: 6e 74 20 20 20 20 20 20 0d 0a 09 54 72 75 65 20  nt      ...True 
0dd0: 20 20 20 20 46 61 6c 73 65 20 20 20 20 50 72 6f      False    Pro
0de0: 63 65 73 73 20 20 20 20 53 79 73 74 65 6d 2e 43  cess    System.C
0df0: 6f 6d 70 6f 6e 65 6e 74 4d 6f 64 65 6c 2e 43 6f  omponentModel.Co
0e00: 6d 70 6f 6e 65 6e 74 20 20 20 20 20 20 0d 0a 09  mponent      ...
0e10: 54 72 75 65 20 20 20 20 20 46 61 6c 73 65 20 20  True     False  
0e20: 20 20 50 72 6f 63 65 73 73 20 20 20 20 53 79 73    Process    Sys
0e30: 74 65 6d 2e 43 6f 6d 70 6f 6e 65 6e 74 4d 6f 64  tem.ComponentMod
0e40: 65 6c 2e 43 6f 6d 70 6f 6e 65 6e 74 20 20 20 20  el.Component    
0e50: 20 20 0d 0a 09 54 72 75 65 20 20 20 20 20 46 61    ...True     Fa
0e60: 6c 73 65 20 20 20 20 50 72 6f 63 65 73 73 20 20  lse    Process  
0e70: 20 20 53 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e 65    System.Compone
0e80: 6e 74 4d 6f 64 65 6c 2e 43 6f 6d 70 6f 6e 65 6e  ntModel.Componen
0e90: 74 20 20 20 20 20 20 0d 0a 09 54 72 75 65 20 20  t      ...True  
0ea0: 20 20 20 46 61 6c 73 65 20 20 20 20 50 72 6f 63     False    Proc
0eb0: 65 73 73 20 20 20 20 53 79 73 74 65 6d 2e 43 6f  ess    System.Co
0ec0: 6d 70 6f 6e 65 6e 74 4d 6f 64 65 6c 2e 43 6f 6d  mponentModel.Com
0ed0: 70 6f 6e 65 6e 74 20 20 20 20 20 20 0d 0a 09 54  ponent      ...T
0ee0: 72 75 65 20 20 20 20 20 46 61 6c 73 65 20 20 20  rue     False   
0ef0: 20 50 72 6f 63 65 73 73 20 20 20 20 53 79 73 74   Process    Syst
0f00: 65 6d 2e 43 6f 6d 70 6f 6e 65 6e 74 4d 6f 64 65  em.ComponentMode
0f10: 6c 2e 43 6f 6d 70 6f 6e 65 6e 74 0d 0a 0d 0a 20  l.Component.... 
0f20: 20 20 20 43 3a 5c 50 53 3e 77 72 69 74 65 2d 6f     C:\PS>write-o
0f30: 75 74 70 75 74 20 24 70 20 2d 41 73 43 6f 6c 6c  utput $p -AsColl
0f40: 65 63 74 69 6f 6e 20 7c 20 46 6f 72 45 61 63 68  ection | ForEach
0f50: 2d 4f 62 6a 65 63 74 20 7b 20 24 5f 2e 47 65 74  -Object { $_.Get
0f60: 54 79 70 65 28 29 20 7d 0d 0a 20 20 20 20 0d 0a  Type() }..    ..
0f70: 09 0d 0a 09 49 73 50 75 62 6c 69 63 20 49 73 53  ....IsPublic IsS
0f80: 65 72 69 61 6c 20 4e 61 6d 65 20 20 20 20 20 20  erial Name      
0f90: 20 42 61 73 65 54 79 70 65 20 20 20 20 20 20 20   BaseType       
0fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fb0: 20 20 20 20 20 20 0d 0a 09 2d 2d 2d 2d 2d 2d 2d        ...-------
0fc0: 2d 20 2d 2d 2d 2d 2d 2d 2d 2d 20 2d 2d 2d 2d 20  - -------- ---- 
0fd0: 20 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 20 20        --------  
0fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ff0: 20 20 20 20 20 20 20 20 20 20 20 0d 0a 09 54 72             ...Tr
1000: 75 65 20 20 20 20 20 54 72 75 65 20 20 20 20 20  ue     True     
1010: 4c 69 73 74 60 31 20 20 20 20 20 53 79 73 74 65  List`1     Syste
1020: 6d 2e 41 72 72 61 79 20 20 20 20 0d 0a 09 0d 0a  m.Array    .....
1030: 20 20 20 20 44 65 73 63 72 69 70 74 69 6f 6e 0d      Description.
1040: 0a 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .    -----------
1050: 0d 0a 20 20 20 20 54 68 65 73 65 20 63 6f 6d 6d  ..    These comm
1060: 61 6e 64 73 20 64 65 6d 6f 6e 73 74 72 61 74 65  ands demonstrate
1070: 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
1080: 62 65 74 77 65 65 6e 20 75 73 69 6e 67 20 61 6e  between using an
1090: 64 20 6e 6f 74 20 75 73 69 6e 67 20 2d 41 73 43  d not using -AsC
10a0: 6f 6c 6c 65 63 74 69 6f 6e 2e 20 57 69 74 68 6f  ollection. Witho
10b0: 75 74 20 69 74 2c 20 65 61 63 68 20 6f 62 6a 65  ut it, each obje
10c0: 63 74 20 70 61 73 73 65 73 20 74 68 72 6f 75 67  ct passes throug
10d0: 68 20 74 68 65 20 46 6f 72 45 61 63 68 20 61 6e  h the ForEach an
10e0: 64 20 69 74 27 73 20 74 79 70 65 20 69 73 20 6f  d it's type is o
10f0: 75 74 70 75 74 2e 20 57 69 74 68 20 2d 41 73 43  utput. With -AsC
1100: 6f 6c 6c 65 63 74 69 6f 6e 2c 20 6f 6e 6c 79 20  ollection, only 
1110: 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20  a single object 
1120: 69 73 20 6f 75 74 70 75 74 2c 20 77 69 74 68 20  is output, with 
1130: 61 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 74 79 70  a collection typ
1140: 65 20 6f 66 20 4c 69 73 74 60 31 0d 0a 20 20 20  e of List`1..   
1150: 20 0d 0a 2e 45 58 41 4d 50 4c 45 0d 0a 20 20 20   ...EXAMPLE..   
1160: 20 47 65 74 2d 50 72 6f 63 65 73 73 20 7c 20 53   Get-Process | S
1170: 65 6c 65 63 74 2d 4f 62 6a 65 63 74 20 2d 46 69  elect-Object -Fi
1180: 72 73 74 20 31 30 20 7c 20 57 72 69 74 65 2d 4f  rst 10 | Write-O
1190: 75 74 70 75 74 20 2d 41 73 43 6f 6c 6c 65 63 74  utput -AsCollect
11a0: 69 6f 6e 20 7c 20 46 6f 72 45 61 63 68 2d 4f 62  ion | ForEach-Ob
11b0: 6a 65 63 74 20 7b 20 24 5f 2e 47 65 74 54 79 70  ject { $_.GetTyp
11c0: 65 28 29 20 7d 0d 0a 20 20 20 20 0d 0a 20 20 20  e() }..    ..   
11d0: 20 44 65 73 63 72 69 70 74 69 6f 6e 0d 0a 20 20   Description..  
11e0: 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 20    -----------.. 
11f0: 20 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20     This command 
1200: 70 69 70 65 73 20 74 68 65 20 66 69 72 73 74 20  pipes the first 
1210: 74 65 6e 20 70 72 6f 63 65 73 73 65 73 20 74 6f  ten processes to
1220: 20 74 68 65 20 46 6f 72 45 61 63 68 2d 4f 62 6a   the ForEach-Obj
1230: 65 63 74 2c 20 64 65 6d 6f 6e 73 74 72 61 74 69  ect, demonstrati
1240: 6e 67 20 74 68 61 74 20 2d 41 73 43 6f 6c 6c 65  ng that -AsColle
1250: 63 74 69 6f 6e 20 77 69 6c 6c 20 66 6f 72 63 65  ction will force
1260: 20 74 68 65 20 6f 75 74 70 75 74 20 74 6f 20 62   the output to b
1270: 65 20 61 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 0d  e a collection..
1280: 0a 20 20 20 20 0d 0a 2e 45 58 41 4d 50 4c 45 0d  .    ...EXAMPLE.
1290: 0a 20 20 20 20 47 65 74 2d 50 72 6f 63 65 73 73  .    Get-Process
12a0: 20 7c 20 57 72 69 74 65 2d 4f 75 74 70 75 74 20   | Write-Output 
12b0: 2d 41 73 43 6f 6c 6c 65 63 74 69 6f 6e 20 7c 20  -AsCollection | 
12c0: 46 6f 72 45 61 63 68 2d 4f 62 6a 65 63 74 20 7b  ForEach-Object {
12d0: 20 24 5f 2e 47 65 74 54 79 70 65 28 29 20 7d 0d   $_.GetType() }.
12e0: 0a 20 20 20 20 0d 0a 20 20 20 20 44 65 73 63 72  .    ..    Descr
12f0: 69 70 74 69 6f 6e 0d 0a 20 20 20 20 2d 2d 2d 2d  iption..    ----
1300: 2d 2d 2d 2d 2d 2d 2d 0d 0a 20 20 20 20 54 68 69  -------..    Thi
1310: 73 20 63 6f 6d 6d 61 6e 64 20 63 6f 6c 6c 65 63  s command collec
1320: 74 73 20 61 6c 6c 20 6f 66 20 74 68 65 20 70 72  ts all of the pr
1330: 6f 63 65 73 73 65 73 20 62 65 66 6f 72 65 20 6f  ocesses before o
1340: 75 74 70 75 74 74 69 6e 67 20 74 68 65 6d 20 74  utputting them t
1350: 6f 20 74 68 65 20 46 6f 72 45 61 63 68 2d 4f 62  o the ForEach-Ob
1360: 6a 65 63 74 20 61 73 20 61 20 4c 69 73 74 5b 50  ject as a List[P
1370: 53 4f 62 6a 65 63 74 5d 0d 0a 23 3e 0d 0a 7d 0d  SObject]..#>..}.
1380: 0a                                               .