[英]Batch script not calling Powershell
我有一個批處理腳本,該腳本在管理模式下調用Powershell文件。 我在不久前找到了這段代碼,從那時起它一直很有效:
PowerShell -NoProfile -ExecutionPolicy Bypass -Command
"& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File %PSFile%' -Verb RunAs}";
但是這次,我從另一個程序調用了批處理腳本。 該程序表示該過程有效,但實際上並未執行任何操作。 從echo看日志,我可以看到批處理腳本被調用了,但是沒有調用Powershell。 我嘗試手動運行批處理腳本,它很好地調用了PS,因此其他程序如何調用批處理腳本的某些事情弄亂了它如何調用PS。
考慮到這一點,我嘗試更改批處理腳本以直接運行.ps1文件,而不是啟動新的powershell管理實例來啟動它。 我的新.bat文件如下所示:
Powershell -File %PSFILE% -Verb RunAs
從另一個程序調用此程序成功調用了我的Powershell腳本,但是由於PS腳本不是必需的admin PS會話,因此我從PS腳本中收到了很多錯誤。
如何更改批處理腳本以以管理員身份調用Powershell,而又不使用Powershell調用自身(似乎與需要運行它的程序不兼容)?
編輯:嘗試了一堆調整后,我發現我什至不需要進入管理員模式即可執行此腳本。 但是,通過程序(無論是否通過管理員)運行它時,仍然出現拒絕訪問錯誤。 因此,與從程序中運行它相比,與手動運行批處理腳本時相比,它需要更多權限。
這是我所做的(在.bat
文件中):
如果.bat
不是以管理員身份運行
powershell.exe -Command "powershell.exe 'C:\path\to\script.ps1' -Verb runAs"
如果.bat
以管理員身份運行
powershell.exe -ExecutionPolicy Bypass -Command "C:\path\to\script.ps1"
您可以使用一個我寫的名為elevate32.exe
/ elevate64.exe
的小實用程序。
elevate64 -- C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy Bypass -File "d:\path to script\scriptfile.ps1"
elevate32.exe
(32位版本)和elevate64.exe
(64位版本)基本上可以提升傳遞給它們的命令行。
您可以在此處獲取它(ElevationToolkit1.zip):
http://www.westmesatech.com/misctools.html
一種替代方法是使用簡短的WSH腳本,該腳本在被調用時會引起海拔升高。 一個例子在Aaron Margosis的博客上:
https://blogs.msdn.microsoft.com/aaron_margosis/2007/07/01/scripting-elevation-on-vista/
腳本:
// elevate.js -- runs target command line elevated
if (WScript.Arguments.Length >= 1) {
Application = WScript.Arguments(0);
Arguments = "";
for (Index = 1; Index < WScript.Arguments.Length; Index += 1) {
if (Index > 1) {
Arguments += " ";
}
Arguments += WScript.Arguments(Index);
}
new ActiveXObject("Shell.Application").ShellExecute(Application, Arguments, "", "runas");
}
else {
WScript.Echo("Usage:");
WScript.Echo("elevate Application Arguments");
}
這種方法的局限性在於它依賴於WSH命令行解析器,而不能等待程序終止。 在您的方案中,這些限制可能不是問題。
看來我對問題根源完全不滿意。 這是我正在編輯的某些文件夾上的權限錯誤。 我通過運行腳本的程序充當單獨的服務。 我必須添加它,並對我正在編輯的所有文件夾的安全組具有修改權限。 腳本中不需要提升權限,只需修改權限即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.