powershell - 为什么我的条件确定用户是否在一个组中总是返回为假?
问题描述
我正在编写一个脚本,需要检测执行的用户帐户是否是域管理员。我通过获取当前用户并检查他们是否在域管理员安全组中来做到这一点。
#Get current user
$CurrentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name | Out-String
$CurrentUser = $CurrentUser -replace 'DOMAIN\\'
#Get list of Domain Admins members
$DomainAdmins = Get-ADGroupMember -Identity "Domain Admins" -Recursive | Select -ExpandProperty SamAccountName | Out-String
#Relevant condition
If ($DomainAdmins -like ($CurrentUser)) {
Write-Output "You're a domain admin." #example
}
Else {
Write-Output "You're not a domain admin."
}
毫无疑问,Else
当使用域管理员帐户从我们的域控制器运行时,此脚本始终运行代码。
我也尝试过使用-contains
并.contains()
得到完全相同的结果。我已经验证该$CurrentUser
值准确地代表了当前用户,并且$DomainAdmins
列出了预期的用户列表。
我也可以这样做:
if ($DomainAdmins -contains ("USERNAME")) {Write-host "true"}
当前用户在哪里USERNAME
直接输入(大小写正确与否),当该用户是该组的成员时,它正确返回 true。
解决方案
试试这个:
$userSID = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
$DomainAdmins = Get-ADGroupMember -Identity "Domain Admins" -Recursive
if($DomainAdmins.SID.Contains($userSID))
{
Write-Output "You're a domain admin."
}
...
# OR
if($userSID -in $DomainAdmins.SID)
{
Write-Output "You're a domain admin."
}
...
# OR
if($DomainAdmins.SID -contains $userSID)
{
Write-Output "You're a domain admin."
}
Out-String
onGet-ADGroupMember
正在将您转换array
为 astring
这就是为什么您不能将其用作比较的原因:
PS /> @(
'one'
'two'
'three'
) -contains 'one'
True
PS /> (@(
'one'
'two'
'three'
) | Out-String) -contains 'one'
False
一种替代方法,而不是使用Get-ADGroupMember
:
$userSID = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
$domainAdminsDN = (Get-ADGroup -Identity "Domain Admins").DistinguishedName
$recursiveMembers = Get-ADUser -LDAPFilter "(memberOf:1.2.840.113556.1.4.1941:=$domainAdminsDN)"
if($recursiveMembers.SID.Contains($userSID))
{
Write-Output "You're a domain admin."
}
...
...
推荐阅读
- firebase - Google Analytics 在不“弹出” React Native 应用程序的情况下是否可用
- javascript - 如何遍历每个列表并在其中添加本地存储项目
- html - 材料设计表格所需图案
- c++ - BOOST::ASIO - UDP - 端点被覆盖
- wordpress - WordPress 5.0 更新问题
- python - 使用 Python 访问凭证存储
- android - Android - 使用 4K GLSurfaceView 启用 4K Activity
- shell - 用于删除某些文件并重命名其他文件的 shell 脚本
- javascript - 参考错误:尝试将 json 对象传递给 java 文件时未定义数据
- c# - Google Cloud Vision API 和 Xamarin 的未处理异常