title: Pipe output to the clipboard using PowerShell
body: <h1><strong>EDIT: 23 Oct 2020</strong></h1>
  <p>See <a href="https://stackoverflow.com/a/64473408/288393">postanote's answer</a>.</p>
  <h1><strong>EDIT: 14 May 2015</strong></h1>
  <p>After 3 years, I thought I would share my <code>ClipboardModule</code> (I hope I am allowed to):</p>
  <pre><code>Add-Type -AssemblyName System.Windows.Forms
  
  Function Get-Clipboard {
      param([switch]$SplitLines)
  
      $text = [Windows.Forms.Clipboard]::GetText();
      
      if ($SplitLines) {
          $xs = $text -split [Environment]::NewLine
          if ($xs.Length -gt 1 -and -not($xs[-1])) {
              $xs[0..($xs.Length - 2)]
          } else {
              $xs
          }
      } else {
          $text
      }
  }
  
  function Set-Clipboard {
      $in = @($input)
  
      $out = 
          if ($in.Length -eq 1 -and $in[0] -is [string]) { $in[0] }
          else { $in | Out-String }
      
      if ($out) {
          [Windows.Forms.Clipboard]::SetText($out);
      } else {
          # input is nothing, therefore clear the clipboard
          [Windows.Forms.Clipboard]::Clear();
      }
  }
  
  
  function GetSet-Clipboard {
      param([switch]$SplitLines, [Parameter(ValueFromPipeLine=$true)]$ObjectSet)
  
      if ($input) {
          $ObjectSet = $input;
      }
  
      if ($ObjectSet) {
          $ObjectSet | Set-Clipboard
      } else {
          Get-Clipboard -SplitLines:$SplitLines
      }
  }
  
  Set-Alias cb GetSet-Clipboard
  
  Export-ModuleMember -Function *-* -Alias *
  </code></pre>
  <p>I usually use the <code>cb</code> alias (for <code>GetSet-Clipboard</code>) because it is two way i.e can get or set the clipboard:</p>
  <pre><code>cb                # gets the contents of the clipboard
  &quot;john&quot; | cb       # sets the clipboard to &quot;john&quot;
  cb -s             # gets the clipboard and splits it into lines
  </code></pre>