博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从Powershell ***脚本学到的如何执行后台runspace~
阅读量:5979 次
发布时间:2019-06-20

本文共 5071 字,大约阅读时间需要 16 分钟。

豆子今天无聊在github上看看有什么有意思的PowerShell脚本,无意中发现了PowerSploit这个项目,仔细看了看,这个模块是针对***测试写的,里面有大量相关的***脚本,随便找了一个试试看。

比如说这个,可以用来记录键盘的输入内容,完整的脚本我就不贴出来了。

具体实现的功能先不去考虑,我很好奇他是怎么在后台执行的。可以看见脚本末尾这个作者使用的是runspace,他创建了一个runspace,然后传入脚本块和对应的参数,然后触发;

# Setup KeyLogger's runspace    $PowerShell = [PowerShell]::Create()    [void]$PowerShell.AddScript($Script)    [void]$PowerShell.AddArgument($LogPath)    if ($PSBoundParameters.Timeout) { [void]$PowerShell.AddArgument($Timeout) }    # Start KeyLogger    [void]$PowerShell.BeginInvoke()

这种方式看起来很眼熟啊,豆子之前学习多线程的时候,就是使用runspace来替代后台的job,因为runspace的性能效率要高的多;

事实上,我看了一下 这个***脚本之前也是使用的job,最新的版本改成了runspace,可见知识是相通的~

执行试试看

Get-Keystrokes -LogPath C:\temp\key.log

然后随便输入一下命令,查看一下对应的日志文件是否有记录 ,果然成功记录了

PS C:\Windows\System32\WindowsPowerShell\v1.0> gc C:\temp\key.log"TypedKey","WindowTitle","Time""l","Administrator: Windows PowerShell ISE","9/06/2016 10:59:48 AM""s","Administrator: Windows PowerShell ISE","9/06/2016 10:59:48 AM""
","Administrator: Windows PowerShell ISE","9/06/2016 10:59:48 AM""g","Administrator: Windows PowerShell ISE","9/06/2016 10:59:50 AM""c","Administrator: Windows PowerShell ISE","9/06/2016 10:59:50 AM""< >","Administrator: Windows PowerShell ISE","9/06/2016 10:59:50 AM""c","Administrator: Windows PowerShell ISE","9/06/2016 10:59:51 AM""
","Administrator: Windows PowerShell ISE","9/06/2016 10:59:51 AM"":","Administrator: Windows PowerShell ISE","9/06/2016 10:59:51 AM""\","Administrator: Windows PowerShell ISE","9/06/2016 10:59:51 AM""t","Administrator: Windows PowerShell ISE","9/06/2016 10:59:52 AM""e","Administrator: Windows PowerShell ISE","9/06/2016 10:59:52 AM""m","Administrator: Windows PowerShell ISE","9/06/2016 10:59:52 AM""p","Administrator: Windows PowerShell ISE","9/06/2016 10:59:52 AM""\","Administrator: Windows PowerShell ISE","9/06/2016 10:59:52 AM""k","Administrator: Windows PowerShell ISE","9/06/2016 10:59:53 AM""e","Administrator: Windows PowerShell ISE","9/06/2016 10:59:53 AM""y","Administrator: Windows PowerShell ISE","9/06/2016 10:59:53 AM""
","Administrator: Windows PowerShell ISE","9/06/2016 10:59:54 AM""
","Administrator: Windows PowerShell ISE","9/06/2016 10:59:54 AM"

如果我不管他,我所有的键盘操作都会被记录下来,那怎么停止这个监听?

查看一下runspace,我估计第二个最新的runspace应该是我刚刚创建的

PS C:\Windows\System32\WindowsPowerShell\v1.0> Get-Runspace Id Name            ComputerName    Type          State         Availability    -- ----            ------------    ----          -----         ------------     1 Runspace1       localhost       Local         Opened        Busy             2 Runspace2       localhost       Local         Opened        Busy

查看一下有啥属性和方法,发现可以close掉他

PS C:\Windows\System32\WindowsPowerShell\v1.0> Get-Runspace 2 | gm   TypeName: System.Management.Automation.Runspaces.LocalRunspaceName                         MemberType Definition                                                                                                                                                                                  ----                         ---------- ----------                                                                                                                                                                                  AvailabilityChanged          Event      System.EventHandler`1[System.Management.Automation.Runspaces.RunspaceAvailabilityEventArgs] AvailabilityChanged(System.Object, System.Management.Automation.Runspaces.RunspaceAvailabilit...StateChanged                 Event      System.EventHandler`1[System.Management.Automation.Runspaces.RunspaceStateEventArgs] StateChanged(System.Object, System.Management.Automation.Runspaces.RunspaceStateEventArgs)             ClearBaseTransaction         Method     void ClearBaseTransaction()                                                                                                                                                                 Close                        Method     void Close()                                                                                                                                                                                CloseAsync                   Method     void CloseAsync()                                                                                                                                                                           Connect                      Method     void Connect()

执行试试

PS C:\Windows\System32\WindowsPowerShell\v1.0> (Get-Runspace 2).close()

成功停止这个runspace,后面没有继续写入了。

现在我根据同样的方法,自己写了一个类似的小程序试试。我打算写一个后台程序,每隔30秒就弹出一个对话框,告诉我注意休息~

$scriptblock={while($true){$MessageboxTitle = “Health Reminder”$Messageboxbody = “Please have a break, my lord”$MessageIcon = [System.Windows.MessageBoxImage]::Information$ButtonType = [System.Windows.MessageBoxButton]::OK[System.Windows.MessageBox]::Show($Messageboxbody,$MessageboxTitle,$ButtonType,$messageicon)Start-Sleep -Seconds 30}}$job=[powershell]::create()$job.addscript($scriptblock)$job.begininvoke()

经测试,每隔30秒就会跳出这个对话框,成功!

转载地址:http://dxaox.baihongyu.com/

你可能感兴趣的文章
CentOS 6和CentOS 7防火墙的开启关闭
查看>>
mysql批量提交的优化
查看>>
TextView文字加阴影效果
查看>>
Netbeans8的maven配置文件路径
查看>>
#define和const的区别
查看>>
一个北京妞儿写给所有的女人的信
查看>>
git 下载并部署web应用
查看>>
tomcat加载web.xml的顺序
查看>>
DBTileButton
查看>>
php中heredoc的使用方法
查看>>
区分Oracle和SQL Server常用函数
查看>>
根据中国气象网xml数据返回天气预报
查看>>
OpenCart之特色分类模块
查看>>
成为Java GC专家系列(3) — 如何优化Java垃圾回收机制
查看>>
使用 ftrace 调试 Linux 内核,第 1 部分
查看>>
javascript 笔记之作用域
查看>>
Avro 模式演化与排序
查看>>
【16】万魂杀服务器开发之bug相关
查看>>
js操作html的table,包括添加行,添加列,删除行,删除列,合并列
查看>>
chromium 下载地址
查看>>