Vmware-Esxi
作為 VMWare 自定義規範的一部分,如何執行提升的 powershell 腳本?
背景/目標
我有一個正在部署的 VMWare 模板,並且我正在使用 VMWare 的“自定義規範”來執行許多 sysprep 任務。
我需要完成的最後一件事是按順序靜默安裝幾個應用程序。我有一個執行此操作的 PowerShell 腳本,但它僅在提升時才有效。
VMWare 具有“執行一次”功能作為其定制規範的一部分。理想情況下,我想使用它以提升的方式呼叫 PowerShell 腳本,以便在我第一次以管理員身份登錄時執行它。
我嘗試過的/問題
- 我嘗試從 Run Once 命令呼叫 PsExec -s,並讓 PsExec 呼叫 powershell。不幸的是,PsExec 需要在提升的命令行中執行,所以這行不通。
問題
在我看來,這可能是不可能的。我想錯了嗎?我是否應該創作一個遠端 PS1 並針對所創建的機器執行它?這是可行的,但我想嘗試盡可能地使事情自動化,並為除了我之外可能想要部署的人消除任何困惑。
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,我在我的建構中使用它。
Startup 包含簡單呼叫主腳本的 Elevate-Process 腳本。當機器在第一次啟動後啟動時,它會啟動它,您在 UAC 上點擊“確定”,它會以管理員權限完成其餘的工作。
作為替代方案,也許在您的初始建構中禁用 UAC,然後包含程式碼以在建構結束時重新啟用它?
這看起來會有所幫助,但請注意我沒有使用它。