将 CurrentDirectory 从未提升的脚本传输到提升的脚本

2024-02-09

我需要将文件“manufacturer.bmp”复制到与脚本位于同一目录中(在我的闪存驱动器中)system32目录。

我成功地获得了变量sourcefile, destinationdirectory,并提升我的脚本,但是当我提升它时,我的sourcefile变量丢失,因为使用CurrentDirectory,在此模式下有所不同。

Set shell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

CurrentDirectory = fso.GetAbsolutePathName(".")
sourcefile = fso.buildpath(CurrentDirectory, "manufacturer.bmp")
MsgBox(sourcefile)

'Checks if the script is running elevated (UAC)
Function isElevated
  Set shell = CreateObject("WScript.Shell")
  Set whoami = shell.Exec("whoami /groups")
  Set whoamiOutput = whoami.StdOut
  strWhoamiOutput = whoamiOutput.ReadAll

  If InStr(1, strWhoamiOutput, "S-1-16-12288", vbTextCompare) Then 
    isElevated = True
  Else
    isElevated = False
  End If
End Function

'Re-runs the process prompting for priv elevation on re-run
Sub uacPrompt
  'Check if we need to run in C or W script
  interpreter = "wscript.exe"
  If InStr(1, WScript.FullName, "CScript", vbTextCompare) = 0 Then
    interpreter = "wscript.exe"
  Else
    interpreter = "cscript.exe"
  End If

  'Start a new instance with an elevation prompt first
  Set shellApp = CreateObject("Shell.Application")
  shellApp.ShellExecute interpreter, Chr(34) & WScript.ScriptFullName & _
    Chr(34) & " uac", "", "runas", 1

  'End the non-elevated instance
  WScript.Quit
End Sub

'Make sure we are running elevated, prompt if not
If Not isElevated Then uacPrompt

destinationdir = fso.buildpath(shell.ExpandEnvironmentStrings("%windir%"), _
                 "system32")
MsgBox(destinationdir)

fso.CopyFile sourcefile, destinationdir

知道如何将我的源文件 var 推送到子提升脚本吗?


The ShellExecute https://msdn.microsoft.com/en-us/library/windows/desktop/gg537745%28v=vs.85%29.aspx method allows you to specify the working directory as the 3rd argument, so you can pass the current directory to the elevated script and build the sourcefile path after elevation. Also, your code could be streamlined quite a bit.

Const HKLM   = &h80000002
Const DELETE = &h10000

Set sh = CreateObject("WScript.Shell")

Set reg = GetObject("winmgmts://./root/default:StdRegProv")
reg.CheckAccess HKLM, "SYSTEM\CurrentControlSet", DELETE, isAdmin

If Not isAdmin Then
  If WScript.Arguments.Count = 0 Then
    CreateObject("Shell.Application").ShellExecute WScript.FullName, _
      Chr(34) & WScript.ScriptFullName & Chr(34) & " uac", _
      sh.CurrentDirectory, "runas", 1
    WScript.Quit 0
  Else
    WScript.Echo "Privilege elevation failed!"
    WScript.Quit 1
  End If
End If

Set fso = CreateObject("Scripting.FileSystemObject")

src = fso.BuildPath(sh.CurrentDirectory, "manufacturer.bmp")
dst = fso.buildpath(sh.ExpandEnvironmentStrings("%windir%"), "system32")

fso.CopyFile src, dst & "\"

Edit:或者至少如果你不提升流程的话它会是这样的。根据这篇博文 http://blogs.msdn.com/b/oldnewthing/archive/2007/12/11/6648397.aspxRaymond Chen 表示,提升进程时会忽略起始目录,因此当前目录中的恶意 DLL 不会被错误地加载到提升的进程中。这意味着您必须“手动”传递工作目录,如下所示:

Const HKLM   = &h80000002;
Const DELETE = &h10000;

Set sh = CreateObject("WScript.Shell")

Set reg = GetObject("winmgmts://./root/default:StdRegProv")
reg.CheckAccess HKLM, "SYSTEM\CurrentControlSet", DELETE, isAdmin

