繁体   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