Friday, July 8, 2011

PowerShell to Migrate Files from the File System to a SharePoint Document Library

I had the requirement to copy all files and folders from a fileshare directly into SharePoint. Normally i would have just used explorer view however the terminal server that was being used didn't have the web client installed. I used the following poweshell to get the documents migrated
NOTE: this does not migrate security
NOTE: does not check for invalid charcters
NOTE: must be run on a sharepoint server joined to the farm


function ProcessDirectory($directory, $spfolder){
$directory.GetDirectories() foreach{
#create direcotry
write-host "creating directory" $_.Name
$newfolder = $spfolder.SubFolders.Add($_.Name)
#recurse directory
ProcessDirectory $_ $newfolder
}
$directory.GetFiles() foreach{
#uploadfile
write-host "uploading file" $_.Name
$newfile = $spfolder.Files.Add($_.Name,$_.OpenRead(),$true)
}
}
#you could use a local drive. If migrating from a remote server mount the share
#net use X: \\fileshare\sharename
#change current directory
x:
#get web
$web = get-spweb "http://companyweb"
#get the document library
$list = $web.Lists["TestMigration"]
$rootfolder = $list.RootFolder
#get DirectoryInfo object
$currentfolder = get-item .
#start process
ProcessDirectory $currentfolder $rootfolder