0

我有一个奇怪的问题。我们有一些脚本(登录脚本等)需要以提升用户身份运行某些元素。

(为您提供背景知识,我们使用 UAC 来防止在没有用户输入密码的情况下运行任何东西。对于我们想要在没有用户干预的情况下运行的常规、提升的任务,我们编写了一个小型 .Net 应用程序,该应用程序基本上运行命令行输入为提升的用户。)

这已经成功运作了数年。我现在用 Windows 7 64 位测试它,这个过程不再有效。为了测试这个过程,我编写了以下小脚本:

if ( $args[0].Length -eq 0) { 
    $message = "No input passed" 
} else {
    $message = $args[0]
}

 $a = new-object -comobject wscript.shell
 $b = $a.popup($message)

所有这一切都是弹出一个消息框,其中包含传递给它的任何用户输入。

试验结果:

1) 通过创建新进程来调用

([wmiclass]"win32_Process").create('powershell c:\users\me\desktop\testArgs.ps1 "hello"')

结果:这按预期工作 - 弹出框说“你好”

2) 使用 .net Elevation 实用程序调用(带参数)

([wmiclass]"win32_Process").create('C:\swtools\elevator.exe powershell c:\users\me\desktop\testArgs.ps1')

结果:Powershell 窗口以管理员身份打开(如标题栏所示),但在窗口打开时挂起并闪烁光标 - 不显示弹出窗口。(在 Win7 32 位机器上,这按预期工作 - 显示“hello”弹出窗口)

3) 从 Elevation 实用程序调用 powershell(不带参数)

([wmiclass]"win32_Process").create('C:\swtools\elevator.exe powershell')

这可以按预期工作 - 打开一个提升的 powershell 窗口。

最初,这让我认为电梯实用程序及其传递参数的方式出现了问题。但是,我可以调用另一个应用程序,如:

4) 从 Elevation 实用程序调用记事本(带参数)

([wmiclass]"win32_Process").create('C:\swtools\elevator.exe powershell notepad.exe "c:\users\me\desktop\testArgs.ps1"')

这将打开一个记事本实例(由管理员拥有的进程)显示脚本的内容。

基本上每个单独的部分似乎都按预期工作,但三个一起不起作用。(正如我所说,这一切都适用于 Win7 32 位。)

4

0 回答 0