Das folgende Script prüft den Backlog-Status einer DFS- Replikation und schreibt die Ergebnisse in eine Datei. Entwickelt habe ich das Script um die Dateireplikation in einem Domainforest über fünf Standorte prüfen zu können. Zu Debugzwecken kann die Variable loggit_silent auf "false" gestellt werden. Das Ergebnis jeder Prüfung wird dann als Messagebox ausgegeben und nicht in die Datei geschrieben. Das Ausgabeziel, d.h. die Datei in die die Ergebnisse geschrieben werden wird in der Variable loggit_filename angegeben. Sollte noch etwas im Backlog eingetragen sein, so werden die ersten 100 Dateinamen ausgegeben und zudem die Anzahl der Backlogobjekte gesamt. Das Script kann über einen geplanten Task ausgeführt werden.
dim loggit_logfilename, loggit_fso, loggit_silent loggit_logfilename = "F:\dfsr-backlog.txt" loggit_silent = true ' log file only or with MsgBox/Echo set loggit_fso = CreateObject("Scripting.FileSystemObject")
strComputer = "." Set objWMIService = GetObject ("winmgmts:\\" & strComputer & "\root\MicrosoftDFS") Set DFSRGroups = objWMIService.ExecQuery ("SELECT * FROM DfsrReplicationGroupConfig") loggit "========================================================" For Each DFSRGroup in DFSRGroups DFSRGroupEnabled = DFSRGroup.Enabled If DFSRGroupEnabled = 1 Then ' cycle through connections Set DFSRGroupConnections = objWMIService.ExecQuery ("SELECT * FROM DfsrConnectionConfig WHERE ReplicationGroupGUID='" & DFSRGroup.ReplicationGroupGUID & "'") For Each DFSRGroupConnection in DFSRGroupConnections DFSRConnectionEnabled = DFSRGroupConnection.Enabled DFSRConnectionInbound = DFSRGroupConnection.Inbound DFSRConnectionPartner = DFSRGroupConnection.PartnerDns ' only enabled connections are relevant If DFSRGroupConnection.Enabled = "True" Then ' cycle through folders Set DFSRGroupFolders = objWMIService.ExecQuery ("SELECT * FROM DfsrReplicatedFolderConfig WHERE ReplicationGroupGUID='" & DFSRGroup.ReplicationGroupGUID & "'") For Each DFSRGroupFolder in DFSRGroupFolders ' Query Backlog for enabled ReplicationGroup DFSRGroupName = DFSRGroup.ReplicationGroupName DFSRFolderName = DFSRGroupFolder.ReplicatedFolderName ' query inbound/outbound Set objSysInfo = CreateObject( "WScript.Network" ) DFSRMyName = objSysInfo.ComputerName If DFSRConnectionInbound = True Then DFSRSendingMemberDNS = DFSRGroupConnection.PartnerDns DFSRReceivingMemberDNS = DFSRMyName DFSRSendingMember = DFSRGroupConnection.PartnerName DFSRReceivingMember = DFSRMyName Else DFSRSendingMemberDNS = DFSRMyName DFSRReceivingMemberDNS = DFSRGroupConnection.PartnerDns DFSRSendingMember = DFSRMyName DFSRReceivingMember = DFSRGroupConnection.PartnerName End If DFSRBacklogCommand = "dfsrdiag Backlog /RGName:""" & DFSRGroupName & """ /RFName:""" & DFSRFolderName & """ /SendingMember:" & DFSRSendingMemberDNS & " /ReceivingMember:" & DFSRReceivingMemberDNS Set WshShell = CreateObject("WScript.Shell") Set DFSRBacklogCommandExec = WshShell.Exec(DFSRBacklogCommand) StrDFSRBacklogCommandExec = DFSRBacklogCommandExec.StdOut.ReadAll OkMessage = "No Backlog - member <" & DFSRReceivingMember & "> is in sync with partner <" & DFSRSendingMember & ">" If InStr(LCase(StrDFSRBacklogCommandExec), LCase(OkMessage)) > 0 Then ' If return value contains 'No Backlog - member <SOURCE> is in sync with partner <DEST>' everything is ok- leave now ' count lines of output and return value loggit "Bei " & DFSRFolderName & " von " & DFSRSendingMember & " zu " & DFSRReceivingMember & " ist alles im Lot!" Else loggit "Bei " & DFSRFolderName & " ist noch etwas im Backlog auf " & DFSRSendingMember & " für " & DFSRReceivingMember & "!" loggit "Ausgabe: " & StrDFSRBacklogCommandExec End If Next End If Next End If Next
sub loggit (msg) set stream = loggit_fso.OpenTextFile(loggit_logfilename, 8, True) stream.writeline date & " " & time & ": " & msg stream.close if not loggit_silent then WScript.echo msg end if end sub
|