如何以管理员身份运行PowerShell并使用批处理文件中的参数?

Kyl*_*let 9 powershell cmd batch-file

我已经分别找到了两个任务的答案,但没有在一起:

  • 从批处理文件以管理员身份运行PowerShell

  • 使用批处理文件中的参数运行PowerShell

但我希望以管理员 身份运行PowerShell , 使用批处理文件中的参数.

出于这个原因,我相信到目前为止这不是重复.

由于这个原因,这个问题很复杂:

ArgumentList在运行提升的PowerShell时使用开关指向文件路径.我也用它来传递参数.另外,我已成功使用此开关.虽然我似乎不能将它用于这两项任务.

这是我目前使用PowerShell的方式:

作为管理员:

powershell -Command "& {Start-Process powershell -ArgumentList '-File "filePath.ps1' -Verb RunAs}"
Run Code Online (Sandbox Code Playgroud)

有参数:

powershell -ExecutionPolicy unrestricted Import-Module "filePath.ps1" -ArgumentList "arg1","arg2"
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

我试过将我的参数添加到ArgumentList文件传入的位置,但是它们无法识别.

我也尝试添加-Verb RunAs到工作参数行,但PowerShell认为我试图传递另一个名为Verb的参数,并且无法运行PowerShell as和admin.

是否有可能以管理员身份运行PowerShell,并通过参数,通过切换我传递参数的方式,或者我如何提升PowerShell来实现?

mkl*_*nt0 5

可以解决没有第三方工具的问题,但解决的办法是有点神秘。

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

这是一个简单的示例,Get-Date在从cmd.exe(或批处理文件)启动的提升的PowerShell会话中,使用参数调用cmdlet :

powershell -command "Start-Process -verb runas powershell" "'-noexit -command get-date -UFormat %s'"
Run Code Online (Sandbox Code Playgroud)

请注意,传递给中间参数创建的提升的 PowerShell会话的命令行是如何-command作为嵌入在单引号中单个参数传递的。

引用可能会很棘手,但是这种方法*.ps1原则上也适用于调用文件:

  • powershell -command "Start-Process -verb runas powershell"是命令行的不变部分。

  • 其余的- "..."括起来的字符串必须包含嵌套的单个字符串,并带有引号,PowerShell可以识别该引号(最简单的单引号),其中包含您将直接传递给命令行调用的所有参数powershell ...

应用于您的示例:

... "'-File C:\path\to\filePath.ps1 arg1 arg2'"
Run Code Online (Sandbox Code Playgroud)

注:一定要使用完整路径到脚本文件,因为高架PowerShell会话确实(一定)运行在同一个目录,作为呼叫会话。

如果需要在嵌套字符串中引用参数,请使用\"

... "'-File \"c:\path with spaces\to\filePath.ps1\" arg1 arg2'"
Run Code Online (Sandbox Code Playgroud)