用户是AD安全组“Domain \ Sql Admins”的成员,安全组“Domain \ Sql Admins”是Windows Server上本地 Administrators 组的成员。
我尝试过以下PowerShell脚本:
$u = "Username"; net localgroup administrators | Where {$_ -match $u}
如果用户直接添加到管理员组,则此脚本将仅返回该用户。在找到我的用户之前,是否必须遍历管理组中的所有组?或者还有另一种方式吗?
答案 0 :(得分:10)
在Microsoft Hey Scripting Guy博客上查看Boe Prox上的这篇文章。他描述了如何检查用户是否是本地管理员。
本文指向发布到TechNet图库的Test-IsAdmin
函数。
http://gallery.technet.microsoft.com/scriptcenter/1b5df952-9e10-470f-ad7c-dc2bdc2ac946
该函数包含以下代码,该代码返回$true
或$false
。
([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
答案 1 :(得分:2)
使用SID:
([Security.Principal.WindowsIdentity]::GetCurrent().Groups | Select-String 'S-1-5-32-544')
或者使用"众所周知的"安全标识符名称:
([Security.Principal.WindowsIdentity]::GetCurrent().Groups.IsWellKnown('BuiltinAdministratorsSid') -eq $true)
如果您想获取所有SID及其名称,请查看此页:https://support.microsoft.com/en-us/help/243330/well-known-security-identifiers-in-windows-operating-systems
答案 2 :(得分:1)
如果您正在使用PowerShell Community Extension,则可以使用Test-UserGroupMembership
命令,例如:
Test-UserGroupMembership Administrators
答案 3 :(得分:1)
PowerShell 5.1(Windows Server 2016)包含Get-LocalGroupMember cmdlet。
$user = "$env:COMPUTERNAME\$env:USERNAME"
$group = 'Administrators'
$isInGroup = (Get-LocalGroupMember $group).Name -contains $user