2016-08-11 26 views
0

因此,我正在運行一個基本腳本以將快捷方式複製到公用配置文件桌面,以便任何登錄用戶都可以在桌面上擁有該快捷方式。情況是,我將不得不繞過執行策略,所以我通過批處理文件來做到這一點。這是我曾嘗試,但它似乎沒有對我的工作......通過批處理文件啓動爲Admin Powershell

Powershell.exe -Command "& {Start-Process Powershell.exe -ArgumentList 'ExecutionPolicy Bypass -File DesktopShortcut.ps1' -Verb RunAs}" 

和PS文件很簡單:

Copy-Item -Path "aiStarter.lnk" -Destination "C:\Users\Public\Desktop\" -PassThru 

當我運行它的窗口只是閃爍,然後消失。如果我運行沒有RunAs我得到訪問被拒絕。我不想問這個,因爲我確信它之前已經被問過了,但我確定我正確地執行了這個。思考?

+0

看起來很奇怪。您基本上使用批處理文件來啓動powershell,它會再次啓動powershell,最終嘗試運行您的PowerShell腳本。 – Squashman

+2

另外,您不需要腳本來分發快捷方式。只需使用組策略。 –

+0

@Squashman使用提升的權限啓動PowerShell進程需要使用複雜的語法。 'powershell.exe'沒有「runas」開關,所以你需要利用'Start-Process' cmdlet。 –

回答

1

就像其他人所說的,這不是提供捷徑的最佳選擇。

這就是說,有兩個問題。在執行策略中需要一個-。另一個是在升級的powershell實例創建之後,工作路徑發生變化。因此,您需要將完整路徑添加到腳本中,如果它是批處理文件,則可以使用%~dp0

Powershell.exe -Command "& {Start-Process Powershell.exe -ArgumentList '-ExecutionPolicy Bypass -File %~dp0DesktopShortcut.ps1' -Verb RunAs}" 

此後可能需要用powershell腳本完成。

Copy-Item -Path "$($MyInvocation.MyCommand.Path)\aiStarter.lnk" -Destination "C:\Users\Public\Desktop\" -PassThru 

這裏假定批處理文件,快捷方式和PowerShell腳本都在同一個文件夾中。

+0

%〜dp0像一個魅力工作,非常感謝! – nkasco