UNPKG

zoomla

Version:

16年专业研发|中文alexa排名第一的CMS品牌-基于dotNET core、功能强大,集成站群、微信开发、小程序与ERP及OA办公系统,支持国际语言和多民族语言,世界五百强与大型门户专用高端网站内核CMS系统

259 lines (250 loc) 13.8 kB
<!Doctype html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>命令生成工具</title> <link rel="stylesheet" href="/dist/css/bootstrap4.min.css" /> <link rel="stylesheet" href="/dist/css/zico.min.css"/> <script src="/JS/jquery.min.js"></script> <script src="/dist/js/popper.min.js"></script> <script src="/dist/js/bootstrap4.min.js"></script> <script src="/dist/vue/vue.min.js"></script> </head> <style type="text/css"> .cmd_wrap{margin-bottom:1rem;} .cmd_wrap .input-group-text{min-width:90px;} .param_div .input-group{margin-bottom:5px;} </style> <body> <div id="app" class="container" style="margin-bottom:3rem;"> <div class="text-center"><h1>IIS&PowerShell命令生成工具</h1></div> <div v-for="cmd in cmds" class="cmd_wrap"> <h4 style="border-left:5px solid #0094ff;padding-left:5px;">{{cmd.text}}</h4> <div class="param_div" v-for="p in cmd.params"> <div class="input-group" v-if="p.type=='input'"> <span class="input-group-prepend"><span class="input-group-text">{{p.text}}</span></span> <input type="text" class="form-control" :placeholder="p.tip" v-model="p.value" :change="changeParam(cmd)" /> </div> <div class="input-group" v-if="p.type=='radio'"> <span class="input-group-prepend"><span class="input-group-text">{{p.text}}</span></span> <select class="form-control" :placeholder="p.tip" v-model="p.value" :change="changeParam(cmd)"> <option v-for="option in p.options" :value="option.value">{{option.text}}</option> </select> </div> <div v-if="p.type=='list'"> <div v-for="(option,index) in p.options"> <div class="input-group"> <span class="input-group-prepend"><span class="input-group-text">绑定信息</span></span> <input type="text" v-model="option.value" class="form-control" style="max-width:400px;"/> <span class="input-group-prepend" v-if="index>0"><span class="input-group-text">证书名称(关键字)</span></span> <input type="text" v-if="index>0" v-model="option.cert" class="form-control" style="max-width:200px;" placeholder="示例:z01.com"/> <span class="input-group-append"> <button type="button" class="btn btn-info btn-sm" v-if="index==0" v-on:click="p.options.push({value:''});">新增绑定</button> <button type="button" class="btn btn-danger btn-sm" v-if="index>0" v-on:click="remove(p.options,option);">移除</button> </span> </div> </div> </div> </div> <div class="text_div" style="margin-top:10px;"> <textarea :rows="cmd.row" class="form-control" v-bind:value="cmd.result"></textarea> </div> </div> </div> <script> var app = new Vue({ el: "#app", mounted: function () { var ref = this; function append(cmd, codeText) { cmd.code += codeText + "\r\n"; cmd.row++; } function addParam(cmd, text, value) { var param = ref.newParam(); param.text = text; param.value = value; if (!param.value) { param.value = ""; } if (!param.tip) { param.tip = "请输入" + param.text; } cmd.params.push(param); } function addToCmds(cmd) { cmd.result = cmd.code; ref.cmds.push(cmd); } //-------------------------------------------- { var cmd = ref.newModel(); cmd.text = "新建站点"; append(cmd, '#导入IIS管理模块') append(cmd, 'Import-Module WebAdministration'); append(cmd, ''); append(cmd, '#新建应用程序池'); append(cmd, 'New-Item iis:\\AppPools\\@网站名称'); append(cmd, '#Set-ItemProperty iis:\\AppPools\\@网站名称 managedRuntimeVersion v4.0 #更改应用程序池版本为4.0'); append(cmd, "Set-ItemProperty iis:\\AppPools\\@网站名称 managedRuntimeVersion '' #更改应用程序池版本无托管(用于dotNET core或静态站)"); append(cmd, ''); append(cmd, '#新建站点'); append(cmd, 'New-Item iis:\\Sites\\@网站名称 -bindings @{@绑定1} -physicalPath @网站路径'); append(cmd, '@绑定2'); append(cmd, '#更改应用程序池'); append(cmd, 'Set-ItemProperty IIS:\\Sites\\@网站名称 -name applicationPool -value @网站名称'); append(cmd, ''); addParam(cmd, "网站名称", ""); addParam(cmd, "网站路径", "D:\\web\\test\\"); var p1 = ref.newParam(); p1.text = "绑定信息"; p1.type = "list"; p1.options.push({ value: 'http://domain.com:80' }); cmd.params.push(p1); cmd.callback = function (cmd, result) { var getBindInfo = function (value) { /* * http://www.test.com:886 * http://www.test.com * www.test.com * www.test.com:86 */ var model = { protocol: "http", port: "80", domain: "" }; if (!value) { return model; } value = value.toLowerCase().replace(" ",""); if (value.indexOf("https://") > -1) { model.protocol = "https"; model.port = "443"; } if (value.indexOf("://") > -1) { var sIndex = value.indexOf("://") + 3; value = value.substr(sIndex, (value.length - sIndex)); } if (value.indexOf(":") > -1) { model.port = value.split(":")[1]; value = value.split(':')[0]; } model.domain = value; return model; } var options = ref.getParam(cmd.params, "绑定信息").options; var name = ref.getParam(cmd.params, "网站名称").value; var bindInfo = getBindInfo(options[0].value); //protocol="http";bindingInformation=":80:www.xxx.com" result = result.replace("@绑定1", 'protocol="' + bindInfo.protocol + '";bindingInformation=":' + bindInfo.port + ':' + bindInfo.domain + '"'); //超过一个以上,才进行多行绑定 var code_binding = ""; if (options.length > 1) { code_binding = "#绑定多域名 \r\n"; for (var i = 1; i < options.length; i++) { var model = getBindInfo(options[i].value); //New-WebBinding -Name "81" -Force -IPAddress "*" -Port 802 -HostHeader 2.com -Protocol "https" //New-WebBinding -Name "84" -IPAddress "*" -Port 443 -HostHeader domain.com -Protocol "https" -SslFlags 1 if (model.protocol == "http") { code_binding += 'New-WebBinding -Name "' + name + '" -Force -IPAddress "*" -Port ' + model.port + ' -HostHeader ' + model.domain + ' -Protocol "' + model.protocol + '"\r\n'; } else { code_binding += "\r\n"; code_binding += 'New-WebBinding -Name "' + name + '" -IPAddress "*" -Port ' + model.port + ' -HostHeader ' + model.domain + ' -Protocol "' + model.protocol + '" -SslFlags 1 \r\n'; code_binding += '$cert = Get-ChildItem -Path Cert:\\LocalMachine\\My | where-Object {$_.subject -like "*' + options[i].cert + '*"} \r\n'; code_binding += 'New-Item -Path "IIS:\\SslBindings\\!' + model.port + '!' + model.domain + '" -Value $cert -SSLFlags 1 \r\n'; code_binding += "\r\n"; } } } result = result.replace("@绑定2", code_binding); return result; } addToCmds(cmd); //1.绑定信息,格式自定义 //2.命令需要根据绑定信息的数目,动态自动生成 } { var cmd = ref.newModel(); cmd.text = "新建应用程序"; append(cmd, 'Import-Module WebAdministration\r\n'); append(cmd, '#在站点@网站名称下新建应用程序@程序名称,目录为@物理路径'); append(cmd, 'new-item iis:\\sites\\@网站名称\\@程序名称 -type Application -physicalpath @物理路径'); append(cmd, 'Set-ItemProperty IIS:\\Sites\\@网站名称\\@程序名称 -name applicationPool -value @网站名称'); addParam(cmd, "网站名称", "api.dd.com"); addParam(cmd, "程序名称", "cust_account_api"); addParam(cmd, "物理路径", "D:\\cust_account_api_new"); addToCmds(cmd); } { var cmd = ref.newModel(); cmd.text = "新建虚拟目录"; append(cmd, 'Import-Module WebAdministration\r\n'); append(cmd, '#在站点ServerLog下新建虚拟目录@虚拟目录,目录为@物理路径'); append(cmd, 'new-item @物理路径 -type directory -force '); append(cmd, 'new-item iis:\\sites\\ServerLog\\@虚拟目录 -type VirtualDirectory -physicalpath @物理路径'); addParam(cmd, "虚拟目录", "cust_account_api"); addParam(cmd, "物理路径", "D:\\cust_account_api_new\\log"); addToCmds(cmd); } { var cmd = ref.newModel(); cmd.text = "更改站点的物理路径:"; append(cmd, 'Import-Module WebAdministration\r\n'); append(cmd, 'Set-ItemProperty IIS:\\Sites\\@网站名称 -Name physicalpath -Value "@物理路径"'); append(cmd, ''); append(cmd, ''); addParam(cmd, "网站名称", "api.dd.com"); addParam(cmd, "物理路径", "c:\\inetpub"); addToCmds(cmd); } { var cmd = ref.newModel(); cmd.text = "其它"; append(cmd, 'Import-Module WebAdministration\r\n'); append(cmd, '#移除程序池'); append(cmd, 'Remove-WebAppPool -Name @名称'); append(cmd, '#移除网站'); append(cmd, 'Remove-WebSite -Name @名称'); append(cmd, '#查看网站基本信息'); append(cmd, 'Get-Website @名称'); append(cmd, '#查看网站详细信息'); append(cmd, 'Get-ItemProperty –Path IIS:\\Sites\\@名称 | select *'); addParam(cmd, "名称", ""); addToCmds(cmd); } { /* var cmd = ref.newModel(); cmd.text = "example"; append(cmd, ''); append(cmd, ''); append(cmd, ''); addParam(cmd, "参数名", "初始值"); addToCmds(cmd); */ } }, data: { cmds: [] }, methods: { getCmdText: function () { //根据当前选择的命令,生成 }, changeParam: function (cmd) { var result = cmd.code; for (var i = 0; i < cmd.params.length; i++) { var p = cmd.params[i]; var holder = "@" + p.text; while (result.indexOf(holder) > -1) { result = result.replace(holder, p.value); } } if (cmd.callback != null) { result = cmd.callback(cmd, result); } cmd.result = result; }, newModel: function () { /* * code :命令模板,占位符使用@xxx替代 * result:code替换后的结果 */ return { text: "", code: "", result: "", row: 1, params: [],callback:null }; }, getParam: function (list, text) { for (var i = 0; i < list.length; i++) { if (list[i].text == text) { return list[i]; } } return null; }, newParam: function () { return { text: "", value: "", tip: "", type: "input", options: [] }; }, remove: function (list, item) { for (var i = 0; i < list.length; i++) { if (list[i] == item) {list= list.splice(i,1); break;} } } } }) </script> </body> </html>