最近发现gihub上早已有人把powershell的restful webapi作好了,并且是自宿主的owin。比上次用到的httplistener健壮许多。貌似仍是支持job,runspace的。
https://github.com/DimensionDataCBUSydney/PowerShell.REST.APIhtml
过程其实比较简单,html不用变,js只须要把拼装webapi url的地方修改下就好,后台的powershell webapi整个替换掉就ok了。前端
下载源码,直接生成便可。我用的vs2017。而后就能够直接使用了,惟一的问题就是跨域。vue
一开始在jquery.ajax用jsop,但debug的响应里能看到返回的json对象,但是ajax就是接收不到,也就没法在页面显示,并且console.log(返回的json对象);里面彻底没有responseTextjquery
网上搜的大部分都没什么用。git
前端不行那就只好改后端了。主要是不想修改人家已经成熟的代码,怕会有问题发生,但没办法。
通过一番研究,最终肯定,要在owin中加入跨域的代码:
1.安装 Microsoft.AspNet.WebApi.Cors
2.DynamicPowerShellApi.Owin的Startup.cs 加入 using System.Web.Http.Cors;
3.line116处加入跨域配置 config.EnableCors(new EnableCorsAttribute("", "", "*"));github
而后从新生成,就能够了,多了10个警告回头再说- -~,通过测试,跨域问题解决。页面能够正常显示。web
今天发现中文没法显示,原来PowerShellRunner.cs的Line123中
? Regex.Replace(psOutput.LastOrDefault().ToString(), @"[^\u0000-\u007F]", string.Empty) 用正则匹配了全部的非拉丁字符并替换成空,会致使英文之外的文字都没法输出。ajax
解决办法改正则
例如 ? Regex.Replace(psOutput.LastOrDefault().ToString(), @"", @"") 什么都不替换就是了shell
后端基本就是这个样子了,若是你们有更好的方案能够交流下。
至于前端,用了下vue,感受仍是很不错的。组件化真的挺方便。json