大量的試驗和錯誤後,我想出了一個解決方案:
創建此快捷方式(編輯爲您的.ps1)有scrips相對作爲管理員到任意目錄下運行:
CMD /C PowerShell "SL -PSPath '%CD%'; $Path = (GL).Path; SL ~; Start PowerShell -Verb RunAs -Args \""SL -PSPath '"$Path"'; & '".\YourScriptHere.ps1"'"\""
您必須清空快捷方式的「開始」字段以將其相對路徑設置爲工作目錄。
或者,這裏有一個腳本,將產生這些快捷方式爲每個名爲.ps1的一個目錄中(與「開始在」已清除):
(GCI | Where-Object {$_.Extension -eq ".ps1"}).Name | ForEach-Object {
$WshShell = New-Object -ComObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut((GL).Path+"\$_ Run.lnk")
$Shortcut.TargetPath = 'CMD'
$Shortcut.Arguments = "/C PowerShell `"SL -PSPath `'%CD%`'; `$Path = (GL).Path; SL ~; Start PowerShell -Verb RunAs -Args \`"`"SL -PSPath `'`"`$Path`"`'; & `'`".\$_`"`'`"\`"`""
$Shortcut.IconLocation = 'PowerShell.exe'
$Shortcut.Save()
}
如果需要的話,加-NoExit
,-ExecutionPolicy Unrestricted
,等等。剛剛在第一個\"
之後。
注:
究其原因,PowerShell與第一發射第二,管理實體,是直接啓動以admin(打勾的快捷方式的「以管理員身份運行」框),用於some reason忽略「開始在「並且始終在System32中啓動。
CMD正用於啓動第一個實例,因爲PowerShell當前無法解析包含方括號的路徑,將它們解釋爲正則表達式字符。這通常可以通過使用LiteralPath參數(aka PSPath)來避免,但是在這裏,路徑在啓動時在幕後傳遞,並且由開發人員來修復(我剛剛提交了一個錯誤報告here)。
[確定當前PowerShell腳本位置的最佳方式是什麼?](http://stackoverflow.com/questions/5466329/whats-the-best-way-to-determine-the-location -of-the-current-powershell-script) –
這是一個實際的快捷方式,通過右鍵單擊並拖動並選擇Create Shortcuts Here?或者這是一個啓動PowerShell腳本的批處理文件?或者這是從計劃任務啓動的?或其他?請儘可能明確。 –
@Entbark:通過在此處右鍵單擊並選擇創建快捷方式創建的實際快捷方式。 –