作为 VMWare 定制规范的一部分,如何运行提升的 powershell 脚本?

作为 VMWare 定制规范的一部分,如何运行提升的 powershell 脚本?

背景/目标

我有一个正在部署的 VMWare 模板,并且正在使用 VMWare 的“自定义规范”来执行许多 sysprep 任务。

我需要完成的最后一件事是按顺序静默安装多个应用程序。我有一个 PowerShell 脚本可以执行此操作,但它仅在提升权限时才有效。

VMWare 的自定义规范中有一个“运行一次”功能。理想情况下,我想使用它以提升的方式调用 PowerShell 脚本,这样当我第一次以管理员身份登录时它就会运行。

我尝试过的方法/遇到的问题

  • 我尝试从 Run Once 命令调用 PsExec -s,并让 PsExec 调用 powershell。不幸的是,PsExec 需要在提升的命令行中运行,因此这行不通。

问题

我突然想到这可能是不可能的。我的想法错了吗?我是否应该编写一个远程 PS1 并在创建的机器上运行它?这是可行的,但我想尽可能地自动化,并消除除我之外可能想要部署的人的任何困惑。

答案1

取自http://poshcode.org/695

function elevate-process
{
$file, [string]$arguments = $args;
$psi = new-object System.Diagnostics.ProcessStartInfo $file;
$psi.Arguments = $arguments;
$psi.Verb = "runas";
[System.Diagnostics.Process]::Start($psi);
}

elevate-process [full path to your process here]

@Tony Roth 说过。如果 VMware 自己的自定义进程以提升的权限运行,那么其所有子进程也应该如此,因此在那里启动 Powershell 脚本应该与相关进程一起运行。

如果没有,那么我不知道没有交互的情况下提升权限的方法。这就是提升系统的意义所在。上面的代码将把一个进程从非管理员提升到管理员用户空间,但是你必须点击 UAC,我在我的构建中使用了这个。

启动包含 Elevate-Process 脚本,该脚本仅调用主脚本。机器在首次启动后启动时会启动该脚本,单击 UAC 上的“确定”,它会以管理员权限完成其余操作。

或者,是否可以在初始构建时禁用 UAC,然后在构建结束时包含重新启用它的代码?

这看起来会有所帮助但请注意,我还没有使用过它。

相关内容