检测 PowerShell 是否以管理员身份运行

检测 PowerShell 是否以管理员身份运行

如何判断脚本中的 PowerShell 是否以管理员权限运行?

我需要知道,因为我正在尝试运行一个需要打开受保护端口能力的程序。

答案1

[bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544")

分解一下这个是做什么的:

  • [bool]- 将最终结果转换为bool
  • [System.Security.Principal.WindowsIdentity]::GetCurrent()- 检索WindowsIdentity当前正在运行的用户。
  • (...).groups- 访问groups身份的属性以查明该身份属于哪些用户组。
  • -match "S-1-5-32-544"检查是否groups包含知名 SID管理员组,仅当使用“以管理员身份运行”时,身份才会包含它。

答案2

([Security.Principal.WindowsPrincipal] `
  [Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

这将检索当前 Windows 身份,并返回$true当前身份是否具有管理员角色(即,以提升的权限运行)。

答案3

在 Powershell 4.0 中,你可以使用需要在脚本的顶部:

#Requires -RunAsAdministrator

输出:

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

答案4

您的代码:


invoke-command -computername cavl-ghwwsc3 -command { ([Security.Principal.WindowsPrincipal] 
  [Security.Principal.WindowsIdentity]::GetCurrent()
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)}

工作正常,但如何在当前用户会话中远程启动它(而不是在 powershell 中提升管理员权限,因为它将我的管理员 isadmin 值返回到远程计算机,而不是当前日志用户(如果该用户是管理员)。

相关内容