2016-11-03 192 views
8

我已经找到了另两个任务的答案,却不能在一起:如何以批处理文件的参数运行powershell?

  • 运行PowerShell的从一个批处理文件

  • 运行PowerShell的有争论从一个批处理管理员文件

但我想运行powershell 作为管理员AND从批处理文件中带有参数

由于这个原因,我相信这并不是重复的。

这个问题很复杂这个原因:

我使用ArgumentList开关指向的文件路径运行升高的PowerShell时。我也用它来传递参数。另外,我能够成功地使用这个开关。尽管我可以将它用于这两项任务,但似乎并未如此。

这里是我如何使用PowerShell的当前:

作为管理员:

powershell -Command "& {Start-Process powershell -ArgumentList '-File "filePath.ps1' -Verb RunAs}" 

带参数:

powershell -ExecutionPolicy unrestricted Import-Module "filePath.ps1" -ArgumentList "arg1","arg2" 

我已经试过:

我试过把我的参数添加到文件传入的ArgumentList,但它们没有被识别。

我也尝试在工作参数行中添加-Verb RunAs,但powershell认为我试图在称为Verb的另一个参数中传递,并且未能将powershell作为和管理运行。

是否有可能完成运行PowerShell作为管理员和参数,通过切换我如何传递参数,或者我如何提升PowerShell?

回答

4

可能解决您的问题没有第三方工具,但解决方案有点神秘。

因此,请考虑下载Bill Stewart的帮助elevate32elevate64工具,如his answer中所述,这可简化解决方案。

下面是一个简单的例子,它调用Get-Date cmdlet和参数在从cmd.exe推出升高PowerShell会话(或批处理文件):

powershell -command "start-process -verb runas powershell" "'-noexit -command get-date -UFormat %s'" 

注意如何从命令行穿过到升高参数创建的中介-command的PS会话作为单个参数传递,该参数包含在嵌入式单引号中。

报价可能会非常棘手,但这种方法也适用在原则上调用*.ps1文件:

  • powershell -command "start-process -verb runas powershell"是命令行的不变一部分。

  • 其余"..." -enclosed字符串必须包含引用的是PowerShell可识别含所有参数,你会直接传递到powershell ...命令行调用(单引号是最容易)一嵌套一个字符串。

适用于你的例子:

... "'-File C:\path\to\filePath.ps1 arg1 arg2'" 

注:一定要使用你的脚本文件完整路径,因为升高的PS会话不(一定)运行与呼叫会话在同一个目录中。

如果需要报价嵌套字符串中的参数,使用\"

... "'-File \"c:\path with spaces\to\filePath.ps1\" arg1 arg2'" 
+1

我遇到了另一个问题,但我认为这个问题的范围,这解决了这个问题。在下一个!万分感谢。 –

4

您可以通过抓取我写入名为Elevate32.exe的简短命令行可执行文件(或针对64位版本的Elevate64.exe)来执行此操作。你可以在这里得到它:

http://www.westmesatech.com/misctools.html(ElevationToolkit1.zip)

例子:一切后

elevate64 -- powershell.exe -file C:\scripts\myscriptfile.ps1 

--是要提升的命令行。

+1

所以,我非常有信心,这工作。我接受其他答案的唯一原因是因为它不需要对外部进程的调用,而只是一种更优雅的解决方案。这是一个漂亮的工具,我打算将它应用到其他应用程序!再次感谢。 –

0

如果你碰巧有NirCmd由著名NirSoft的是,你在你的服务有一个很好的elevate命令(还有更多)。

nircmd elevate powershell.exe -File script.ps1 arg1 arg2 ... 

的NirCmd在x86和x64的口味提供和自由,就像从NirSoft所有软件。

相关问题