我有一个我正在部署的VMWare模板,我正在使用VMWare的“自定义规范”来执行许多sysprep任务。
我需要完成的最后一件事是按顺序安装几个应用程序。 我有一个PowerShell脚本来做到这一点,但它只在提升时才起作用。
作为其定制规范的一部分,VMWare具有“运行一次”function。 理想情况下,我想用这种方式以高级方式调用PowerShell脚本,以便在我以pipe理员身份login时运行。
对我来说,这可能是不可能的。 我在想这个错吗? 我应该创作一个远程的PS1,并运行它创build的macine吗? 这是可行的,但我想尝试尽可能自动化的东西,除了我可能想要部署的人除去任何困惑。
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]
托尼·罗斯说了些什么。 如果VMware自己的定制过程以提升的特权运行,那么它的所有subprocess也应该这样做,所以在那里启动一个Powershell脚本应该与关联的进程一起运行。
如果不是那么我不知道一个没有互动的提升方式。 这就是高程系统的一个重点。 上面的代码将提升从非pipe理员到pipe理员用户空间的过程,但是您将不得不点击过去的UAC,我在我的构build中使用这个。
启动包含简单地调用主脚本的Elevate-Process脚本。 当机器在第一次启动之后启动时,它将启动它,在UAC上单击确定,然后用pipe理员权限完成剩下的工作。
作为替代scheme,也许在你的初始构build中禁用UAC,然后包含代码在构build结束时重新启用它?
这看起来像它会帮助,但注意我没有使用它。