我分别找到了这两项任务的答案,但没有一起找到:
从批处理文件以管理员身份运行 PowerShell
使用批处理文件中的参数运行 PowerShell
但我想以管理员身份运行 PowerShell 并且 使用批处理文件中的参数。
因此,我确信到目前为止这不是重复的。
这个问题因此变得复杂:
运行提升的 PowerShell 时,我使用 ArgumentList
开关指向文件路径。我还用它来传递参数。另外,我已经能够成功地使用这个开关。不过,我似乎无法将它用于这两项任务。
以下是我目前使用 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 和使用参数运行 PowerShell?
最佳答案
无需第三方工具就可以解决您的问题,但解决方案有些神秘。
因此,请考虑下载 Bill Stewart 有用的 elevate32
和 elevate64
工具,如 his answer 中所述。 ,这简化了解决方案。
这是一个调用 Get-Date
的简单示例从 cmd.exe
(或批处理文件)启动的提升的 PowerShell session 中带有参数的 cmdlet:
powershell -command "Start-Process -verb runas powershell" "'-noexit -command get-date -UFormat %s'"
请注意,如何将命令行传递到中间 -command
参数创建的提升的 PowerShell session ,并作为单个参数传递用嵌入的单引号引起来。
引用可能会很棘手,但这种方法原则上也适用于调用 *.ps1
文件:
powershell -command "Start-Process -verb runas powershell"
是命令行的不变部分。剩余的
"..."
括起来的字符串必须包含一个嵌套单个字符串,并带有 PowerShell 识别的引号(单引号是最简单的),其中包含 >您将直接传递给powershell ...
命令行调用的所有 参数。
应用于您的示例:
... "'-File C:\path\to\filePath.ps1 arg1 arg2'"
注意:请务必使用脚本文件的完整路径,因为提升的 PowerShell session 不会(必然)运行在与调用 session 相同的目录。
如果您需要引用嵌套字符串中的参数,请使用\"
:
... "'-File \"c:\path with spaces\to\filePath.ps1\" arg1 arg2'"
关于powershell - 如何以管理员身份并使用批处理文件中的参数运行 PowerShell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40410747/