如何以批处理文件的参数运行powershell?
我已经找到了另两个任务的答案,却不能在一起:如何以批处理文件的参数运行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?
它是可能解决您的问题没有第三方工具,但解决方案有点神秘。
因此,请考虑下载Bill Stewart的帮助elevate32
和elevate64
工具,如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'"
您可以通过抓取我写入名为Elevate32.exe的简短命令行可执行文件(或针对64位版本的Elevate64.exe)来执行此操作。你可以在这里得到它:
http://www.westmesatech.com/misctools.html(ElevationToolkit1.zip)
例子:一切后
elevate64 -- powershell.exe -file C:\scripts\myscriptfile.ps1
--
是要提升的命令行。
所以,我非常有信心,这工作。我接受其他答案的唯一原因是因为它不需要对外部进程的调用,而只是一种更优雅的解决方案。这是一个漂亮的工具,我打算将它应用到其他应用程序!再次感谢。 –
我遇到了另一个问题,但我认为这个问题的范围,这解决了这个问题。在下一个!万分感谢。 –