2016-07-29 109 views
2

當創建一個Windows快捷方式啓動一個PowerShell腳本以下工作正常雙時,作爲一個普通用戶,並用鼠標右鍵單擊Run as administrator點擊:Windows快捷方式與相對路徑PowerShell腳本

%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy "Bypass" -Command "&{& 'C:\Script.ps1'}" 

Example screenshot

但是,當路徑是相對的並且不知道前面的情況時,以下情況在正常用戶雙擊時可以正常工作,但不能右鍵單擊Run as administrator

%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy "Bypass" -Command "&{& '.\Script.ps1'}" 

我的問題,我怎麼能在兩種情況下工作,當路徑是相對的?我試過使用PSScriptRoot,但那也沒用。

謝謝你的幫助。

+0

相對於什麼?屏幕截圖中的「開始」框爲空。你是填滿那個盒子,還是有一些其他的路徑用於開始? –

+0

這是我對這個問題的解決方案:http://stackoverflow.com/a/35054677/368889 – Mica

回答

2

從資源管理器以管理員身份啓動時,必須提供腳本的絕對路徑。

當以admin身份啓動進程時,Explorer.exe忽略快捷方式中的起始目錄。相反,管理員級別的進程始終使用[Environment]::GetFolderPath('System')中的當前目錄啓動(通常爲C:\Windows\System32

在不同目錄中運行的簡單方法是在腳本開始處更改目錄。以下行將cd到目錄的腳本是英寸

Set-Location $PsScriptRoot 

如果腳本需要在不同的路徑來啓動,那麼您可能需要編寫一個函數來發現其中這條道路是在本地機器上(如enumerating USB drives

+0

謝謝你的幫助瑞恩。問題是腳本啓動器和腳本可能位於USB存儲棒或某個網絡共享位置。所以它所在的位置是不同的。這可以用Set-Location來解釋嗎?事實上,由於我們並不知道這一點,因此「入門」保持空白。 – DarkLite1

+0

更新了答案,使其更簡單一些。順便說一句,'Set-Location'與'cd'相同。後者只是前者的別名。 –