具有提升特权的Windows Core运行命令

时间:2019-05-18 13:56:21

标签: windows powershell cmd administrator powershell-core

对于标准用户,有一些选项可以以管理员身份(或任何其他用户)运行,但是,即使以管理员身份登录,某些功能也需要“提升”运行。

在Windows gui上,只需右键单击.exe并选择run as Administrator或什至提升'cmd'或'powershell'。

如何在Windows核心上获得提升的特权?

1 个答案:

答案 0 :(得分:1)

通常,要在Windows上以编程方式调用具有高程的可执行文件(以管理员身份运行),请使用Start-Process cmdlet和-Verb RunAs

这同样适用于pwsh.exe(PowerShell Core 可执行文件),因此在最简单的情况下,您可以编写:

# Open a new console window with PowerShell Core running with admin privileges.
Start-Process -Verb RunAs pwsh

如果您希望将其包装在一个便捷功能中,该功能也更健壮且在Windows上是跨版本 (在Windows中也可以使用) PowerShell):

function Enter-AdminPSSession {
  Start-Process -Verb RunAs (Get-Process -Id $PID).Path
}

# Optionally also define a short alias name:
# Note: 'psadmin' is a nonstandard alias name; a more conformant name would be
#       the somewhat clunky 'etasn' 
#       ('et' for 'Enter', 'a' for admin, and 'sn'` for session)
Set-Alias psadmin Enter-AdminPSSession

如果您希望该功能也可以跨平台(也可以在类似Unix的平台上使用):

function Enter-AdminPSSession {
  if ($env:OS -eq 'Windows_NT') {
    Start-Process -Verb RunAs (Get-Process -Id $PID).Path
  } else {
    sudo (Get-Process -Id $PID).Path
  }
}

重要:由于涉及的cmdlet /实用程序,

  • Windows 上,新会话总是在 new 控制台窗口中打开。

    • 新会话是管理员会话这一事实反映在其窗口的标题(前缀Administrator:)中
  • Unix (Linux,macOS)上,新会话总是在相同控制台(终端)窗口中打开。

    • 在Unix上,没有明显的迹象表明已进入管理员会话。运行whoami是一种快速的测试方法(在管理会话中返回root);更好的解决方案是修改prompt函数以在提示字符串中反映管理会话。

如果您还希望能够在新会话中运行命令并有选择地自动关闭命令,则需要做更多的工作。

如果您download script Enter-AdminPSSession.ps1(MIT许可的Gist),则可以运行以下命令:

# Example: Synchronously run an MSI installer with elevation
#          and exit on completion.
Enter-AdminPSSession -Exit { Start-Process msiexec -Args '/qn /i package.msi' }

# Check for success via $LASTEXITCODE
if ($LASTEXITCODE -ne 0) { Throw "Installation failed." }

此外,脚本:

  • 使用[admin] 

  • 在交互式提升的会话中为提示字符串添加前缀
  • 确保呼叫会话的当前位置(工作目录)也是提升的会话的当前位置。