powershell - 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
解决方案
正如 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-Process
Start
所有传递参数都编码在单个(此处)字符串中传递给(位置隐含的)
-ArgumentList
参数,这允许直接控制用于启动进程的命令行,并且由于长- 处理数组元素时如何单独传递参数的常设错误- 请参阅此答案。
推荐阅读
- sharepoint - 我有一个强大的应用程序(将数据存储在 sharepoint 中),现在它已准备好上线,但推出的最佳实践是什么
- svg - svg路径的奇怪行为
- bash - 在mac上捕获光标终端位置的Shell脚本会产生额外的字符
- jakarta-ee - Java 8 和 Servlet 4 的 Maven 依赖项是什么?
- c# - 如何将 C# 中的游戏价值基于其从 0 的大小而不是其实际价值?
- mysql - 无法在mysql上创建用户
- wget - 如何在 Linux 中使用 wget 从服务器下载所有文件以及所有子目录?
- java - 为什么 Micronaut 会丢弃客户端 url 配置的主机名之后的所有内容?
- mysql - 使用 npm `mysql` 包插入无法使用 connection.query 方法
- reactjs - react-admin 组件的问题