The below PowerShell script enables to upload the local folder structure in SharePoint including Subfolders and relative files.
if ((Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'})-eq $null) { Add-PSSnapin "Microsoft.SharePoint.Powershell" } Clear-Host Function Import-OSCFolder { [CmdletBinding()] param ( [Parameter(Mandatory=$true,Position=0)] [string]$Siteurl, [Parameter(Mandatory=$true,Position=1)] [string]$Library, [Parameter(Mandatory=$true,Position=2)] [string]$Path ) #Get sp site $spWeb = Get-SPWeb $siteurl -ErrorAction SilentlyContinue If($spWeb) { #Get the specified library $spDocumentLibrary = $spWeb.Lists[$Library] If($spDocumentLibrary) { #verify if the path is valid If(Test-Path -Path $Path) { #Get the folder $Fol = Get-Item -Path $Path If($Fol.PSIsContainer) { $result = $spDocumentLibrary.ParentWeb.GetFolder($spDocumentLibrary.RootFolder.ServerRelativeUrl +"/"+ $Fol.Name ) If($result.Exists -eq "True") { Write-Warning "There is a folder existing on site $siteUrl." #$SPFol = $spDocumentLibrary.ParentWeb.GetFolder($spDocumentLibrary.RootFolder.ServerRelativeUrl + "/" +$_.Name) #SubFolder $path $SPFol $spDocumentLibrary } Else { #Import the folder to site library. $SPFol = $spDocumentLibrary.AddItem("",[Microsoft.SharePoint.SPFileSystemObjectType]::Folder,$Fol.Name) $SPFol.Update() SubFolder $path $SPFol $spDocumentLibrary Write-Host "Import '$Path' folder to site $siteurl successfully." } } Else { Write-Error "The object is not a folder." } } Else { Write-Error "Invalid path,try again." } } Else { Write-Warning "There is no library named $Library on site $siteurl." } } Else { Write-Error "Not find the specified site $siteurl" } } Function SubFolder($Folder,$SPFol,$spDocumentLibrary) { #Import the folder and subfolders to site library. $SPFolder = $spDocumentLibrary.ParentWeb.GetFolder($SPFol.Folder.ServerRelativeUrl) $Objects = Get-ChildItem -Path $Folder Foreach($obj in $Objects) { If($obj.PSIsContainer) { $SubFolder = $spDocumentLibrary.AddItem($SPFolder.ServerRelativeUrl,[Microsoft.SharePoint.SPFileSystemObjectType]::Folder,$obj.Name) $SubFolder.Update() $Fullname = $obj.FullName SubFolder $Fullname $SubFolder $spDocumentLibrary } Else { $fileStream = ([System.IO.FileInfo]$obj).OpenRead() $contents = new-object byte[] $fileStream.Length $FolderObj = $spDocumentLibrary.ParentWeb.GetFolder($SPFolder.ServerRelativeUrl) $SpFile = $FolderObj.Files.Add($FolderObj.Url + "/"+$obj.Name, $contents, $true) $spItem = $SpFile.Item $SpFile.CheckIn("Checked In By Administrator") } } } Function BeginUpload($DirectoryFullName) { $siteCollUrl = "http://[webname]/sites/[sitecollectionname]" $libraryName = "Style Library" Get-ChildItem $DirectoryFullName | % { if ($_.Attributes -eq "Directory") { Import-OSCFolder -siteurl $siteCollUrl -Library $libraryName -path $_.FullName } } } $filesLocation = "C:\Library\" BeginUpload -DirectoryFullName $filesLocation