|
本帖最后由 dos时代菜鸟 于 2018-4-21 21:03 编辑
利用 run 方式 二次调用 脚本自身,实现 exec 模式的隐藏运行。即使 首次调用 是 cscript 方式 ,也一样隐藏,支持 附带参数 ,支持在 带空格 的目录运行。
利用 exec.stdout 获取 命令输出信息,分析出 分区编号,逐个 分配 盘符,不必生成 diskpart 用脚本。
使用格式 vhd.vbs “要挂载的vhd 文件完整路径” 要分配的第一个盘符
如果 c:\temp.vhd 中有多3 分区,
就会挂载 temp.vhd 并将其中的三个分区 分配给 r ,s ,t 三个盘符。
不输入 盘符,将 随系统分配盘符。
load_vhd-1.4.zip
(2.27 KB, 下载次数: 131)
- ' 挂载 vhd,并分配盘符,
- ' 使用语法 :vhd.vbs [vhdfile path] <drv>
- ' 调用 diskpart 并隐藏运行,不必生成 diskpart 脚本,通过 exec.stdout 方式获取 命令结果,进行分析,明确 分区编号,为其分配盘符。
- On error resume next
- '----------------隐藏运行代码-----------------------
- set ws=createObject("wscript.shell")
- hide= """" & WScript.scriptFullName & """"
- if WScript.Arguments.count=0 then
- ws.run "cscript.exe " & hide &" -hide " ,0,false
- WScript.quit
- elseif WScript.Arguments(WScript.Arguments.count-1)<>"-hide" then
- args=" "
- for each arg in WScript.Arguments
- args=args&" "& """" & arg & """"
- next
- ws.run "cscript.exe " & hide &args &" -hide " ,0,false
- WScript.quit
- end if
- '-----------------隐藏代码结束----------------------
- l_n=0
- if WScript.Arguments.Count>2 then l_n=asc(WScript.Arguments(1))-1 '设置盘符asc码
- vhd=WScript.Arguments(0)
- Set diskpart = ws.Exec("diskpart.exe")
- with diskpart
- .stdin.WriteLine "select vdisk file="&chr(34)&vhd&chr(34)
- .stdin.WriteLine "attach vdisk"
- .stdin.WriteLine "list partition"
- lx=list1(3 , 3 ) '获取 list parttition 命令结果 给变量 lx
- wscript.echo lx
- .stdin.WriteLine "exit"
- do until .status=1
- wscript.sleep 100
- loop
- end with
- Set diskpart = ws.Exec("diskpart.exe")
- with diskpart
- .stdin.WriteLine "select vdisk file="&chr(34)&vhd&chr(34)
- wscript.echo list1(1,1)
- l=""
- s=0
- pn=0
- for n=1 to len(lx) '分析lx 获取 分区,并为其分配盘符
- if mid(lx,n,1)=chr(10) then
- if left(l,1)="-" then s=1 '下一行包含 分区编号
- if s=1 and left(l,1)<>"-" then '本行 包含 分区编号
- pn=pn+1 '分区 计数
- parts=split(l) '将本行信息 存入数组
- ps=0
- for each p in parts
- if p<>"" then
- ps=ps+1
- if ps=2 then '本数组单元 就是 分区编号
- .stdin.WriteLine "select partition="&p
- .stdin.WriteLine "assign "
- if l_n<>0 then '命令中附带 分区盘符参数
- .stdin.WriteLine "assign letter="&Ucase(chr(l_n+pn))
- wscript.echo list1(1,3)
- end if
- end if
- end if
- next
- end if
- l=""
- else
- l=l&mid(lx,n,1)
- end if
- next
- .stdin.Writeline "exit"
- end with
- '返回 diskpart.stdout 字符指针 当前位置 开始 第m 条命令到 第n 条命令的输出结果
- function list1(m,n)
- list1=""
- with diskpart
- .stdin.WriteLine "rem "
- i=0
- Do
- strFromProc=replace(replace(trim(.StdOut.ReadLine()),chr(10),""),chr(13),"")&chr(10)
- if instr(1,strFromProc,">")>0 then
- i=i+1
- elseif i>(m-1) and strfromproc<>"" then
- list1=list1&strfromproc
- end if
- Loop While i<(n+1)
- end with
- end function
复制代码
|
评分
-
查看全部评分
|