以提升的权限通过编程启动 cmd

以提升的权限通过编程启动 cmd

我有一堆 JavaScript 应用程序,它们都需要不同版本的 Node.js。我已经安装了nvm for Windows,现在想用一个文件自动启动它们。

我尝试建立一个cmd文件,如下所示:

cd AngularApp
if exist node_modules (start "Angular" cmd /c "nvm use 10.21.0 && npm start") else (start "Angular" cmd /c "nvm use 10.21.0 && npm i && npm start")
cd ../VueApp
if exist node_modules (start "Vue" cmd /c "nvm use 12.21.0 && npm start") else (start "Vue" cmd /c "nvm use 12.21.0 && npm i && npm start")
cd ../ReactApp
if exist node_modules (start "React" cmd /c "nvm use 14.16.0 && npm start") else (start "React" cmd /c "nvm use 14.16.0 && npm i && npm start")
cd ..

我可以看到打开了三个新的命令提示符。但是,这nvm需要提升访问权限(即:以管理员身份运行命令提示符),因此我被提示 6 次(每个新命令提示符 2 次)以允许该应用对我的设备进行更改。这本身就很烦人,但随后所有三个新窗口都被关闭,我没有运行任何应用。

我的脚本有什么问题?如何以提升的权限启动命令提示符(以减少需要确认的提示)?

注意:如果使用文件、PowerShell 脚本或通过 Node.js 命令提示符更容易实现我的目标.bat,那么我很乐意使用其他工具。

答案1

我以不同的方式解决了实际问题:我已将 添加node到 中作为依赖项package.jsonnpm和都yarn检查。 如果找到一个,它们将使用该特定版本的 Node.js。 如果没有,它们将使用系统范围的。 因此,不再需要具有提升的用户权限的命令提示符。package.jsonnodenvm

不过,我也找到了启动和管理员提示的答案:

使用提升的用户权限启动命令提示符

cmd通过这个脚本可以轻松实现:

powershell -command "start-process cmd -verb runas -argumentlist '/c npm -v && pause'"

这样做的目的是:

  1. powershell -command- 使用 PowerShell 执行所需的命令
  2. "start-process cmd"- 打开一个新的命令提示符
  3. "-verb runas"- 赋予命令提示符提升的用户权限
  4. "-argumentlist '/c npm -v && pause'"- 在提升的命令提示符中,获取 npm 的版本,然后等待用户输入

但是,要避免迷失在嵌套字符串中可能有点棘手。因此,您可能需要直接创建一个打开管理员命令提示符的 Powershell 脚本:

Start-Process cmd -Verb RunAs -ArgumentList "/c npm -v && pause"

第二个脚本与第一个脚本基本相同 - 但您直接从 Powershell 打开命令提示符。或者,您可能有一个 Powershell 脚本,它会打开另一个具有提升的用户权限的 Powershell:

Start-Process powershell -Verb RunAs {cd $pwd; npm -v; Read-Host}

以下是一些小变化:

  1. 您可以在花括号中为新的 Powershell 窗口指定多个命令,并用分号分隔它们。
  2. cd $pwd- 确保新窗口将导航到您当前所在的路径。否则,Powershell 可能会打开C:\Windows\system32
  3. npm -v- 获取 npm 的版本
  4. Read-Host- 等待用户输入

相关内容