six demon bag

Wind, fire, all that kind of thing!

2013-12-11

Some Useful DFS Commands

List DFS replication groups:

dfsradmin rg list

List replicated folders in a replication group:

dfsradmin rf list /rgname:<REPL_GROUP>


List members of a replication group:

dfsradmin mem list /rgname:<REPL_GROUP>

List the local folders that correspond to replicated folders of a replication group:

dfsradmin membership list /rgname:<REPL_GROUP> /attr:RfName,MemName,LocalPath

Show backlog between 2 members of a replication group:

dfsrdiag backlog /rgname:<REPL_GROUP> /rfname:<REPL_FOLDER> /smem:<SRV_A> /rmem:<SRV_B> [/v]
dfsrdiag backlog /rgname:<REPL_GROUP> /rfname:<REPL_FOLDER> /smem:<SRV_B> /rmem:<SRV_A> [/v]

dfsrdiag can also be used for inspecting SYSVOL backlog when DFS-R SYSVOL replication is enabled:

dfsrdiag backlog /rgname:"Domain System Volume" /rfname:"SYSVOL Share" /smem:DC1 /rmem:DC2

A word of warning if you want to run commands like the one above in PowerShell: parameters with spaces are a major pain in the rear. Naïve approaches like

& dfsradmin rf new /rgname:MyGroup /rfname:"My Replicated Folder"

or

& dfsradmin rf new /rgname:MyGroup "/rfname:My Replicated Folder"

or

& dfsradmin rf new /rgname:MyGroup "/rfname:`"My Replicated Folder`""

or even

$cmd    = 'dfsradmin.exe'
$params = @('rf', 'new', '/rgname:MyGroup', '/rfname:"My Replicated Folder"')
& $cmd $params

won't work, regardless of what recommendations you may find on the Internet. You need to work around this issue like this:

$env:rgname = 'MyGroup'
$env:rfname = 'My Replicated Folder'

& cmd /c 'dfsradmin rf new /rgname:%rgname% /rfname:"%rfname%"'

or (slightly more PoSh) like this:

$rgname = 'MyGroup'
$rfname = 'My Replicated Folder'

& cmd /c ("dfsradmin rf new /rgname:{0} /rfname:`"{1}`"" -f $rgname, $rfname)

In PowerShell v3 you could also do this:

$env:rgname = 'MyGroup'
$env:rfname = 'My Replicated Folder'

& dfsradmin --% rf new /rgname:%rgname% /rfname:"%rfname%"

Posted 15:16 [permalink]