windows 核心 运行 命令具有提升的权限
windows core run command with elevated privileges
标准用户有一些选项可以 运行 作为管理员(或任何其他用户),但是,即使以管理员身份登录,某些功能也需要 运行 'elevated' .
在 windows gui 上,只需右键单击 .exe
和 select run as Administrator
甚至提升 'cmd' 或 'powershell'。
如何在 Windows 核心上获得更高的权限?
通常,要在 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
如果你想把它包装在一个方便的函数中,它也更健壮 cross-edition on Windows(也适用于 Windows PowerShell):
- 注意:请参阅底部部分了解更复杂的功能,可从 Gist 下载,特别是还允许传递 命令 来执行在提升的 PowerShell session.
function Enter-AdminPSSession {
Start-Process -Verb RunAs (Get-Process -Id $PID).Path
}
# Optionally also define a short alias name:
# Note: 'psa' 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), analogous
# to built-in 'etsn' alias referring to 'Enter-PSSession'
Set-Alias psa Enter-AdminPSSession
如果您希望该函数也是 cross-platform(也可以在 Unix-like 平台上工作):
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 上,新的 session 总是在 new 控制台中打开window.
- 新 session 是管理员 session 这一事实反映在其 window 的标题(前缀
Administrator:
) 中
on Unix (Linux, macOS),新的 session 总是在 same 控制台(终端)window.
- 在 Unix 上,没有明显的迹象表明管理员 session 已经输入; 运行ning
whoami
是一种快速测试方法(returns root
在管理员 session 中);更好的解决方案是修改 prompt
函数以在提示字符串中反映管理员 session,正如接下来讨论的预打包解决方案那样。
如果您还希望能够运行命令在新的session和可选auto-close它,还有很多工作要做:
您可以从this Gist下载函数Enter-AdminPSSession
,其中:
允许传递命令以通过脚本块执行 ({ ... }
)
默认情况下保持 session 打开,以便可以检查命令输出,但您可以 opt-out 与 -Exit
或 -ExitOnSuccess
(只有在没有发生错误时才关闭 session。
试图反映通过 $LASTEXITCODE
传递的命令的整体成功(即使对于 PowerShell-native 命令,通常也不会设置此变量); 0
表示成功。
确保调用 session 的当前位置(工作目录)也是提升的 session 的当前位置。
允许您选择不加载配置文件,-NoProfile
在所有平台上使用 [admin]
为交互式提升 session 中的提示字符串添加前缀。
假设您已经查看了链接的 Gist 的源代码以确保它是安全的(我个人可以向您保证,但您应该经常检查),您可以 安装 Enter-AdminPSSession
直接如下:
irm https://gist.github.com/mklement0/f726dee9f0d3d444bf58cb81fda57884/raw/Enter-AdminPSSession.ps1 | iex
示例调用(假定已调用 Set-Alias psa Enter-AdminPSSession
):
- 输入交互式提升session:
psa
- Windows:在不加载配置文件的情况下输入提升的session并设置all-users执行策略,如果成功则退出。
psa -NoProfile -ExitOnSuccess { Set-ExecutionPolicy -Scope LocalMachine RemoteSigned }
- Unix: 获取文件
/etc/sudoers
的内容(只有管理权限才能读取),然后退出:
psa -Exit { Get-Content /etc/sudoers }
标准用户有一些选项可以 运行 作为管理员(或任何其他用户),但是,即使以管理员身份登录,某些功能也需要 运行 'elevated' .
在 windows gui 上,只需右键单击 .exe
和 select run as Administrator
甚至提升 'cmd' 或 'powershell'。
如何在 Windows 核心上获得更高的权限?
通常,要在 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
如果你想把它包装在一个方便的函数中,它也更健壮 cross-edition on Windows(也适用于 Windows PowerShell):
- 注意:请参阅底部部分了解更复杂的功能,可从 Gist 下载,特别是还允许传递 命令 来执行在提升的 PowerShell session.
function Enter-AdminPSSession {
Start-Process -Verb RunAs (Get-Process -Id $PID).Path
}
# Optionally also define a short alias name:
# Note: 'psa' 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), analogous
# to built-in 'etsn' alias referring to 'Enter-PSSession'
Set-Alias psa Enter-AdminPSSession
如果您希望该函数也是 cross-platform(也可以在 Unix-like 平台上工作):
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 上,新的 session 总是在 new 控制台中打开window.
- 新 session 是管理员 session 这一事实反映在其 window 的标题(前缀
Administrator:
) 中
- 新 session 是管理员 session 这一事实反映在其 window 的标题(前缀
on Unix (Linux, macOS),新的 session 总是在 same 控制台(终端)window.
- 在 Unix 上,没有明显的迹象表明管理员 session 已经输入; 运行ning
whoami
是一种快速测试方法(returnsroot
在管理员 session 中);更好的解决方案是修改prompt
函数以在提示字符串中反映管理员 session,正如接下来讨论的预打包解决方案那样。
- 在 Unix 上,没有明显的迹象表明管理员 session 已经输入; 运行ning
如果您还希望能够运行命令在新的session和可选auto-close它,还有很多工作要做:
您可以从this Gist下载函数Enter-AdminPSSession
,其中:
允许传递命令以通过脚本块执行 (
{ ... }
)默认情况下保持 session 打开,以便可以检查命令输出,但您可以 opt-out 与
-Exit
或-ExitOnSuccess
(只有在没有发生错误时才关闭 session。试图反映通过
$LASTEXITCODE
传递的命令的整体成功(即使对于 PowerShell-native 命令,通常也不会设置此变量);0
表示成功。
确保调用 session 的当前位置(工作目录)也是提升的 session 的当前位置。
允许您选择不加载配置文件,
-NoProfile
在所有平台上使用
[admin]
为交互式提升 session 中的提示字符串添加前缀。
假设您已经查看了链接的 Gist 的源代码以确保它是安全的(我个人可以向您保证,但您应该经常检查),您可以 安装 Enter-AdminPSSession
直接如下:
irm https://gist.github.com/mklement0/f726dee9f0d3d444bf58cb81fda57884/raw/Enter-AdminPSSession.ps1 | iex
示例调用(假定已调用 Set-Alias psa Enter-AdminPSSession
):
- 输入交互式提升session:
psa
- Windows:在不加载配置文件的情况下输入提升的session并设置all-users执行策略,如果成功则退出。
psa -NoProfile -ExitOnSuccess { Set-ExecutionPolicy -Scope LocalMachine RemoteSigned }
- Unix: 获取文件
/etc/sudoers
的内容(只有管理权限才能读取),然后退出:
psa -Exit { Get-Content /etc/sudoers }