我知道CheckMaxTokenSize.ps1(遗憾的是TokenSZ.exe不再可用,只能在32位操作系统中运行),我如何计算特定计算机对象的最大令牌大小?我能够修改一个脚本来查找递归成员资格对象的总数(每台计算机的硬性MS最大值为1015),但需要更进一步。
这是简单的PowerShell脚本
Import-Module ActiveDirectory
$forestName = ([System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()).Name
$ADsPath = [ADSI]"GC://$forestName"
$Search = New-Object System.DirectoryServices.DirectorySearcher($ADsPath)
$computer = Read-Host "Computer Name"
Write-Host ""; Write-Host "Processing....." -nonewline
if ($computer -eq "") {$computer = "<BLANK>"}
$Search.Filter = "(&(objectCategory=Computer)(name=$computer))"
$computercn = $Search.FindAll().Properties.distinguishedname
$csv = dsget computer $computercn -memberof -expand
Write-Host ($csv.Length -1) "items in List" -ForegroundColor Green
Write-Host "-----------------------------------"
如果不在设备上,我将如何返回AD计算机对象的令牌大小?
答案 0 :(得分:0)
我建议你重新开始并真正查看所需的信息,以便将此任务分解为简单的步骤。
在开始之前,让我们回顾令牌大小公式:
TokenSize = 1200 + 40d + 8s
此公式使用以下值:
的 d 强>: 用户所属的域本地组的数量加上 用户帐户域外的通用组数量 user是加上安全性中表示的组数的成员 ID(SID)历史 <强>取值强>: 用户的安全全局组的数量 是加上用户帐户中通用组数量的成员 用户所属的域。
1200 :估算值 门票开销。此值可能会有所不同,具体取决于DNS等因素 域名长度,客户名称和其他因素。
假设您已经拥有计算机名称(可能来自用户输入),我们需要的是:
所以,让我们开始工作吧。
由于您拥有ActiveDirectory
模块,因此轻松找到计算机:
# Define computer name
$ComputerName = "computer01"
# Find the computer in the directory
$Computer = Get-ADComputer -LDAPFilter "(&(name=$ComputerName))" -Properties PrimaryGroup,SidHistory
现在,我们可以使用Get-ADPrincipalGroupMembership
cmdlet来检索所有组成员身份,但它不支持递归搜索,因此我会在带有{的LDAP过滤器中使用IN_CHAIN查询规则控件{1}}:
Get-ADGroup
现在我们只需将组拆分为两组,一组包含域本地组和外部通用组,另一组包含全局组和本地通用组:
# Locate a Global Catalog server
$GC = Get-ADDomainController -Discover -Service GlobalCatalog
# Search the global catalog using our recursive ldap filter
$Groups = Get-ADGroup -LDAPFilter "(&(member:1.2.840.113556.1.4.1941:=$($Computer.DistinguishedName)))" -Server "$($GC.HostName):3268"
# Don't forget the primary group
$Groups = @($Groups; Get-ADGroup -Identity $Computer.PrimaryGroup)
现在根据公式计算:
# These are the "d" groups from the original formula
$LargeGroups = @($Groups |Where-Object {$_.GroupScope -eq 'DomainLocal' -or ($_.GroupScope -eq 'Universal' -and $_.DistinguishedName -notlike "*,DC=$($GC.Domain -split '\.' -join ',DC=')")})
# These are the "s" groups from the original formula
$SmallGroups = @($Groups |Where-Object {$_.GroupScope -eq 'Global' -or ($_.GroupScope -eq 'Universal' -and $_.DistinguishedName -like "*,DC=$($GC.Domain -split '\.' -join ',DC=')")})
我们已经完成了:-)