在 PowerShell 脚本中,如何检查我是否以管理员权限运行?

Mic*_*ley 93 powershell

在 PowerShell 脚本中,如何检查我是否以管理员权限运行?

edd*_*ves 99

在 Powershell 4.0 中,您可以在脚本顶部使用requires

#Requires -RunAsAdministrator
Run Code Online (Sandbox Code Playgroud)

输出:

脚本“MyScript.ps1”无法运行,因为它包含以管理员身份运行的“#requires”语句。当前 Windows PowerShell 会话未以管理员身份运行。使用以管理员身份运行选项启动 Windows PowerShell,然后再次尝试运行脚本。

  • 这应该是公认的答案 (3认同)
  • 不完全是我想要的,但仍然非常有用。谢谢艾迪! (2认同)

dav*_*vey 76

$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
$currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
Run Code Online (Sandbox Code Playgroud)

(来自命令行安全技巧

  • $currentPrincipal = New-Object Security.Principal.WindowsPrincipal( [Security.Principal.WindowsIdentity]::GetCurrent() ) &{ if ($currentPrincipal.IsInRole( [Security.Principal.WindowsBuiltInRole]::Administrator )) { (get- host).UI.RawUI.Backgroundcolor="DarkRed" clear-host write-host "警告:PowerShell 以管理员身份运行。`n" } (3认同)
  • 这是一个很好的解决方案,您使用的是不支持“#Requires -RunAsAdministrator”的古老版本的 powershell(在我的情况下为 3) (3认同)
  • 没有变量赋值的单行: `(New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)` (3认同)
  • 第一行:缺少最后一个右大括号 )。我无法修复它,因为它的更改少于 6 个字符。 (2认同)

小智 41

function Test-Administrator  
{  
    $user = [Security.Principal.WindowsIdentity]::GetCurrent();
    (New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)  
}
Run Code Online (Sandbox Code Playgroud)

执行上面的函数。如果结果为 True,则用户具有管理员权限。

  • 这仅确定运行脚本的用户是否是机器上的管理员——而不是确定脚本当前是否正在**以管理权限**执行。换句话说,即使用户没有使用“以管理员身份运行”来启动命令外壳,这仍然会返回 true。 (4认同)
  • @HolisticDeveloper,这是不正确的。如果你没有被提升,它会返回 false (2认同)