无忧启动论坛

标题: 又一个 挂载 vhd 并分配指定盘符的 vbs [打印本页]

作者: dos时代菜鸟    时间: 2018-4-21 11:03
标题: 又一个 挂载 vhd 并分配指定盘符的 vbs
本帖最后由 dos时代菜鸟 于 2018-4-21 21:03 编辑

利用 run 方式 二次调用 脚本自身,实现 exec 模式的隐藏运行。即使 首次调用 是 cscript 方式 ,也一样隐藏,支持 附带参数 ,支持在 带空格 的目录运行。
利用 exec.stdout 获取 命令输出信息,分析出 分区编号,逐个 分配 盘符,不必生成  diskpart 用脚本。

使用格式  vhd.vbs “要挂载的vhd 文件完整路径”  要分配的第一个盘符

如果 c:\temp.vhd 中有多3 分区,
  1. vhd.vbs "c:\temp.vhd" r
复制代码
就会挂载 temp.vhd 并将其中的三个分区 分配给 r ,s ,t  三个盘符。

不输入 盘符,将 随系统分配盘符。

load_vhd-1.4.zip (2.27 KB, 下载次数: 131)

  1. ' 挂载 vhd,并分配盘符,
  2. ' 使用语法 :vhd.vbs [vhdfile path] <drv>
  3. ' 调用 diskpart 并隐藏运行,不必生成 diskpart 脚本,通过 exec.stdout 方式获取 命令结果,进行分析,明确 分区编号,为其分配盘符。
  4. On error resume next

  5. '----------------隐藏运行代码-----------------------
  6. set ws=createObject("wscript.shell")
  7. hide= """" & WScript.scriptFullName  & """"
  8. if WScript.Arguments.count=0  then
  9.     ws.run "cscript.exe " & hide &"  -hide " ,0,false
  10.     WScript.quit
  11. elseif WScript.Arguments(WScript.Arguments.count-1)<>"-hide" then
  12.   args=" "
  13.   for each arg in WScript.Arguments
  14.     args=args&"  "& """" & arg & """"
  15.   next
  16.     ws.run "cscript.exe " & hide &args &"  -hide " ,0,false
  17.     WScript.quit
  18. end if
  19. '-----------------隐藏代码结束----------------------

  20. l_n=0
  21. if WScript.Arguments.Count>2 then l_n=asc(WScript.Arguments(1))-1 '设置盘符asc码

  22. vhd=WScript.Arguments(0)
  23. Set diskpart = ws.Exec("diskpart.exe")
  24. with diskpart
  25. .stdin.WriteLine "select vdisk file="&chr(34)&vhd&chr(34)
  26. .stdin.WriteLine "attach vdisk"
  27. .stdin.WriteLine "list partition"
  28.   lx=list1(3 , 3 ) '获取 list parttition 命令结果 给变量 lx
  29.   wscript.echo lx
  30. .stdin.WriteLine "exit"
  31. do until .status=1
  32.   wscript.sleep 100
  33. loop
  34. end with

  35. Set diskpart = ws.Exec("diskpart.exe")
  36. with diskpart
  37. .stdin.WriteLine "select vdisk file="&chr(34)&vhd&chr(34)
  38. wscript.echo list1(1,1)
  39. l=""
  40. s=0
  41. pn=0
  42. for n=1 to len(lx) '分析lx 获取 分区,并为其分配盘符
  43.   if mid(lx,n,1)=chr(10) then
  44.       if left(l,1)="-" then s=1 '下一行包含 分区编号
  45.       if s=1 and left(l,1)<>"-" then  '本行 包含 分区编号
  46.         pn=pn+1  '分区 计数
  47.         parts=split(l) '将本行信息 存入数组
  48.         ps=0
  49.         for each p in parts
  50.           if p<>"" then
  51.             ps=ps+1
  52.             if ps=2 then '本数组单元 就是 分区编号
  53.               .stdin.WriteLine "select partition="&p
  54.               .stdin.WriteLine "assign "
  55.               if l_n<>0 then '命令中附带 分区盘符参数
  56.                 .stdin.WriteLine "assign letter="&Ucase(chr(l_n+pn))
  57.                 wscript.echo list1(1,3)
  58.               end if
  59.             end if
  60.           end if
  61.         next
  62.       end if
  63.       l=""
  64.   else
  65.     l=l&mid(lx,n,1)
  66.   end if
  67. next
  68. .stdin.Writeline "exit"
  69. end with


  70. '返回 diskpart.stdout 字符指针 当前位置 开始 第m 条命令到 第n 条命令的输出结果
  71. function list1(m,n)
  72. list1=""
  73.     with diskpart
  74.      .stdin.WriteLine "rem "
  75.         i=0
  76.         Do
  77.             strFromProc=replace(replace(trim(.StdOut.ReadLine()),chr(10),""),chr(13),"")&chr(10)
  78.             if instr(1,strFromProc,">")>0 then
  79.           i=i+1
  80.             elseif i>(m-1) and strfromproc<>"" then
  81.               list1=list1&strfromproc
  82.         end if
  83.         Loop While i<(n+1)
  84.     end with
  85. end function

复制代码



作者: chishingchan    时间: 2018-4-21 14:50
DOS时代升级到VBS
作者: dos时代菜鸟    时间: 2018-4-21 16:43
改进了一下,
作者: freesoft00    时间: 2018-4-21 17:00
个人更喜欢纯dos的,因为自己不懂vbs。
作者: dos时代菜鸟    时间: 2018-4-21 21:01
本帖最后由 dos时代菜鸟 于 2018-4-21 21:04 编辑
freesoft00 发表于 2018-4-21 17:00
个人更喜欢纯dos的,因为自己不懂vbs。


cmd 应用范围更广泛,至少pe 都能用,而有的 pe 没有vbs 环境。

刚发现 win7 下 ,vbs以 exec 方式 调用 diskpart 给vhd 分配盘符,需要运行两次 diskpart ,第一次 挂在vhd ,第二次 分配盘符,如果一次性 挂载 就分配盘符,明明选择了 part, 在分配盘符的时候还会 说 没有选择卷。 win10  没有这问题。 所以 更新下脚本 。这个 可能会牵引出 win7 的位置 溢出漏洞,可惜我没这本是。

作者: zhjsn    时间: 2018-4-21 21:51
good
作者: Dream漂移    时间: 2018-11-6 22:01

谢谢楼主分享技术资料!!很感兴趣!!
作者: eastmz    时间: 2018-11-11 04:22
感谢楼主分享的学习资料
作者: dsqlwz5966    时间: 2019-3-17 19:16
LZ辛苦了,刚好需要这个。
作者: 2011wind5win    时间: 2020-5-1 19:07
这个问题太难了,附件没分下载,能否公布出来学习一下,谢谢
作者: 2011wind5win    时间: 2020-5-1 19:43
vhd.vbs "c:\temp.vhd" r    加在哪里呢,请教下
作者: 2011wind5win    时间: 2020-5-1 20:38
请问 win10桌面系统运行 如何指定盘符呢?
作者: dos时代菜鸟    时间: 2020-5-7 15:28
2011wind5win 发表于 2020-5-1 20:38
请问 win10桌面系统运行 如何指定盘符呢?

如果习惯鼠标操作,就用这个吧。

http://bbs.wuyou.net/forum.php?m ... 60&fromuid=1198
作者: 2011wind5win    时间: 2020-5-25 02:15
dos时代菜鸟 发表于 2020-5-7 15:28
如果习惯鼠标操作,就用这个吧。

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=413760&fromuid ...

谢谢,抽空了试试




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3