以管理员身份从 PS1 文件运行多个命令(Windows 终端)

以管理员身份从 PS1 文件运行多个命令(Windows 终端)

PS1 File( )在执行时将以管理员身份test.ps1运行命令。Pushd $Home; bcdedit /enum bootmgr; pausePWSH.exe

# test.ps1
$AL = "-NoProfile -WindowStyle Maximized -ExecutionPolicy Bypass", 
      "-Command", "Pushd $Home; bcdedit /enum bootmgr; pause"
Start -Verb RunAs -FilePath pwsh.exe -ArgumentList $AL

写入格式是什么,如果我执行它(test.ps1),那么将在 Windows 终端提升/以管理员身份打开?

我试过:

# test.ps1
$AL = "-M -p 'PowerShell'", 
      "pwsh.exe -ExecutionPolicy Bypass -Command `"Pushd $Home; bcdedit /enum bootmgr; pause`""
Start -Verb RunAs -FilePath wt.exe -ArgumentList $AL

给出错误:

[error 2147942402 (0x80070002) when launching `" pause"']

[error 2147942402 (0x80070002) when launching `" bcdedit /enum bootmgr"']

我也尝试了其他格式,但错误仍然存​​在。

仅当使用一个命令时才有效:

# test.ps1
$AL = "-M -p 'PowerShell'", 
      "pwsh.exe -ExecutionPolicy Bypass -Command `"bcdedit /enum bootmgr`""
Start -Verb RunAs -FilePath wt.exe -ArgumentList $AL

答案1

未转义 ;wt.exe命令行用于分隔多个命令对于 Windows 终端

所以,;角色传递给目标可执行文件 必须是逃脱,即作为\;,不幸的是总是必要的——即使对于;内部(嵌入)的字符也是如此"..."

所以:

$AL = "-M -p PowerShell -d `"$HOME`" " + 
      'pwsh.exe -ExecutionPolicy Bypass -c "bcdedit /enum bootmgr\; pause"'
Start-Process -Verb RunAs -FilePath wt.exe -ArgumentList $AL

笔记:

  • 为了简单起见,上面使用wt.exe-d选项来传递启动目录。
  • A单身的字符串编码全部参数被传递给-ArgumentList参数,这通常可以解决长期存在的无法修复的错误 - 请参阅这个答案

相关内容