使用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端点不带任何参数,你会得到基本的用法信息反馈: