有没有比使用更有效的方式来监控 DFSR 积压dfsrdiag.exe backlog
?
我编写了一个程序,它每隔五分钟就收集一次积压文件数量dfsrdiag.exe backlog /smem:alpha /rmem:beta /rgname:domain\namespace\foldername /rfname:foldername
。每次运行时,它都需要相当长的时间(2 到 5 分钟)才能获得结果值。这意味着最后,它会运行几分钟来收集信息,然后延迟五分钟。感觉获取这些信息可能在某种程度上是昂贵的。它还返回积压文件中的前 100 个文件。我真的只想要积压文件数量,而不关心文件本身。这用于创建历史图表。
这些 DFSR 对等体的信息:四台服务器上的 Windows 2008 R2,三个远程办公室通过 50-100Mb 互联网连接相连,30 个复制组,几个复制组的文件总大小非常大(每个 1-2TB),尽管大多数都很小(500MB-10GB)。
答案1
还有另一种获取信息的方法,即通过 WMI。一位有进取心的人编写了一个 PowerShell 脚本来收集此信息:
http://gallery.technet.microsoft.com/scriptcenter/dac62790-219d-4325-a57b-e79c2aa6b58e
没有迹象表明是否比更快dfsrdiag
,但我怀疑它可能更快。
WMI 根目录是root\MicrosoftDFS
,您可以从那里通过以下方式进行查询Get-WmiObject
答案2
这是一个纯粹的 PowerShell 实现方法:
$RegEx=[System.Text.RegularExpressions.Regex]::new("Count: (\d+)$")
$DFSObjects=@()
$DFSRMembers=Get-DfsrMembership | Where-Object { $_.Enabled } | Where-Object { $_.GroupName -eq "<namespace>" }
$DFSRMembers=@($DFSRMembers)
if ($DFSRMembers.Count -gt 1) {
for ($i=0; $i -lt $DFSRMembers.Count; $i++) {
$OtherMembers=$DFSRMembers | Where-Object { ($_.ComputerName -ne $DFSRMembers[$i].ComputerName) -and ($_.FolderName -eq $DFSRMembers[$i].FolderName) }
$OtherMembers=@($OtherMembers)
if ($OtherMembers.Count -ne 0) {
for ($j=0; $j -lt $OtherMembers.Count; $j++) {
$BackLog=($($Junk=.{Get-DfsrBacklog -GroupName $DFSRMembers[$i].GroupName -FolderName $DFSRMembers[$i].FolderName -SourceComputerName $DFSRMembers[$i].ComputerName -DestinationComputerName $OtherMembers[$j].ComputerName -Verbose}) 4>&1).Message
$Matches=$RegEx.Matches($BackLog)
if ($Matches -ne $null) { $BackLog=[System.Convert]::ToInt32($RegEx.Matches($backlog).Groups[1].Value) } else { $BackLog=0 }
$DFSObject=New-Object -Type PSObject -Property @{Group=$DFSRMembers[$i].GroupName;Folder=$DFSRMembers[$i].FolderName;From=$DFSRMembers[$i].ComputerName;To=$OtherMembers[$j].ComputerName;Backlog=$BackLog}
$DFSObjects+=$DFSObject
}
}
}
}
$DFSObjects | Sort-Object -Property BackLog -Descending | Format-Table -Property Group,Folder,From,To,Backlog