以低權限從 powershell 載入資源管理器

以低權限從 powershell 載入資源管理器

我有一個 Powershell 維護腳本,其工作方式如下:

kill explorer
do things
restart explorer

腳本在提升模式下執行,但我需要在沒有管理員權限的情況下重新啟動資源管理器。任何想法?

謝謝

答案1

據我所知,不可能從提升的進程直接啟動非提升的進程(即使用標準的低權限令牌)。這不是 PowerShell 限制,而是 Windows 中 UAC 的工作方式。

http://msdn.microsoft.com/en-us/library/windows/desktop/bb756914.aspx

一個經常被問到的問題是如何從提升的進程啟動未提升的應用程序,或者更根本的是,如何在運行提升後使用未提升的令牌啟動進程。由於沒有直接的方法可以做到這一點,因此通常可以透過以標準使用者身分啟動原始應用程式並僅提升應用程式中需要管理權限的部分來避免這種情況。這樣,始終有一個非提升的進程可用於以目前登入的桌面使用者身分啟動其他應用程式。然而,有時,提升的進程需要讓另一個應用程式在未提升的情況下運作。這可以透過使用 Windows Vista® 中的任務規劃程序來完成。提升的進程可以註冊任務以目前登入的桌面使用者身分執行。

該文章提到了兩種可能的解決方案:

  1. 盡可能在非提升模式下執行腳本,並且僅針對需要它的部分進行提升。換句話說,在非提升腳本中終止並重新啟動資源管理器,並在提升模式下執行第二個腳本來「執行操作」:

    Stop-Process -ProcessName explorer
    Start-Process PowerShell.exe -Verb Runas -ArgumentList "-File path_to_script\script.ps1"
    Start-Process explorer.exe
    

    Runas動詞將導致第二個 PowerShell 程序以提升模式啟動。但是,這會觸發 UAC 提示,因此如果您要完全自動化執行此腳本,這不是一個好的解決方案。

  2. 建立排程任務以在提升的作業完成後啟動資源管理器,執行該任務並將其刪除。您可以使用schtasks.exe去做這個:

    schtasks /Create /TN "foobar" /TR explorer.exe /SC OnLogon
    schtasks /Run /TN "foobar"
    schtasks /Delete /TN "foobar" /F
    

    只需確保為任務選擇一個不會與其他任務衝突的名稱即可。

您也可以結合上述兩種方法,建立一個排程任務,以提升模式執行第二個 PowerShell 腳本,而其餘的則以非提升模式執行。這樣做的優點是不會產生 UAC 提示,但會帶來安全風險,即任何對腳本具有寫入存取權限的人都可以在您的電腦上執行幾乎任何操作。不過,根據您運行和提升當前腳本的具體情況,這可能是一個沒有實際意義的問題。

如果您的腳本僅由您執行,則第三個選項是將其配置為使用您的憑證啟動新的 explorer.exe 進程:

$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList @("username", (ConvertTo-SecureString -String "password" -AsPlainText -Force))
Start-Process explorer.exe -Credential $Cred

這裡的缺點是將您的密碼以純文字形式儲存在腳本中。您也可以透過在 PowerShell 提示字元中鍵入以下內容,將其以加密形式儲存在單獨的檔案中:

Read-Host -AsSecureString | ConvertFrom-SecureString | Out-File C:\pw_encrypted.txt

然後輸入您的密碼(它將在 PS 提示字元中顯示為星號)並按 Enter 鍵。現在您可以在腳本中使用它,如下所示:

$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList @("username", (Get-Content C:\pw_encrypted.txt | ConvertTo-SecureString))
Start-Process explorer.exe -Credential $Cred

答案2

唯一想到的是使用任務規劃程式重新啟動資源管理器。啟動進程或任何其他方法似乎都可以維持提升的狀態。

相關內容