使用HTTP api简单的远程执行PowerShell脚本
可能有些情况下,你不想完全体验通过PSRP(PowerShell远程处理协议)远程管理,或有需要从非Windows系统上执行一些PowerShell脚本。你可能会像我很久之前在这篇文章中写的那样直接基于WS-Man来写代码。但是那样很复杂,并且需要WS-Man和SOAP的一些知识。
我在PowerShell脚本中使用.Net HttpListener类写了个HTTP监听器。你可以非常简单地启动一个监听器的实例(需要提升权限监听网络),现在你可以执行任意的PowerShell命令了,它还可以返回多种格式的执行结果。
一旦你安装了这个组件(只需要拷贝它到Documents\WindowsPowerShell\Modules 文件夹),并且导入,你就可以通过Start-HTTPListener启动一个实例。
默认我让它监听在8888端口,集成了Windows验证,但是仍然可以在参数中配置。这里我打开了另一个PowerShell窗口,并执行了“get-process powershell”
注意我使用 –UseDefaultCredentials来确保使用我的当前安全上下文来验证,否则你会被告知匿名访问不支持。
默认情况下,我返回JSON格式的输出。因为所得到的JSON对象是很大的,它会被截断。 HTTP响应的body是在内容属性,但是它是一个字节数组。我使用UTF8 .NET类进行解码并显示部分JSON数据:
我可以使用ConvertFrom-JSON的,使之在PowerShell中更像模像样:
当然,如果你使用的是不同的客户端脚本如Python,Perl或Ruby的,那么你可以在这些语言中调用脚本库使用JSON的版本。
如果你只是玩玩而已,你可以用文本格式,使事情变得更加简单易读,就像直接在PowerShell中执行相同的命令行:
其他格式可供选择,如果你调用HTTP端点不带任何参数,你会得到基本的用法信息反馈:
相关推荐
-
linux shell中 if else以及大于、小于、等于逻辑表达式介绍
比如比较字符串.判断文件是否存在及是否可读等,通常用"[]"来表示条件测试. 注意:这里的空格很重要.要确保方括号的空格.笔者就曾因为空格缺少或位置不对,而浪费好多宝贵的时间. if ....; then....elif ....; then....else....fi[ -f "somefile" ] :判断是否是一个文件[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限[ -n "$var" ]
-
linux shell数组深入学习理解
bash shell只支持一维数组,但参数个数没有限制. 声明一个数组:declare -a array(其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组) 数组赋值:(1) array=(var1 var2 var3 ... varN)(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)(3) array[0]=var1 arrya[1]=var2 ... array[n]=varN 计算数组元素个数:${#
-
linux shell自定义函数(定义、返回值、变量作用域)介绍
linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带function fun() 定义,也可以直接fun() 定义,不带任何参数. 2.参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值. retu
-
linux shell脚本学习xargs命令使用详解
xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据.xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代. xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令,下面是一些如何有效使用xargs 的实用例子. 1.
-
Linux Shell中判断进程是否存在的代码
1 利用pgrep 匹配名字 复制代码 代码如下: if test $( pgrep -f $1 | wc -l ) -eq 0 then echo "进程不存在" else echo "存在进程" fi 以下是补充内容: 当前系统中的进程: apple@ubuntu:~$ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 13:57 ? 00:00:02 /sbin/init root 2 0 0 13:57
-
linux shell命令行选项与参数用法详解
问题描述:在linux shell中如何处理tail -n 10 access.log这样的命令行选项?在bash中,可以用以下三种方式来处理命令行参数,每种方式都有自己的应用场景.1,直接处理,依次对$1,$2,...,$n进行解析,分别手工处理:2,getopts来处理,单个字符选项的情况(如:-n 10 -f file.txt等选项):3,getopt,可以处理单个字符选项,也可以处理长选项long-option(如:--prefix=/home等).总结:小脚本手工处理即可,getopt
-
Linux shell脚本编程if语句的使用方法(条件判断)
if 语句格式if 条件then Commandelse Commandfi 别忘了这个结尾If语句忘了结尾fitest.sh: line 14: syntax error: unexpected end of fi if 的三种条件表达式 ifcommandthen if 函数then 命令执行成功,等于返回0 (比如grep ,找到匹配)执行失败,返回非0 (grep,没找到匹配)if [ expression_r_r_r ]then 表达式结果为真,则返回0
-
Linux中执行shell脚本的4种方法总结
bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本: 复制代码 代码如下: cd /data/shell ./hello.sh ./的意思是说在当前的工作目录下执行hello.sh.如果不加上./,bash可能会响应找到不到hello.sh的错误信息.因为目前的工作目录(/data/shell)可能不在
-
Linux shell实现HTTP服务示例代码
一.前言 使用代理服务器 HAProxy 对 Mysql 做负载均衡是常用方案,为提高可用性,当某个 Mysql 出现问题时,例如服务器故障了,或者数据复制中断了,最好可以让 HAProxy 马上知道,然后停止向其转发请求 HAProxy 如何知道 Mysql 是否有问题呢? 二.解决思路 (1)编写一个shell脚本,检查 mysql 的状态,然后输出结果,例如状态正常时,返回状态码200及正确信息,否则返回状态码503及错误信息 (2)实现一个HTTP服务,有请求连接后,调用上面的检查脚本,
-
使用HTTP api简单的远程执行PowerShell脚本
可能有些情况下,你不想完全体验通过PSRP(PowerShell远程处理协议)远程管理,或有需要从非Windows系统上执行一些PowerShell脚本.你可能会像我很久之前在这篇文章中写的那样直接基于WS-Man来写代码.但是那样很复杂,并且需要WS-Man和SOAP的一些知识. 我在PowerShell脚本中使用.Net HttpListener类写了个HTTP监听器.你可以非常简单地启动一个监听器的实例(需要提升权限监听网络),现在你可以执行任意的PowerShell命令了,它还可以返回多
-
shell中使用expect命令进行远程执行命令脚本
expect是用来实现自动交互功能的工具之一,使用expect-send来实现交互过程. 注意: 1.脚本的执行方法与bash shell不一样,比如:expect example.sh 2.向一个脚本传递参数时,bash shell是使用$1,$2...来接收参数的:而expect则将脚本的执行参数保存在数组$argv中,在脚本中一般将其赋值给变量:set 变量名 [lindex $argv 参数] #!/usr/bin/expect set ip [lindex $argv 0] set p
-
使用paramiko远程执行命令、下发文件的实例
写部署脚本时,难免涉及到一些远程执行命令或者传输文件. 之前一直使用sh库,调用sh.ssh远程执行一些命令,sh.scp传输文件,但是实际使用中还是比较麻烦的,光是模拟用户登陆这一点,还需要单独定义方法模拟输入. 感受一下: from sh import ssh PASS = 'xxxx' def ssh_interact(line, stdin): line = line.strip() print(line) if line.endswith('password:'): stdin.put
-
通过DNS TXT记录执行powershell
0x00简介 DNS TXT记录一般用来记录某个主机名或者域名设置的说明,在这里可以填写任何东西,长度限制255.绝大多数的TXT记录是用来做SPF记录(反垃圾邮件).本篇文章主要介绍如何使用 nishang 通过创建TXT记录执行powershell脚本.当然,首先你要有一个域名. 0x01创建TXT记录 这里需要使用nishang中的一个脚本 OUT-DnsTxt . 1.常见命令 因为常见命令比较短,所以可以直接添加到TXT记录中,如下图: 现在查看一下TXT记录: 可以看到记录已经成功添
-
Python中调用PowerShell、远程执行bat文件实例
python调用本地powershell方法 1.现在准备一个简陋的powershell脚本,功能是测试一个IP列表哪些可以ping通: 复制代码 代码如下: function test_ping($iplist) { foreach ($myip in $iplist) { $strQuery = "select * from win32_pingstatus where address = '$myip'" # 利用 Get-WmiO
-
如何使用Go语言实现远程执行命令
前言 远程执行命令有什么用?为什么要远程执行命令? 如果你只有2,3台服务器需要管理的时候,远程执行命令确实没有没多大作用,你可以登录到每台服务器上去完成各种操作. 当你的服务器大于3台的时候,远程执行的命令的方式就可以大大提高你的生产力了. 如果你有一个可以远程执行命令的工具,那么就可以像操作单台机器那样操作多台机器,机器越多,效率提高的越多. 远程执行命令最常用的方法就是利用 SSH 协议,将命令发送到远程机器上执行,并获取返回结果. 一般命令 所谓一般命令,就是在一定时间内会执行完的命令.
-
关于SSH 远程执行命令你要知道的二三事
前言 相信大家在工作的时侯,可能会遇到要利用 ssh 在本地执行远程机器的命令可以便捷地处理某些重复工作,我们希望做到: 免手工输入密码 支持执行多个命令,执行 shell 脚本 支持执行 sudo 的命令 免手工输入密码 我们可以使用 ssh 互信,sshpass 和 expect 等工具来避免手工输密码. 使用过程可能会碰到如下需要手工输入 yes 的繁琐场景: $ ssh username@hostname The authenticity of host ... can't be est
-
Linux下使用SSH远程执行命令方法收集
说明:可以做SSH免密登录之后执行,这样可以省去每次执行输入密码的提示. 对于简单的命令: 如果是简单执行几个命令,则: ssh user@remoteNode "cd /home ; ls" 基本能完成常用的对于远程节点的管理了,几个注意的点: 双引号,必须有.如果不加双引号,第二个ls命令在本地执行 分号,两个命令之间用分号隔开 多行命令可以输入双引号后回车,结尾使用双引号包裹 对于脚本的方式: 有些远程执行的命令内容较多,单一命令无法完成,考虑脚本方式实现: #!/bin/bas
-
Zabbix远程执行命令的示例详解
Zabbix触发器(trigger)达到阀值后会有动作(action)执行:发送告警信息或执行远程命令. 本文主要配置验证zabbix执行远程命令. 一.环境 Server:基于CentOS-7-x86_64-1511: Zabbix:zabbix-3.0.1server/agent. 二.注意事项 一些能想到的比较重要的注意事项: 1.远程执行命令是server端向agent端执行,不支持主动模式的agent: 2.不支持代理模式: 3.zabbix用户必须对命令具有执行权限,可以使用sudo
-
python基于paramiko库远程执行 SSH 命令,实现 sftp 下载文件
楔子 我们使用 Python 避免不了和 Linux 打交道,而有时我们需要执行一些 shell 命令.如果在本地的话,那么可以通过调用 os.system 或者 subprocess.Popen 来执行,但如果我们希望远程执行其它机器上的 shell 命令,这个时候该怎么做呢?下面我们就来推荐一个第三方库 paramiko,看看如何使用 Python 远程操作其它机器. paramiko 网络传输是遵循协议的,比如 SSH,paramiko 则是实现了 SSHv2 协议的一个 Python 第
随机推荐
- Python使用当前时间、随机数产生一个唯一数字的方法
- Ajax实现动态加载组合框的实例代码
- 原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
- EditPlus 3设置字体大小(附图)
- Dynamic Activity Window动态活动窗口vbs
- 用javascript实现始终保持打开同一个子窗口以及关闭父窗口同时自动关闭所有子窗口
- mysql 数据库死锁原因及解决办法
- Nodejs进阶:基于express+multer的文件上传实例
- input标签内容改变的触发事件介绍
- Linux下虚拟域名的实现(2)
- 简单谈谈C#中深拷贝、浅拷贝
- 通过Nginx服务器获取大文件MD5值的配置方法
- Python实现类的创建与使用方法示例
- 连接ACCESS数据库时发生错误提示:找不到可安装的 ISAM
- “百度与站长”更新:关于网站收录,删除,seo等
- Ubuntu16.04 中 locate文件查找命令
- django连接mysql配置方法总结(推荐)
- 浅谈python 中类属性共享的问题
- JS将网址url转化为JSON格式的方法
- java实现短信验证码5分钟有效时间