You obviously didn't read all of my last comment. Did you do a Receive-Job to check the output of each job?
You don't need all those extra quotation marks, "$", and parentheses, either. They just clutter up your code and by using them you may get some unexpected results.
A naïve way of doing the check for a job's output is something like this:
foreach ($bb in $C){
Start-Job -ScriptBlock {
#
# NOTE: You do no error handling!
# Use Try/Catch and add -ErrorAction Stop to cmdlets if you want to do that
#
New-DfsnFolderTarget -Path $bb.dft -TargetPath $bb.tp -ReferralPriorityClass SiteCostNormal -State Offline
New-DfsReplicationGroup -GroupName $bb.conn |
New-DfsReplicatedFolder -FolderName $bb.fl -DfsnPath bb.dft |
Add-DfsrMember -ComputerName "serverA","serverB" |
Format-Table dnsname,groupname -auto -wrap
Add-DfsrConnection -GroupName $bb.conn -SourceComputerName "serverA" -DestinationComputerName "serverB" |
Format-Table *name -wrap -auto
Set-DfsrMembership -GroupName $bb.conn -FolderName $bb.fl -ContentPath $bb.pth -ComputerName "serverA" -PrimaryMember $true -StagingPathQuotaInMB 20480 -Force |
Format-Table *name,*path,primary* -auto -wrap
Set-DfsrMembership -GroupName $bb.conn -FolderName $bb.fl -ContentPath $bb.pth -ComputerName "serverB" -StagingPathQuotaInMB 20480 -Force |
Format-Table *name,*path,primary* -auto -wrap
}
}
Get-Job | Wait-Job # waits for all jobs to end
Get-Job | Receive-Job # You won't see any errors unless you look at the childjob in any job with the failed state
You'll find much better examples of how to handle the "getting" and "receiving" of jobs in many blogs found by searching for something as simple as "Start-Job" in a search engine.