如何判断脚本中的 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 值返回到远程计算机,而不是当前日志用户(如果该用户是管理员)。