找不到指定的文件

时间:2019-02-14 21:04:55

标签: vbscript

我一直在创建此程序,以自动参与设置计算机的过程,而所需的关注却很少。一直在努力,并取得了一些突破。

我希望能够从脚本开始以admin身份运行它。问题出在wshShell.Run(Command_3A) 'Lightspeed上。该程序可以很好地运行,但随后却给了我一个找不到的指定文件。

在插入Runas admin命令之前,整个过程都工作正常。所以我想知道它在那儿。这是Runas admin的一部分。

Set wshShell = WScript.CreateObject("WScript.Shell")
If WScript.Arguments.Length = 0 Then
  Set objShell = CreateObject("Shell.Application")
  objShell.ShellExecute "wscript.exe" _
    , Chr(34) & WScript.ScriptFullName & Chr(34) & " RunAsAdministrator", , "runas", 1
  WScript.Quit
End If

这里是所有代码。

Set wshShell = WScript.CreateObject("WScript.Shell")
If WScript.Arguments.Length = 0 Then
  Set objShell = CreateObject("Shell.Application")
  objShell.ShellExecute "wscript.exe" _
    , Chr(34) & WScript.ScriptFullName & Chr(34) & " RunAsAdministrator", , "runas", 1
  WScript.Quit
End If

spath = "C:\ThumbDrive"

' Step 1 - Set Power Settings
Command_1A = "powercfg /change standby-timeout-ac 0"
Command_1B = "powercfg /change standby-timeout-dc 15"
Command_1C = "powercfg /change monitor-timeout-ac 0"
Command_1D = "powercfg /change monitor-timeout-dc 15"
Command_1E = "powercfg /change hibernate-timeout-ac 0"
Command_1F = "powercfg /change hibernate-timeout-dc 15"

wshShell.Run "cmd /k " & Command_1A & "&" & Command_1B & "&" & Command_1C & "&" & Command_1D & "&" & Command_1E & "&" & Command_1F & "& exit"

WScript.Sleep 3000 

' Step 2 - Remove Bloatware (Win10Apps)

' Step 3 - Install wanted programs
Command_3A = Chr(34) & spath & "\Programs\Lightspeed\UserAgentx64 V2.1.14.msi" & Chr(34)
Command_3B = Chr(34) & spath & "\Programs\AcroRdrDC1801120058_en_US.exe" & Chr(34) & "& /sAll "
Command_3C = Chr(34) & spath & "\Programs\AzMERITSecureBrowser10.4-2018-08-02.msi" & Chr(34) & "& /passive "
Command_3D = Chr(34) & spath & "\Programs\jre-8u201-windows-x64.exe" & Chr(34) & "& /s "
Command_3E = Chr(34) & spath & "\Programs\ChromeStandaloneSetup64.exe" & Chr(34) & "& /silent /install "
Command_3F = Chr(34) & spath & "\Programs\ESet Rip and Replace.exe" & Chr(34)

wshShell.Run(Command_3A) 'LightSpeed
WScript.Sleep 4000 
wshShell.Run(Command_3B) 'Adobe Reader
WScript.Sleep 30000 
wshShell.Run(Command_3C) 'AzMerit
WScript.Sleep 4000 
wshShell.Run(Command_3D) 'Java
WScript.Sleep 30000 
wshShell.Run(Command_3E) 'Chrome
WScript.Sleep 30000
wshShell.Run(Command_3F) 'Eset

因此,我知道UAC可以使用,并且所有代码都可以在没有UAC控件的情况下使用。谁能帮我弄清楚为什么UAC控件会破坏所有内容。

2 个答案:

答案 0 :(得分:0)

CurrentDirectory属性返回一个字符串,其中包含活动进程的当前工作目录的标准路径。

对于提升脚本,它指向C:\WINDOWS\system32。您可以

  • 将当前工作目录从未提升的进程提供到提升的目录,或者
  • Wscript.ScriptFullName属性中获取它。

下面的代码片段中说明了这两种方法:

Set wshShell = WScript.CreateObject("WScript.Shell")
spath = wshShell.CurrentDirectory

If WScript.Arguments.Length = 0 Then
  Set objShell = CreateObject("Shell.Application")
  objShell.ShellExecute "wscript.exe" _
    , Chr(34) & WScript.ScriptFullName & Chr(34) _
      & " RunAsAdministrator " & Chr(34) & spath & Chr(34), , "runas", 1
  WScript.Quit
End If

'' take out the supplied value:
spath = WScript.Arguments(1)
'' find out where the script resides:
shtap = Left( WScript.ScriptFullName, _
    Len( WScript.ScriptFullName) - Len( WScript.ScriptName) -1 )

'' debugging output
Wscript.Echo CStr( WScript.Arguments.Length) & _
  vbNewLine & Chr(34) & WScript.Arguments(0) & Chr(34) & _
  vbNewLine & Chr(34) & spath & Chr(34) & _ 
  vbNewLine & Chr(34) & shtap & Chr(34) & _ 
  vbNewLine & Chr(34) & wshShell.CurrentDirectory & Chr(34) 

' Step 1 - Set Power Settings

输出(使用cscript.exe Windows脚本宿主):

2
"RunAsAdministrator"
"D:\bat\SO"
"D:\bat\SO"
"C:\WINDOWS\system32"

答案 1 :(得分:0)

我必须创建一个输入框来指定sPath是什么,然后让UAC从C:\WINDOWS\system32读取。效果很好,只是希望我能在没有输入框的情况下运行它。