📅  最后修改于: 2023-12-03 15:33:46.910000             🧑  作者: Mango
在 PowerShell 中,执行某些敏感操作需要管理员权限。为了避免用户手动提升权限,我们可以在 PowerShell 函数中自动提升为管理员。
function Invoke-AsAdmin
{
param (
[Parameter(Mandatory=$true)]
[ScriptBlock]$Code
)
# 检查是否为管理员
$currentUser = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if (!$currentUser.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
{
# 提升为管理员
$arguments = "& '" + $MyInvocation.MyCommand.Definition + "'"
Start-Process powershell -Verb RunAs -ArgumentList $arguments
return
}
# 执行代码
& $Code
}
该函数接收一个 ScriptBlock
对象,自动检查当前用户是否为管理员。如果不是管理员,就用 Start-Process
函数以管理员身份重新启动 PowerShell 并执行当前脚本。
如果是管理员,就直接调用传入的 ScriptBlock
执行代码。
Invoke-AsAdmin {
# 在此处写入敏感操作代码
Write-Output "Hello World!"
}
上述代码将自动以管理员身份执行传入的代码块,并输出 "Hello World!"。
通过在 PowerShell 中的函数中自动提升为管理员,我们可以避免用户手动提升权限的操作。这可以让我们更高效、更安全地执行敏感操作。