Copy-ToWord.ps1
#requires -version 3.0 #this is an ISE only function #copy selected ISE text to Microsoft Word Function Copy-ToWord { [cmdletbinding()] Param( [ValidatePattern("\S+")] [string[]]$Text = $psise.CurrentFile.Editor.SelectedText, [switch]$Colorized ) If (($global:word.Application -eq $Null) -OR -NOT (Get-Process WinWord)) { #remove any variables that might be left over just to be safe Remove-Variable -Name doc,selection -Force -ErrorAction SilentlyContinue #create a Word instance if the object doesn't already exist $global:word = New-Object -ComObject word.application #create a new document $global:doc = $global:word.Documents.add() #create a selection $global:selection = $global:word.Selection #set font and paragraph for fixed width content $global:selection.Font.Name = "Consolas" $global:selection.font.Size = 10 $global:selection.paragraphFormat.SpaceBefore = 0 $global:selection.paragraphFormat.SpaceAfter = 0 #show the Word document $global:word.Visible = $True } if ($Colorized) { #copy the selection to the clipboard and paste #This is a shortcut hack that may not always work the first time $wshell = New-Object -ComObject Wscript.shell #must be lower-case c otherwise you will end up sending #ctrl+shift+c $wshell.SendKeys("^c") #timing is everything with SendKeys. This could be a lower value start-sleep -Milliseconds 500 $global:selection.Paste() } else { #insert the text $global:selection.TypeText($text) } #insert a new paragraph (ENTER) $global:selection.TypeParagraph() } #end Function #add to menu #$psise.CurrentPowerShellTab.AddOnsMenu.Submenus.Add("Send to Word",{Send-ToWord},"Ctrl+Alt+W") | Out-Null #keyboard shortcut doesn't always work #$psise.CurrentPowerShellTab.AddOnsMenu.Submenus.Add("Send to Word Colorized",{Send-ToWord -Colorized},"") | Out-Null |