zoomla
Version:
16年专业研发|中文alexa排名第一的CMS品牌-基于dotNET core、功能强大,集成站群、微信开发、小程序与ERP及OA办公系统,支持国际语言和多民族语言,世界五百强与大型门户专用高端网站内核CMS系统
259 lines (250 loc) • 13.8 kB
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>