gpt4 book ai didi

powershell - 以管理员身份从 cmd 批处理运行 PowerShell 脚本

转载 作者:行者123 更新时间:2023-12-05 01:05:17 24 4
gpt4 key购买 nike

我有一个 PowerShell 设置,我想在执行策略可能受到限制并需要管理员权限的计算机上执行它。
理想情况下,我可以将它包装在一个 cmd 批处理中,如下所示:

powershell -Command "Start-Process powershell -Verb runAs -ArgumentList '-noexit','-ExecutionPolicy','bypass','-File','C:\path\setup.ps1'"

问题是当 C:\path\setup.ps1 包含空格时我无法使其工作,并且如果相对路径(使用 cd C :\path)。
有什么帮助吗?

最佳答案

  • 将传递参数单独传递给Start-Process cmdlet 的 -ArgumentList 参数在概念上可能更可取,long-standing bug不幸的是,将所有参数编码在一个单个字符串中会更好 - 请参阅 this answer .

  • 使用 -Verb RunAs 启动命令with elevation(作为管理员),总是使用 SYSTEM32 目录作为工作目录 - 即使是 -WorkingDirectory 参数,如果存在,也会被悄悄地忽略。因此,为了设置自定义工作目录并调用 ,必须使用 -Command CLI 参数和 Set-Location (cd) 调用必须在调用由 relative 路径指定的脚本之前。

  • cmd.exe、通过 powershell.exe、Windows PowerShell CLI 执行所有这些操作,由于逃避要求而使事情复杂化。

应用于您的 powershell.exe CLI 调用(假设 dir.C:\path 1 和脚本文件 setup 1.ps1):

powershell -Command "Start-Process -Verb RunAs powershell '-NoExit -ExecutionPolicy Bypass -Command "^"" cd \\"^""C:\path 1\\"^""; & \\"^"".\setup 1.ps1\\"^"" "^""'"

注意:

  • cmd.exe 中,"^"" (sic) 是传递嵌入的 " 的最稳健方式在整个 "..." 字符串到 powershell.exe (从 shell-free 上下文中,例如计划任务,使用 """,或者更简单地说,\"

  • 为简单起见,对于 双重 嵌套 " 字符。上面使用了 \-转义技术,\ 字符。它们本身需要转义为 \\

注意:从 PowerShell CLI 的角度来看 - 包括在 PowerShell (Core) 7+ 中(见下文) - \" always 有效,但它的使用存在问题 来自 cmd.exe,它不会将 \" 理解为 转义 " char . 并因此将其视为常规字符串分隔符,这可能会导致它将 \"...\" 误解为 unquoted 字符串的一部分,其中元字符例如 & 然后可以中断命令,因为它们是由 cmd.exe 本身预先解释的;例如, powershell -c "\"Abbot & Costello\""cmd.exe 中断,需要 ^& 而不是 " 或者如上所示,转义嵌入" 改为 "^"":
powershell -c ""^""Abbot & Costello"^"""


当您调用 pwsh.exe 时 - PowerShell (Core) 7+ CLI - 两种简化是可能的:

  • 除了\"pwsh.exe更简单地支持""嵌入" 字符。在 "..." 字符串中;后者在 cmd.exe

    中运行良好
  • pwsh.exe 现在有一个单独的 -WorkingDirectory 参数,因此允许使用 -File 参数调用脚本 -但是请注意,文件路径在设置工作目录之前被解析,因此下面使用完整路径。

pwsh.exe -Command "Start-Process -Verb RunAs pwsh.exe '-NoExit -ExecutionPolicy Bypass -WorkingDirectory ""C:\path 1"" -File ""C:\path 1\setup 1.ps1""'"

关于powershell - 以管理员身份从 cmd 批处理运行 PowerShell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70735284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com