DFS namespace (e.x. "\my.domain.com\NS1") with folders that don't have a target:
"\\my.domain.com\NS1\target1\" > Target: "\\myserver.my.domain.com\target1_share\"
"\\my.domain.com\NS1\folder\" > No target
"\\my.domain.com\NS1\folder\target2\" > Target: "\\myserver2.my.domain.com\target2_share\"
"\\my.domain.com\NS1\folder\target3\" > Target: "\\myserver3.my.domain.com\target3_share\"
"\\my.domain.com\NS1\target4\" > Target: "\\myserver4.my.domain.com\target4_share\"
Output:
DFS Folder Target
"\\my.domain.com\NS1\target1\" "\\myserver.my.domain.com\target1_share\"
"\\my.domain.com\NS1\folder\target2\" "\\myserver2.my.domain.com\target2_share\"
"\\my.domain.com\NS1\folder\target3\" "\\myserver3.my.domain.com\target3_share\"
"\\my.domain.com\NS1\target4\" "\\myserver4.my.domain.com\target4_share\"
Export data to CSV
reparsePoint I found was the indicator that a folder has a target according to the file system.
function Get-DFSTargetRecurse($dfsnRoot){
$allDfsnTargetPaths = @()
$folders = Get-ChildItem $dfsnRoot.FullName
ForEach($folder in $folders){
$i = 0
While($folder.Attributes.ToString() -notLike "*reparsePoint*"){
$i++
$folder = Get-ChildItem $folder.FullName
Get-DFSTargetRecurse($folder)
}
if($folder.Attributes.ToString() -like "*reparsePoint*"){
Try{
$dfsnTarget = Get-DfsnFolderTarget -path $folder
$data = [PSCustomObject]@{
"NamespacePath" = $dfsnTarget.NamespacePath
"TargetPath" = $dfsnTarget.TargetPath
"RecurseLevel" = $i
}
$allDfsnTargetPaths += $data
}
Catch{
Write-Error "Error: Unable to resolve Dfsn Target for $folder"
}
}
}
return $allDfsnTargetPaths
}
$dfsnRoot = Get-DfsnRoot "my.domain.com"
$output = Get-DFSTargetRecurse $dfsnRoot
$output | Export-CSV -Path "$env:USERPROFILE\Documents\DFSTargets.csv" -NoTypeInformation
Function is going too far down and not stopping at folders that have a DFS Target.