zoomla
Version:
16年专业研发|中文alexa排名第一的CMS品牌-基于dotNET core、功能强大,集成站群、微信开发、小程序与ERP及OA办公系统,支持国际语言和多民族语言,世界五百强与大型门户专用高端网站内核CMS系统
289 lines (268 loc) • 15 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>PowerShell命令生成工具</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>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-else-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-else-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-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,"#文件夹权限覆盖更新");
append(cmd, "$acl = Get-Acl @下级文件夹名称");
append(cmd, "# 添加第一个规则:");
append(cmd, '$person = [System.Security.Principal.NTAccount]"Administrator"');
append(cmd, '$access = [System.Security.AccessControl.FileSystemRights]"FullControl"');
append(cmd, '$inheritance = [System.Security.AccessControl.InheritanceFlags] "ObjectInherit,ContainerInherit"');
append(cmd, '$propagation = [System.Security.AccessControl.PropagationFlags]"None"');
append(cmd, '$type = [System.Security.AccessControl.AccessControlType]"Allow"');
append(cmd, '$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($person,$access,$inheritance,$propagation,$type)');
append(cmd, '$acl.AddAccessRule($rule)');
append(cmd, '');
append(cmd, '# 添加第二个规则:');
append(cmd, '$person = [System.Security.Principal.NTAccount]"@授予账户"');
append(cmd, '$access = [System.Security.AccessControl.FileSystemRights]"Modify"');
append(cmd, '$inheritance = [System.Security.AccessControl.InheritanceFlags] "ObjectInherit,ContainerInherit"');
append(cmd, '$propagation = [System.Security.AccessControl.PropagationFlags]"None"');
append(cmd, '$type = [System.Security.AccessControl.AccessControlType]"Allow"');
append(cmd, '$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($person,$access,$inheritance,$propagation,$type)');
append(cmd, '$acl.AddAccessRule($rule)');
append(cmd, '');
append(cmd, '# 保存权限更新:');
append(cmd, 'Set-Acl @下级文件夹名称 $acl');
addParam(cmd, "下级文件夹名称", "D:\\test\\a\\");
addParam(cmd, "授予账户", "Users");
addToCmds(cmd);
}
{
var cmd = ref.newModel();
cmd.text = "指定文件夹下文件权限更新";
append(cmd, '#作用于当前目录下文件[@文件组名]组完全控制权限:');
append(cmd, 'icacls .\* /grant[:r] @文件组名:@授予权限 /t');
append(cmd, '');
addParam(cmd, "文件组名", "User");
{
var p = { text: "授予权限", value: "M", tip: "", type: "radio", options: [] };
p.options = [{ text: "只读权限(R)", value: "R" }, { text: "读写修改权限(M)", value: "M" }, { text: "完全访问权限(F)", value: "F" }];
cmd.params.push(p);
}
addToCmds(cmd);
}
{
var cmd = ref.newModel();
cmd.text = "压缩&解压缩";
append(cmd, 'New-Item -ItemType File 1.txt -Force #新建文本文件');
append(cmd, 'Compress-Archive -Path "@待压缩文件" -DestinationPath "@压缩后文件名" -Force #压缩文件为zip');
append(cmd, 'Compress-Archive -Path @待压缩目录 -DestinationPath "@压缩后文件名" -Force #把目录打包为zip');
append(cmd, 'Compress-Archive -Path .\\* -DestinationPath "@压缩后文件名" -Force #把当前目录打包zip');
append(cmd, 'Expand-Archive -Path "@待解压文件路径" -DestinationPath "@解压后目录路径" -Force #解压到新文件夹内');
addParam(cmd, "待压缩文件", "test.txt");
addParam(cmd, "待压缩目录", "test\\*");
addParam(cmd, "压缩后文件名", "test.zip");
addParam(cmd, "待解压文件路径", "191101Zoomla逐浪CMS_V8.0.2.zip");
addParam(cmd, "解压后目录路径", "191101Zoomla逐浪CMS_V8.0.2")
addToCmds(cmd);
}
{
var cmd = ref.newModel();
cmd.text = "文件&目录操作";
append(cmd, '---------------------------------------------------复制文件');
append(cmd, 'Copy-Item @来源文件 @目标目录 #复制文件');
append(cmd, 'Copy-Item @来源目录* @目标目录 #复制目录下所有文件至目标目录');
append(cmd, 'Copy-Item @来源目录*.txt @目标目录 #只复制 .txt 文件至目标目录');
append(cmd, 'Copy-Item @来源目录* @目标目录 –recurse #将文件夹下的所有文件(含子目录)全复制到目标文件夹:');
append(cmd, '');
append(cmd, '---------------------------------------------------移动文件');
append(cmd, 'Move-Item @来源目录 @目标目录 #移动文件夹');
append(cmd, 'Move-Item @来源目录*.jpg @目标目录 -force #移动文件夹下指定类型文件(-force是强制覆盖参数慎用)');
append(cmd, '');
append(cmd, '---------------------------------------------------修改文件名');
append(cmd, 'Rename-Item @来源目录 @目标目录');
append(cmd, 'Dir|ForEach-Object {Rename-Item $_.Name $_.Name.replace("-x86", "") }');
addParam(cmd, "来源文件", "D:\\test\\source\\test.zip");
addParam(cmd, "来源目录", "D:\\test\\source\\");
addParam(cmd, "目标目录", "D:\\test\\target\\");
addToCmds(cmd);
}
{
var cmd = ref.newModel();
cmd.text = "批量修改文件名";
append(cmd, '$Path = "@文件目录"');
append(cmd, '$Filter = "*.jpg"');
append(cmd, '$Prefix = "@Prefix"');
append(cmd, '$Counter = @Counter');
append(cmd, 'Get-ChildItem -Path $Path -Filter $Filter -Recurse |');
append(cmd, ' Rename-Item -NewName {');
append(cmd, ' $extension = [System.IO.Path]::GetExtension($_.Name)');
append(cmd, ' "{0}{1}.{2}" -f $Prefix, $script:Counter, $extension');
append(cmd, ' $script:Counter++');
append(cmd, ' } -WhatIf');
append(cmd, '#请特别小心要去掉它的-Whatif参数才真正的重命名文件');
addParam(cmd, "文件目录", "D:\\test\\Protected");
addParam(cmd, "文件筛选", "*.jpg");
addParam(cmd, "Prefix", "gg");
addParam(cmd, "Counter", "1");
addToCmds(cmd);
}
{
var cmd = ref.newModel();
cmd.text = "删除当前目录且多条件过滤";
append(cmd, "Get-ChildItem -Path '@文件目录' -Recurse |");// -exclude somefile.txt |
append(cmd,"@筛选条件1");
// append(cmd, 'Select -ExpandProperty FullName |');
//append(cmd, 'Where {$_ -notlike "D:\gg\ff\tr*"} |');
//append(cmd, 'Where {$_ -notlike "D:\gg\ff\1.txt"}|');
append(cmd, 'Sort length -Descending |');
append(cmd, 'Remove-Item -force');
addParam(cmd, "文件目录", "D:\\gg\\ff\\");
var p1 = ref.newParam();
p1.text = "忽略文件&目录";
p1.type = "list";
p1.options.push({ value: '\\tr*' });
p1.options.push({ value: '\\1.txt' });
cmd.params.push(p1);
cmd.callback = function (cmd, result) {
var code = "";
var dir = ref.getParam("文件目录").value;
var options = ref.getParam(cmd.params, "忽略文件&目录").options;
if (dir.endsWith("\\")) { dir = dir.substr(0, dir.length - 1); }
//选项>1,且1内容不为空
if (options.length > 0 && options[0].value)
{
code += "Select -ExpandProperty FullName |\r\n";
for (var i = 0; i < options.length; i++) {
var option = options[i];
code += "Where {$_ -notlike '" + dir + option.value + "'} |\r\n";
}
}
result = result.replace("@筛选条件1", code);
return result;
}
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;
},
//setActive: function (cmd) {
// var ref = this;
// if (cmd.active) { return; }
// for (var i = 0; i < ref.cmds.length; i++) { ref.cmds[i].active = false; }
// cmd.active = true;
//},
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>