The reason you might want to do this is you may have a Choice column with different choice data in it in each library, but the column name is the same.
Adding the a Site Column at a global level to the CT will not put the unique options in the CT at each library. Adding the column from the library level, puts that libraries version of the column on the CT
The below code targets the 3rd level down of a particular site (Web), and goes through each Library to add the column to the Content Type.
If you need to update all libraries from a Site Collection level put the Try Catch statement in a different loop that iterates through each library (like in this post)
$site = Get-SPSite http://intranet $Web = Get-SPWeb http://intranet/Web/ $Web.webs | ForEach-Object { $_.title # Web Name $_.webs.lists | where { $_.BaseTemplate -eq "DocumentLibrary" } | ForEach-Object { if($_.title -eq "Site Assets") { write-host "Skip Site Assets" } else { try { $fieldToAdd = $_.fields.getfield("Subactivity Groups") $fieldLink = new-object Microsoft.SharePoint.SPFieldLink($fieldToAdd) $CTtype = $_.ContentTypes["RDC_Link to document"] $CTtype.fieldlinks.add($fieldLink) write-host "updating" $_.title "..." $CTtype.Update() write-host $_.title "updated." } catch { write-host "Failed to add Content type" $ct.Name "to list" $_.Title } } } } $Site.Dispose() $Web.Dispose()