簡體   English   中英

批處理腳本未調用Powershell

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM