Есть ли способ отслеживать отставание 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–100 Мб, 30 групп репликации, несколько групп репликации имеют очень большой общий размер файла (1-2 ТБ каждая), хотя большинство из них маленькие (500 МБ -10 ГБ).
Есть еще один способ получить информацию - через WMI. Предприимчивая душа составила сценарий PowerShell, который собирает следующую информацию:
http://gallery.technet.microsoft.com/scriptcenter/dac62790-219d-4325-a57b-e79c2aa6b58e
Нет указаний на то, быстрее, чем dfsrdiag
, но я подозреваю, что это могло быть так.
Корневой каталог WMI root\MicrosoftDFS
и оттуда вы можете выполнять запросы через Get-WmiObject
Вот способ сделать это на чистом PowerShell:
$RegEx=[System.Text.RegularExpressions.Regex]::new("Count: (\d+)$")
$DFSObjects=@()
$DFSRMembers=Get-DfsrMembership | Where-Object { $_.Enabled } | Where-Object { $_.GroupName -eq "cogencyglobal.com\global\fulfillment" }
$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