从VBScript中运行Powershell命令,第三行代码不运行

enxuqcxy  于 2023-08-05  发布在  Shell
关注(0)|答案(1)|浏览(148)

我正在从VBScript运行以下代码:

Set objShell = CreateObject("Wscript.shell")
objShell.run("powershell.exe -Command ""Start-Process PowerShell -Verb RunAs""")
objShell.run("powershell.exe ""Add-MpPreference -ExclusionPath C:\Windows\Test1\Sub1','C:\Test2'""")

字符串
我收到一个提升提示。允许后,最后一行代码不会运行。
另外,以下代码行在PowerShell中工作正常。第二行需要高程,从第1行接收,
第一个月
我如何合并这些组合在一个脚本中在VBScript中运行?然后我希望PowerShell窗口首先关闭或不打开。
我试着把它们合并成一行,也把它们分开了。两条路都行不通。

hjqgdpho

hjqgdpho1#

  • 从根本上说,no(非持久化)状态在对powershell.exe(Windows PowerShell CLI)的单独调用中保留。
  • 因此,您需要对powershell.exe进行 * 单一 * 调用,以便(a)创建 * 提升的 * 进程(使用Start-Process-Verb RunAs(b)在该进程 * 中执行命令 *。
  • 为此,您必须 * 嵌套 * powershell.exe调用,也就是说,您必须使用Start-Process -Verb RunAs调用 * 另一个 * powershell.exe,您可以在其中执行需要提升的调用。

This answer原则上解释了所需的技术,但这里还有一个额外的转义要求,使调用 robust

  • powershell.exe的命令行上,"字符。应该保留 * 作为命令的一部分执行 * 传递给-Command必须是\-转义;结合VBScript的转义:\"" .
  • 由于使用 * 嵌套 * powershell.exe调用,需要 * 另一 * 层\-escaping以保留"字符。作为 nested 调用中命令的一部分,如果你想传递你的文件路径 * 包含在"..." * 中:结合VBScript的转义:\\\""
  • 注意:虽然"..."封装在这里不是严格必需的,但它通常是健壮地传递任意文件系统路径所必需的;虽然'...'封装在语法上更容易,因为它不需要转义,但它会破坏碰巧包含'本身的路径)

将链接答案中的所有技术-隐藏、同步执行和退出代码捕获-应用到您的用例中:

Set objShell = CreateObject("WScript.Shell")

exitCode = objShell.Run("powershell.exe -Command exit (Start-Process -PassThru -Wait -WindowStyle Hidden -Verb RunAs powershell.exe 'Add-MpPreference -ExclusionPath \\\""C:\Windows\Test1\Sub1\\\"", \\\""C:\Test2\\\""').ExitCode", 0, true)

WScript.Echo "The PowerShell call reported the following exit code: " & exitCode

字符串

相关问题