我试图从命令提示符启动一个长的PowerShell脚本,名称为“long name here.ps1”。但我也试图确保它在PowerShell中作为管理员命令运行。我相应地设置了PowerShell中的所有执行策略,并使用了PowerShell的SS64 Set-ExecutionPolicy命令指南来让PowerShell工作。但我试图使用来自another Stack Overflow question的解决方案,该解决方案讨论了以管理员身份运行命令。我正在运行一个批处理脚本,需要以管理员身份执行PowerShell脚本(.ps1),我不介意用户是否被UAC或密码提示。
我现在正在使用以下命令:
powershell.exe -command "&{ Start-Process powershell -ArgumentList '-noprofile -file "C:\long name here.ps1"' -verb RunAs}"
我在https://ss64.com/ps/powershell.html的“以管理员身份运行脚本”中发现了类似的命令。这段代码的问题是,我的PowerShell脚本有参数和一个带空格的长名称。我已经尝试了许多不同的迭代此命令没有成功,和那些不工作的列出如下:
powershell.exe -command "&{ Start-Process powershell -ArgumentList '-noprofile -file C:\long\` name` here.ps1' -verb RunAs}"
powershell.exe -command "&{ Start-Process powershell -ArgumentList '-noprofile -file:"C:\long name here.ps1' -verb RunAs}"
此外,我完全不知道如何将参数发送到实际的脚本。
3条答案
按热度按时间l5tcr1uw1#
使用开源工具
如果允许使用开源实用程序,则可以使用我编写的一个名为
elevate.exe
的简短工具,以管理员身份使用-File
参数和您希望使用的脚本参数启动powershell.exe:用途:你可以在这里获得开源工具:
https://github.com/Bill-Stewart/elevate
使用WSH脚本
如果您无法使用外部可执行文件,也可以使用Windows Script Host(WSH)脚本
elevate.js
来执行此操作(尽管它不像提升工具的--
参数那样可靠地处理引号):您可以拨打以下电话:
自提升PowerShell脚本
另一种选择是编写一个自提升的PowerShell脚本。您可以在脚本中检查高程;如果没有提升,它可以提升自己并运行任何你需要的命令。范例:
tmb3ates2#
如果我阅读你的问题是正确的- powershell不会找到文件,因为它停止阅读路径名时,它遇到一个空格?
给出的here示例指定:以管理员身份从命令提示符运行的powershell命令应具有以下语法:
有几种方法可以达到你的目的。但最简单的方法是使用**`**字符对引号进行转义。类似的东西,
也可能值得查看其他答案here
wpx232ag3#
当你使用
PowerShell.exe -Command
时,你不需要使用引号。例如,您可以运行以下命令:-Command
之后的所有内容都被解释为命令。还要注意,CMD中的双引号需要用反斜杠转义。因此:如果你的文件有参数: