📌  相关文章
📜  powershell 在函数中提升为管理员 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:33:46.910000             🧑  作者: Mango

PowerShell 在函数中提升为管理员 - Shell-Bash

在 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 中的函数中自动提升为管理员,我们可以避免用户手动提升权限的操作。这可以让我们更高效、更安全地执行敏感操作。