Назад | Перейти на главную страницу

Как отслеживать отставание DFSR более эффективно, чем dfsrdiag

Есть ли способ отслеживать отставание 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