非常要弄清楚哪些访问控制项(ACE)授予你在谈论的权利,首先你需要知道的对象类型的GUID是在寻找。 servicePrincipalName属性的GUID为f3a64788-5306-11d1-a9c5-0000f80367c1
。已验证的写入共享其属性的GUID,所以我们仍然只是在寻找一个。由于SPN是“公共信息”属性组中的一员,你需要注意它的GUID,也:e48d0154-bcf8-11d1-8702-00c04fb96050
所以,你要寻找的是满足下列条件之一的ACE:
- 写属性的AccessMask和要么没有对象类型或空GUID 对象类型,因为这将意味着所述ACE授予写 所有性质的能力和属性设置
- AccessMask写属性的和 f3a64788-5306-的对象类型GUID 11d1-a9c5-0000f80367c1
- 写属性的AccessMask和 e48d0154-bcf8-11d1-8702-00c04fb96050
- 自AccessMask(这意味着验证写入)和一个对象类型 的f3a64788-5306-11d1-a9c5-0000f80367c1
GUID的对象类型GUID
另外,'GenericWrite'可以用来代替上面的WriteProperty。也许这样的事情在PowerShell中:
$ServicePrincipalNameProperty = [guid] 'f3a64788-5306-11d1-a9c5-0000f80367c1'
$PublicInformationPropertySet = [guid] 'e48d0154-bcf8-11d1-8702-00c04fb96050'
$ValidatedWrite = [System.DirectoryServices.ActiveDirectoryRights]::Self
$WriteProperty = [System.DirectoryServices.ActiveDirectoryRights]::WriteProperty
$GenericWrite = [System.DirectoryServices.ActiveDirectoryRights]::GenericWrite
Get-ADComputer ComputerName -Properties ntSecurityDescriptor | ForEach-Object {
$SD = $_.ntSecurityDescriptor
$SD.Access | where {
# Look for the access rights that would grant write capabilities
($_.ActiveDirectoryRights -band $ValidatedWrite) -eq $ValidatedWrite -or
($_.ActiveDirectoryRights -band $WriteProperty) -eq $WriteProperty -or
($_.ActiveDirectoryRights -band $GenericWrite) -eq $GenericWrite
} | where ObjectType -in $null, ([guid]::Empty), $ServicePrincipalNameProperty, $PublicInformationPropertySet
}
我认为这工作向你展示你感兴趣的的ACE如果你只关心的IdentityReference,你可以拉说出来,扔剩下的路程。如果您将Get-ADComputer调用更改为使用-Filter,则这应该适用于多台计算机(您可以使用Add-Member将samAccountName添加到每个ACE,以便将它们区分开来)。
还有一件事:这不考虑继承和传播标志或InheritedObjectTypes,所以你可能会看到一些ACE在技术上不会授予你正在寻找的权利......