Html+JS+PowerShell打造Web版AD管理系統(二)

最近發現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

相關文章
相關標籤/搜索