|
|
<span id="lnum1" style="color: #606060;"> 1:</span> Function Out-Clip { |
|
|
<span id="lnum2" style="color: #606060;"> 2:</span> |
|
|
<span id="lnum3" style="color: #606060;"> 3:</span> <<span style="color: #008000;">#</span> |
|
|
<span id="lnum4" style="color: #606060;"> 4:</span> .Synopsis |
|
|
<span id="lnum5" style="color: #606060;"> 5:</span> Capture a PowerShell command and its result to the Windows clipboard. |
|
|
<span id="lnum6" style="color: #606060;"> 6:</span> .Description |
|
|
<span id="lnum7" style="color: #606060;"> 7:</span> Using Write-Clipboard from the PowerShell Community Extensions, |
|
|
<span id="lnum8" style="color: #606060;"> 8:</span> this <span style="color: #0000ff;">function</span> will take a Windows PowerShell scriptblock, execute |
|
|
<span id="lnum9" style="color: #606060;"> 9:</span> it and write both the command and the results to the Windows clipboard. |
|
|
<span id="lnum10" style="color: #606060;"> 10:</span> |
|
|
<span id="lnum11" style="color: #606060;"> 11:</span> You can also pipe a collection of scriptblocks to this <span style="color: #0000ff;">function</span> or use |
|
|
<span id="lnum12" style="color: #606060;"> 12:</span> a comma separated list with the -Scriptblock parameter. |
|
|
<span id="lnum13" style="color: #606060;"> 13:</span> |
|
|
<span id="lnum14" style="color: #606060;"> 14:</span> By <span style="color: #0000ff;">default</span> the output will include the PS prompt set to PS C:\>. |
|
|
<span id="lnum15" style="color: #606060;"> 15:</span> If you want to use the actual current location then specify |
|
|
<span id="lnum16" style="color: #606060;"> 16:</span> -UseCurrentLocation. If you prefer no prompt at all then use -NoLocation. |
|
|
<span id="lnum17" style="color: #606060;"> 17:</span> .Parameter ScriptBlock |
|
|
<span id="lnum18" style="color: #606060;"> 18:</span> The scriptblock command you wish to execute. |
|
|
<span id="lnum19" style="color: #606060;"> 19:</span> .Parameter UseCurrentLocation |
|
|
<span id="lnum20" style="color: #606060;"> 20:</span> Use the current location <span style="color: #0000ff;">for</span> the prompt instead of PS C:\> |
|
|
<span id="lnum21" style="color: #606060;"> 21:</span> .Parameter NoLocation |
|
|
<span id="lnum22" style="color: #606060;"> 22:</span> Do not include any prompt information. Only display the |
|
|
<span id="lnum23" style="color: #606060;"> 23:</span> <span style="color: #0000ff;">script</span> block and results. |
|
|
<span id="lnum24" style="color: #606060;"> 24:</span> .Example |
|
|
<span id="lnum25" style="color: #606060;"> 25:</span> PS C:\> Out-Clip {get-<span style="color: #0000ff;">process</span> | where {$_.ws <span style="color: #cc6633;">-gt</span> 50MB}} |
|
|
<span id="lnum26" style="color: #606060;"> 26:</span> .Example |
|
|
<span id="lnum27" style="color: #606060;"> 27:</span> PS C:\Users\Jeff\Documents\> Out-Clip {dir -recurse -<span style="color: #0000ff;">filter</span> *.doc} -UseCurrentLocation |
|
|
<span id="lnum28" style="color: #606060;"> 28:</span> .Example |
|
|
<span id="lnum29" style="color: #606060;"> 29:</span> PS C:\Work\> {get-<span style="color: #0000ff;">process</span>},{get-service} | Out-Clip -nolocation |
|
|
<span id="lnum30" style="color: #606060;"> 30:</span> .Inputs |
|
|
<span id="lnum31" style="color: #606060;"> 31:</span> A scriptblock |
|
|
<span id="lnum32" style="color: #606060;"> 32:</span> .Outputs |
|
|
<span id="lnum33" style="color: #606060;"> 33:</span> None |
|
|
<span id="lnum34" style="color: #606060;"> 34:</span> .Link |
|
|
<span id="lnum35" style="color: #606060;"> 35:</span> Write-Clipboard |
|
|
<span id="lnum36" style="color: #606060;"> 36:</span> Set-Clipboard |
|
|
<span id="lnum37" style="color: #606060;"> 37:</span> Out-Clipboard |
|
|
<span id="lnum38" style="color: #606060;"> 38:</span> Get-Clipboard |
|
|
<span id="lnum39" style="color: #606060;"> 39:</span> .Notes |
|
|
<span id="lnum40" style="color: #606060;"> 40:</span> Version : 1.0 |
|
|
<span id="lnum41" style="color: #606060;"> 41:</span> Name : Out-Clip |
|
|
<span id="lnum42" style="color: #606060;"> 42:</span> Last Update: 7/6/2010 |
|
|
<span id="lnum43" style="color: #606060;"> 43:</span> URL : http://jdhitsolutions.com/blog |
|
|
<span id="lnum44" style="color: #606060;"> 44:</span> <span style="color: #008000;">#></span> |
|
|
<span id="lnum45" style="color: #606060;"> 45:</span> |
|
|
<span id="lnum46" style="color: #606060;"> 46:</span> [cmdletBinding(DefaultParameterSetName=<span style="color: #006080;">"Location"</span>)] |
|
|
<span id="lnum47" style="color: #606060;"> 47:</span> |
|
|
<span id="lnum48" style="color: #606060;"> 48:</span> Param( |
|
|
<span id="lnum49" style="color: #606060;"> 49:</span> [Parameter(Position=0,Mandatory=$True,ValueFromPipeline=$True, |
|
|
<span id="lnum50" style="color: #606060;"> 50:</span> HelpMessage=<span style="color: #006080;">"Enter a PowerShell expression"</span>)] |
|
|
<span id="lnum51" style="color: #606060;"> 51:</span> [ValidateNotNullorEmpty()] |
|
|
<span id="lnum52" style="color: #606060;"> 52:</span> [scriptblock[]]$ScriptBlock, |
|
|
<span id="lnum53" style="color: #606060;"> 53:</span> [Parameter(ParameterSetName=<span style="color: #006080;">"Location"</span>)] |
|
|
<span id="lnum54" style="color: #606060;"> 54:</span> [<span style="color: #0000ff;">switch</span>]$UseCurrentLocation, |
|
|
<span id="lnum55" style="color: #606060;"> 55:</span> [Parameter(ParameterSetName=<span style="color: #006080;">"NoLocation"</span>)] |
|
|
<span id="lnum56" style="color: #606060;"> 56:</span> [<span style="color: #0000ff;">switch</span>]$NoLocation |
|
|
<span id="lnum57" style="color: #606060;"> 57:</span> ) |
|
|
<span id="lnum58" style="color: #606060;"> 58:</span> |
|
|
<span id="lnum59" style="color: #606060;"> 59:</span> Begin { |
|
|
<span id="lnum60" style="color: #606060;"> 60:</span> Write-Verbose <span style="color: #006080;">"Starting $($myinvocation.mycommand)"</span> |
|
|
<span id="lnum61" style="color: #606060;"> 61:</span> |
|
|
<span id="lnum62" style="color: #606060;"> 62:</span> Try { |
|
|
<span id="lnum63" style="color: #606060;"> 63:</span> Write-Verbose <span style="color: #006080;">"Verifying Write-Clipboard"</span> |
|
|
<span id="lnum64" style="color: #606060;"> 64:</span> Get-Command -Name <span style="color: #006080;">"Write-Clipboard"</span> -ErrorAction <span style="color: #006080;">"Stop"</span> | Out-Null |
|
|
<span id="lnum65" style="color: #606060;"> 65:</span> } |
|
|
<span id="lnum66" style="color: #606060;"> 66:</span> |
|
|
<span id="lnum67" style="color: #606060;"> 67:</span> Catch { |
|
|
<span id="lnum68" style="color: #606060;"> 68:</span> Write-Warning <span style="color: #006080;">"Failed to find Write-Clipboard from the PowerShell Community Extensions."</span> |
|
|
<span id="lnum69" style="color: #606060;"> 69:</span> Break |
|
|
<span id="lnum70" style="color: #606060;"> 70:</span> } |
|
|
<span id="lnum71" style="color: #606060;"> 71:</span> <span style="color: #008000;">#define prompt to display, if any</span> |
|
|
<span id="lnum72" style="color: #606060;"> 72:</span> <span style="color: #0000ff;">if</span> ($NoLocation) { |
|
|
<span id="lnum73" style="color: #606060;"> 73:</span> Write-Verbose <span style="color: #006080;">"NoPrompt specified"</span> |
|
|
<span id="lnum74" style="color: #606060;"> 74:</span> $myPrompt=<span style="color: #006080;">""</span> |
|
|
<span id="lnum75" style="color: #606060;"> 75:</span> } |
|
|
<span id="lnum76" style="color: #606060;"> 76:</span> <span style="color: #0000ff;">elseif</span> ($UseCurrentLocation) { |
|
|
<span id="lnum77" style="color: #606060;"> 77:</span> Write-Verbose <span style="color: #006080;">"Using current location $($pwd)"</span> |
|
|
<span id="lnum78" style="color: #606060;"> 78:</span> $myPrompt=<span style="color: #006080;">"PS $pwd\> "</span> |
|
|
<span id="lnum79" style="color: #606060;"> 79:</span> } |
|
|
<span id="lnum80" style="color: #606060;"> 80:</span> <span style="color: #0000ff;">else</span> { |
|
|
<span id="lnum81" style="color: #606060;"> 81:</span> Write-Verbose <span style="color: #006080;">"Using default prompt"</span> |
|
|
<span id="lnum82" style="color: #606060;"> 82:</span> $myPrompt=<span style="color: #006080;">"PS C:\> "</span> |
|
|
<span id="lnum83" style="color: #606060;"> 83:</span> } |
|
|
<span id="lnum84" style="color: #606060;"> 84:</span> |
|
|
<span id="lnum85" style="color: #606060;"> 85:</span> <span style="color: #008000;">#initialize an array to hold results</span> |
|
|
<span id="lnum86" style="color: #606060;"> 86:</span> Write-Verbose <span style="color: #006080;">"Initializing output array"</span> |
|
|
<span id="lnum87" style="color: #606060;"> 87:</span> $output=@{} |
|
|
<span id="lnum88" style="color: #606060;"> 88:</span> } <span style="color: #008000;">#close Begin</span> |
|
|
<span id="lnum89" style="color: #606060;"> 89:</span> |
|
|
<span id="lnum90" style="color: #606060;"> 90:</span> Process { |
|
|
<span id="lnum91" style="color: #606060;"> 91:</span> <span style="color: #0000ff;">foreach</span> ($sb <span style="color: #0000ff;">in</span> $scriptblock) { |
|
|
<span id="lnum92" style="color: #606060;"> 92:</span> <span style="color: #008000;">#run the command and save the result</span> |
|
|
<span id="lnum93" style="color: #606060;"> 93:</span> Write-Verbose <span style="color: #006080;">"Executing scriptblock"</span> |
|
|
<span id="lnum94" style="color: #606060;"> 94:</span> Write-Verbose $sb.ToString() |
|
|
<span id="lnum95" style="color: #606060;"> 95:</span> $result=&$sb |
|
|
<span id="lnum96" style="color: #606060;"> 96:</span> |
|
|
<span id="lnum97" style="color: #606060;"> 97:</span> <span style="color: #008000;">#check if the command succeeded. If not, then get the</span> |
|
|
<span id="lnum98" style="color: #606060;"> 98:</span> <span style="color: #008000;">#last exception and make it the result</span> |
|
|
<span id="lnum99" style="color: #606060;"> 99:</span> <span style="color: #0000ff;">if</span> (-not $result) { |
|
|
<span id="lnum100" style="color: #606060;"> 100:</span> Write-Verbose <span style="color: #006080;">"Adding exception"</span> |
|
|
<span id="lnum101" style="color: #606060;"> 101:</span> $result=$error[0] |
|
|
<span id="lnum102" style="color: #606060;"> 102:</span> } |
|
|
<span id="lnum103" style="color: #606060;"> 103:</span> Write-Verbose <span style="color: #006080;">"Building data and adding to hash table"</span> |
|
|
<span id="lnum104" style="color: #606060;"> 104:</span> <span style="color: #008000;">#define the first line with the prompt and command</span> |
|
|
<span id="lnum105" style="color: #606060;"> 105:</span> $commandline=<span style="color: #006080;">"{0}{1}"</span> -f $myPrompt,$sb.ToString() |
|
|
<span id="lnum106" style="color: #606060;"> 106:</span> <span style="color: #008000;">#add the command and results to the hash table</span> |
|
|
<span id="lnum107" style="color: #606060;"> 107:</span> $output.Add($commandline,($result | out-string)) |
|
|
<span id="lnum108" style="color: #606060;"> 108:</span> } <span style="color: #008000;">#foreach $sb in $scriptblockl</span> |
|
|
<span id="lnum109" style="color: #606060;"> 109:</span> } <span style="color: #008000;">#close Process</span> |
|
|
<span id="lnum110" style="color: #606060;"> 110:</span> |
|
|
<span id="lnum111" style="color: #606060;"> 111:</span> End { |
|
|
<span id="lnum112" style="color: #606060;"> 112:</span> Write-Verbose <span style="color: #006080;">"Writing output to the clipboard"</span> |
|
|
<span id="lnum113" style="color: #606060;"> 113:</span> <span style="color: #008000;">#enumerate the keys and then the command results</span> |
|
|
<span id="lnum114" style="color: #606060;"> 114:</span> $output.keys | <span style="color: #0000ff;">foreach</span> {$_,($output.item($_) | out-string)} | write-clipboard |
|
|
<span id="lnum115" style="color: #606060;"> 115:</span> Write-Verbose <span style="color: #006080;">"Command and results written to the clipboard."</span> |
|
|
<span id="lnum116" style="color: #606060;"> 116:</span> Write-Verbose <span style="color: #006080;">"Ending $($myinvocation.mycommand)"</span> |
|
|
<span id="lnum117" style="color: #606060;"> 117:</span> } <span style="color: #008000;">#close end</span> |
|
|
<span id="lnum118" style="color: #606060;"> 118:</span> |
|
|
<span id="lnum119" style="color: #606060;"> 119:</span> } #<span style="color: #0000ff;">end</span> function |