If Not isAdmin Then
  If WScript.Arguments.Count = 0 Then
    CreateObject("Shell.Application").ShellExecute WScript.FullName, _
      Chr(34) & WScript.ScriptFullName & Chr(34) & " " & _
      Chr(34) & sh.CurrentDirectory & Chr(34), , "runas", 1
    WScript.Quit 0
  Else
    WScript.Echo "Privilege elevation failed!"
    WScript.Quit 1
  End If
End If

sh.CurrentDirectory = WScript.Arguments(0)

Set fso = CreateObject("Scripting.FileSystemObject")

src = fso.BuildPath(sh.CurrentDirectory, "manufacturer.bmp")
dst = fso.buildpath(sh.ExpandEnvironmentStrings("%windir%"), "system32")

fso.CopyFile src, dst & "\"

请注意,由于您的目标路径是一个文件夹,因此must有一个尾部反斜杠(如有记录的 https://msdn.microsoft.com/en-us/library/e1wf9e7w%28v=vs.84%29.aspx).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 CurrentDirectory 从未提升的脚本传输到提升的脚本 的相关文章

  • 并排启动两个资源管理器窗口

    有没有办法使用批处理脚本并排 垂直平铺 启动两个资源管理器窗口 如果没有 我该如何使用 VBS 来做到这一点 我已经修改了上面的VBS脚本Hackoo完全按照OP的要求去做 脚本中的注释准确地解释了它将做什么 如果两个窗口未设置到正确位置
  • 顺序执行批处理文件

    dim shell x y x D d y c bat x set shell createobject wscript shell shell run y shell run a bat set shell nothing 当我运行此脚本
  • WScript.Shell.Exec - 从 stdout 读取输出

    我的 VBScript 不显示我执行的任何命令的结果 我知道命令被执行 但我想捕获结果 我已经测试了多种方法来执行此操作 例如以下方法 Const WshFinished 1 Const WshFailed 2 strCommand pin
  • 在 VBScript 中导航 XML 节点(对于 Dummy)

    我正在尝试编写一个脚本来为我操作 xml 文件中的一些数据 我对 VBScript 还很陌生 但有 VB NET 和 VBA 背景 所以我觉得我知道自己在做什么 我认为可能有更好的方法来导航文件 而不是对每一行进行大量调用 InStr 或类
  • 如何启动 VBS 的交互式控制台?

    与这个问题非常相似 如何启动 Perl 的交互式控制台 https stackoverflow com questions 73667 how can i start an interactive console for perl 我只是希
  • 如何使用 java/vb 脚本调用自定义 ActiveX dll 中的方法

    我使用 VB6 创建了一个 ActiveX dll 并使用打包和部署向导将其打包 生成了一个 cab 文件和一个演示 HTML 页面 此 ActiveX dll 包含一个 simgle 方法 该方法返回字符串且不接受任何参数 我遇到的麻烦是
  • 有关于 VBScript 正则表达式对象 (RegExp) 的好文档吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们都知道每个正则表达式实现都有其自身的特点 我需要在使用 COM 自动化的应用程序中使用 Micros
  • 等待程序完成

    为了监视带宽使用情况并且不要在启动时加载不必要的程序 我想先执行dumeter exe 然后执行firefox exe 当我关闭firefox时 它应该杀死dumeter 我使用以下代码启动 Set WshShell WScript Cre
  • 使用 CreateRestrictedToken(LUA_TOKEN) 从提升的进程创建低/中进程

    我正在尝试从提升的进程创建中或低完整性进程 我知道还有其他类似的问题 但它们主要关注使用资源管理器或任务计划程序等解决方法 我想坚持使用CreateRestrictedToken CreateProcessAsUser 我认为一定可以以某种
  • 我对一些小概念感到困惑

    我对 VBscript 非常陌生 正在努力学习所有概念 在我的实践过程中 我一直有一个疑问 dim a b c set a CreateObject scripting filesystemobject initiate the file
  • 使用 cscript.exe 而不是 wscript.exe 在 VBScript 中执行文件

    我知道如何使用 wscript exe 执行 exe 如下所示 Set WshShell WScript CreateObject WScript Shell WshShell Run c myprogram exe 但我被迫使用 cscr
  • 如何使用服务器端vbscript获取图像宽度? ASP经典

    几天来我一直在尝试找到一种方法来获取驻留在我们服务器上的 png 文件的图像宽度 我正在尝试读取文件的前 24 个字节并解析出字节 17 20 的宽度 我在网上找到了几种例程 但都没有成功 奇怪的是 我似乎得到了从十六进制解码到十进制的字节
  • VBScript 从 Shell 获取结果

    Set wshShell WScript CreateObject WSCript shell wshshell run runas 如何获取结果并显示在 MsgBox 中 您将需要使用 WshShell 对象的 Exec 方法而不是 Ru
  • 如何在以管理员身份运行模式下部署应用程序?

    如何部署应用程序 使其需要管理员权限 而无需最终用户手动执行此操作 我使用 Delphi 2009 来构建该应用程序 您可以使用以下命令通知 Windows 您的应用程序需要以管理员身份运行requestedExecutionLevel应用
  • 如何使用本机 C++ 检查进程是否在 Windows 7 中具有提升的权限?

    如何检查进程在 Windows 7 中是否具有提升的权限 使用本机 C 而不是 C C net 我有时一直在寻找答案 但我只能找到使用 NET 框架的答案 最简单的方法是调用 IsUserAnAdmin 函数 如果您需要更高的精度 您也可以
  • GetRef 来捕获方法?

    我刚刚发现了 VBScript 的 GetRef 函数 它获取对其参数命名的函数的引用 有没有办法以这种方式获取对方法的引用 我有一种预感 VBScript 不提供这样做所需的复杂绑定 但它肯定会很好 No GetRef不支持类方法
  • vbs脚本通过ftp发送文件并检查/删除原始文件

    我正在尝试通过 ftp 发送文件 然后检查该过程是否成功完成 如果成功 我将删除原始文件并仅保留在 FTP 上的目标文件夹中发送的文件 我设法修补了一个连接到 FTP 并发送文件的脚本 但我不确定如何将原始文件夹与 FTP 上的文件夹进行交
  • 如何在VBS中使用Excel内置常量[重复]

    这个问题在这里已经有答案了 我想使用VBScript而不是VBA来处理EXCEL 但是我在调 用Range Find方法时遇到了代码错误 见下文 Function find range wb domain var Dim sheet Dim
  • 从“查找”结果中出现“下标超出范围”错误

    我想在 Excel 工作表中查找一个字符串 Excel 单元格值是使用公式计算的 当我运行这段代码时 Set firstExcel CreateObject Excel application firstExcel Workbooks Op
  • 使用ASP/VB获取节点属性值

    我有以下 XML 架构

随机推荐

  • Grep正则表达式查找可变长度字符串中的数字

    我需要某种方法来查找包含字符和数字的任意组合的单词 但是仅恰好 4 位数字 以及至少一个字符 EXAMPLE a1a1a1a1 Match 1234 NO match no characters a1a1a1a1a1 NO match ab
  • 将自定义包添加到 Azure 机器学习工作室

    我需要使用 azure 机器学习工作室上的函数 tsCV 来评估预测模型 但出现错误 could not find function tsCV 我正在尝试更新预测包 但未加载任何包 我按照这个教程http blog revolutionan
  • 简单的伪随机算法

    我需要一个伪随机生成器 它将一个数字作为输入并返回另一个数字 该数字是可再现的并且似乎是随机的 每个输入数字应与一个输出数字完全匹配 反之亦然 相同的输入数字总是导致相同的输出数字 靠近的连续输入数字 例如 1 和 2 应该产生完全不同的输
  • 为 i18n 设计属性?

    如何翻译 Devise 模型的属性 例如 session email or session remember me 两个层次结构 de devise sessions email E Mail and de activerecord att
  • Java中的“自动递增”字母表?

    Java 中的 自动增量 字母表 这可能吗 从头到尾没有第三方库 是的 你可以这样做 for char alphabet A alphabet lt Z alphabet System out println alphabet 也可以通过类
  • 在同一查询中混合 HQL 和 SQL

    我正在尝试在同一个查询中混合 HQL 和 SQl 喜欢使用 来自 Object 对象 TABLE B tbl 其中 obj simeProp tbl COLUMN 因为我的客户需要修改查询 学习 HQL 或映射未映射的表是不可能的 如果不是
  • SQL,缺少结尾,但为什么呢?

    我对 mySQL 过程有疑问 MySQL Workbench 建议我它错过了我的第一个 SET 的 结束 但没有错过第二个 SET 的 结束 我不知道为什么 DELIMITER drop procedure if exists pay10p
  • 使用 zxing 解码时返回图像中的条形码位置

    在我当前的项目中 我需要知道如何使用 zxing 获取图像中条形码的位置 以像素或像素范围为单位 我的图像源是 Kinect v2 主要目的是将条形码与车身框架关联起来 这需要位置信息 我使用的是标准 Kinect v2 SDK 和 Vis
  • 使用 VS Android 模拟器运行调试时 Xamarin Forms Android 应用程序崩溃

    我创建了一个基本的 Xamarin Forms 应用程序 它在 iOS 模拟器上运行良好 然而 当我尝试使用 VS Android 模拟器 5 1in Marshmallow 运行时 它每次打开时都会崩溃 即使我尝试在没有调试的情况下运行
  • 使用 Java2D 绘制多个圆

    我正在尝试使用Java2D 进行一些简单的图形编程 我开始很简单 只是尝试在 JFrame 中显示几个圆圈 我成功显示了一个圆圈 但是当添加第二个圆圈时 仅显示添加到 JFrame 的最后一个圆圈 我使用 Circle 类来定义我的圆并重写
  • 为什么 Django 站点不能嵌入另一个 HTML(iframe)中?

    我尝试在另一个 html 页面中嵌入 django 表单 但它不起作用 我尝试了其他 django 网站 但没有任何效果 还对其他一些网站进行了测试 django 是否限制在 iframe 中使用 如何让它发挥作用 需要嵌入的表格编程竞赛形
  • 如何为 AngularStrap datetimepicker 显示“无效日期”验证消息

    我能够验证我的 AngularStrap 日期时间选择器 但我无法区分所需的验证失败和无效的日期失败 屏幕上显示的唯一错误是必需的错误 无论它是必需的还是无效的字符串 如果输入的字符串无效 是否可以显示不同的验证消息 这是我的代码 div
  • 从锯齿状数组初始化中省略 c# new

    From http msdn microsoft com en us library 2s05feca aspx http msdn microsoft com en us library 2s05feca aspx 请注意 您不能在元素初
  • 在 WPF TreeView 中对子对象进行分组

    我试图让我的树视图根据相似项目的内容对它们进行分组 为了保持通用 我的对象层次结构可能如下所示 Objects Object Group 1 项目 1 类型 A 项目 2 类型 A 项目 3 类型 B 项目 4 类型 B 现在 我的 Tre
  • 洗牌算法分析

    我遇到了以下洗牌算法的分析 问 给定一个不同整数的数组 给出一个算法来随机 对整数重新排序 以便每个可能的重新排序都是相等的 可能 换句话说 给定一副牌 你如何洗牌 使得任何牌的排列都是同样可能的 好答案 按顺序遍历元素 将每个元素与 数组
  • Python struct.pack() 用于列表中的各个元素?

    我想将列表中的所有数据打包到单个缓冲区中以通过 UDP 套接字发送 该列表相对较长 因此为列表中的每个元素建立索引非常繁琐 这是我到目前为止所拥有的 NumElements len data buf struct pack d NumEle
  • 如何使用 awk 在文件中的模式后打印 5 个连续行[重复]

    这个问题在这里已经有答案了 我想在文件中搜索模式并在找到该模式后打印 5 行 我需要使用awk为此 例子 文件内容 PATTERN Line1 Line2 Line3 Line4 Line5 如何解析文件并仅打印上述行 我是否使用包含 PA
  • 无需用户服务的 Spring Security X.509 身份验证

    我在我的 Web 应用程序中使用 Spring Security v3 1 3 进行 X 509 身份验证 用户和角色存储在数据库中 但我实际上不需要这样做 因为客户端证书的 CN 符合 ROLE USERNAME 模式 这意味着我已经拥有
  • Javascript 日期验证 (DD/MM/YYYY) 和年龄检查

    我最近开始研究Javascript 我正在测试的是检查 DoB 的有效格式 下一步将检查年龄 我的 HTML 代码包含的内容如下
  • 将 CurrentDirectory 从未提升的脚本传输到提升的脚本

    我需要将文件 manufacturer bmp 复制到与脚本位于同一目录中 在我的闪存驱动器中 system32目录 我成功地获得了变量sourcefile destinationdirectory 并提升我的脚本 但是当我提升它时 我的s