Importing a File Share into Document Library via PowerShell
So today I was asked for a way to automate importing files from a file share into a document library. For this, ACL's were not an issue, however using PS's Get-ACL function can get you that as well to match the insert.
Here is what I came up with as a quick and dirty response. I though it might be nice to post for other people to use as a base script for things like synchronizing file shares with document libraries etc.
#Variables
$targetLibrary = "Imported Documents"
$sourceDirectory = "\\somemachine\someshare"
$siteUrl = "https://localhost/sites/somesite"
#open the SPWeb/SPSite
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$site = New-Object "Microsoft.SharePoint.SPSite" $siteUrl
$web = $site.OpenWeb()
#get all the files and directories on the share and iterate them
foreach ($file in get-childitem $sourceDirectory -recurse)
{
$fileName = ($file | Select-Object Name).Name #get the base file nname
$parentPath = ($file | Select-Object PSParentPath) #get the path
#eliminate everything in the path prior to the root folder
$parentPath = $parentPath.Substring($parentPath.PSParentPath.ToLower().IndexOf($sourceDirectory.ToLower())+$sourceDirectory.Length)
$parentPath = $parentPath.Replace("\","/") #make the path url friendly
$targetPath = "/$targetLibrary$parentPath/$fileName" #combine for a full url
#check if this is a directory or file
if (($file.GetType() | Select-Object Name).Name -eq "DirectoryInfo")
{
"Adding Folder: $targetPath"
$web.get_Folders().Add($targetPath)
}
else
{
$parentFile = ($file | Select-Object FullName).FullName #gets the full path to the file
"Adding File: $targetPath"
$fileBytes = [System.IO.File]::OpenRead("$parentFile") #read the file to a byte arry
$web.get_Files().Add($targetPath,$fileBytes)
}
}
#dispose of the web/site
$web.Dispose()
$site.Dispose()
Comments
- Anonymous
May 27, 2008
Entwicklung What you need to know about AllowUnsafeUpdates (Part 1) What you need to know about AllowUnsafeUpdates