首页 > 解决方案 > Powershell 提升并传递命令

问题描述

所以我正在构建一个脚本,在 x86 文件夹的公共文件夹中启动一个可执行文件。我遇到的问题是脚本使用 (x86) 好像 x86 是应该首先运行的命令。有人对如何防止这种情况有任何想法吗?

$Pulse = "${env:CommonProgramFiles(x86)}\Pulse Secure\JamUI\JamCommand.exe"
$ImportFile = '"-importfile "C:\Program Files (x86)\MyFile.preconfig"'
Start-Process powershell -ArgumentList "-noexit", "-noprofile", "-command &{Start $Pulse, $ImportFile}" -Verb Runas

标签: powershell

解决方案


正如 Mathias 所指出的,没有严格需要启动另一个具有提升的PowerShell实例(以管理员身份运行,-Verb RunAs),因为您可以直接提升目标可执行文件,JamCommand.exe;但是,如果您想在另一个保持打开状态的 PowerShell 会话中运行可执行文件- 正如您的使用所-noexit建议的那样 - 您确实可以:

$pulse = "${env:CommonProgramFiles(x86)}\Pulse Secure\JamUI\JamCommand.exe"
$importFileArg = '-importfile "C:\Program Files (x86)\MyFile.preconfig"'

Start-Process -Verb RunAs powershell @"
 -noexit -noprofile -c & "$pulse" $importFileArg
"@

笔记:

  • 这直接在提升的 PowerShell 会话中同步运行(假设它是一个控制台应用程序),并且仅该程序退出JamCommand.exe后才进入交互式会话。(您的尝试包含另一个调用(通过 alias ),这将使控制台程序在另一个控制台窗口中运行,该窗口在程序退出时自动关闭。)Start-ProcessStart

  • 所有传递参数都编码在单个(此处)字符串中传递给(位置隐含的)-ArgumentList参数,这允许直接控制用于启动进程的命令行,并且由于长- 处理数组元素时如何单独传递参数的常设错误- 请参阅此答案


推荐阅读