Tuesday, July 31, 2012

Upload File to SharePoint Library using PowerShell

We had a PowerShell script code to generate Large Lists reports in D:\Reports, and now want to periodically upload them to a document library "Reports" in my Admin site. So, scheduled a PowerShell script to do so. Here is my PowerShell code to upload the report to a document library.

Upload file to SharePoint 2010 Library using PowerShell
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue 

#Function to Upload File
function UploadFile($WebURL, $DocLibName, $FilePath)
{
#Get the Web & Lists to upload the file
$Web = Get-SPWeb $WebURL
$List = $Web.GetFolder($DocLibName) 

#Get the Files collection 
$Files = $List.Files 

#Get File Name from Path
$FileName = $FilePath.Substring($FilePath.LastIndexOf("\")+1) 

#delete the File from library, if already exist!
if($Files.Item($DocLibName +"/" + $FileName))
{
$Files.delete($DocLibName +"/" + $FileName)
}
#Get the File
$File= Get-ChildItem $FilePath

#Add File to the collection
$Files.Add($DocLibName +"/" + $FileName,$File.OpenRead(),$false)

#Dispose the objects
$web.Dispose()
 }
 
#call the upload function
UploadFile "http://sharepoint.company.com" "Monthly Reports" "D:\Reports\LargeLists.txt"

Upload File to SharePoint using PowerShell with Metadata:

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
 
#Function to Upload File
function UploadFile($WebURL, $DocLibName, $FilePath)
{
#Get the SharePoint Web & Lists to upload the file
$Web = Get-SPWeb $WebURL
$List = $Web.GetFolder($DocLibName)
 
#Get the Files collection from SharePoint Document Library
$Files = $List.Files
 
#Get File Name from Path
$FileName = $FilePath.Substring($FilePath.LastIndexOf("\")+1)
 
#Get the File from Disk
$File= Get-ChildItem $FilePath

#Set the Metadata
 $Metadata = @{}
 $Metadata.add("Department", "Sales")
 $Metadata.add("Location", "APAC");
 
#Add File to Files collection of Document Library
$Files.Add($DocLibName +"/" + $FileName,$File.OpenRead(), $Metadata,  $true) #true for overwrite file, if already exists!

<# Alternatively, You can set the metadata as: 
   $UploadedFile=$Files.Add($DocLibName +"/" + $FileName,$File.OpenRead(), $true)
   $UploadedFile.Item["Department"]="Sales"
   $UploadedFile.Item.Update() 
 #>
   
 }
  
#call the upload function
UploadFile "http://sharepoint.company.com" "Monthly Reports" "E:\Reports\UsageReport.csv"

If you are looking for a way to upload Files to SharePoint List or Library using C#, Have a look at my another post: How to Programmatically upload File to SharePoint document library?

If you wan to upload Multiple Files in Bulk, Refer: Bulk upload files to SharePoint using PowerShell



You might also like:
SharePoint Usage Reports
Usage reports, collaboration and audit for SharePoint.
Document SharePoint Farm
Automatically generate SharePoint documentation.
*Sponsored


Check out these SharePoint products:

16 comments :

  1. What if the file has a metadata associated with it ? For e.g. if it has a "Month" field that need to be filled up while uploading the document ?

    ReplyDelete
    Replies
    1. Hi KR,

      Updated the post with setting Metadata values in PowerShell.

      Hope it helps.

      Delete
  2. Nice article Salaudeen, it really helped me a lot! However, I'm experiencing some problems when trying to update the "Title" column of a document. I just added the line:
    $Metadata.add("Title", "SomeValue")

    but nothing happened. Tried the second method as well:
    $UploadedFile.Item["Title"]="SomeValue"

    but again no success. Any idea what I might be doing wrong? Thanks in advance!
    Regards, Jan

    ReplyDelete
    Replies
    1. Hi Jan,

      For Title Field, Use: "vti_title" when you use Hash-table.

      $Metadata.add("vti_title", "Your Title Value")

      Delete
  3. Hi Salaudeen, i tried to update the "Title" column of a document item with both your methods, but without any success, unfortunately. Am I doing something wrong?

    First method: $Metadata.add("Title", "SomeValue") - Result: Title stays empty. Other metadata works fine!
    Second method: $UploadedFile.Item["Title"]="SomeValue" - Result: error message about Null valued array.

    Thanks for a great and helpful article, hope you can help a little bit more. Thanks in advance, and regards from the Netherlands!

    ReplyDelete
    Replies
    1. Hi Jan,

      Just verified the second method, Works as expected:

      $UploadedFile=$Files.Add($DocLibName +"/" + $FileName,$File.OpenRead(), $true)
      $UploadedFile.Item["Title"]= "Title Value Goes here"
      $UploadedFile.Item.Update()

      Delete
  4. Oops, I forgot another question: is it possible to set the Content Type used when uploading?

    ReplyDelete
    Replies
    1. Yes, You can set the Content Type for your items while uploading. Here is how:

      #Get the Content Type
      $ctype = $web.ContentTypes["YOUR-Content-Type"];
      #Set Content Type Property
      $Metadata.add("ContentTypeId", $ctype.Id);

      Regards,
      Sal

      Delete
  5. That's some prompt answering, Sal! Tried it al, works a charm. Thanks, your help is greatly appreciated! Regards, Jan

    ReplyDelete
  6. Hi Sal, is it possible to use this to update an item that is in a Managed Metadata column? I am able to get do a text entry just fine thanks to your script, but it will not work on Managed Metadata in a Term Store.

    ReplyDelete
    Replies
    1. True Ryan! Managed Metadata columns can't be used like normal list columns.
      To set Managed Metadata Column with Powershell, Refer this article: Updating SharePoint Managed Metadata Columns with PowerShell

      Delete
  7. Will this work if I want to copy a bunch of files to a sharepoint folder inside a library ?

    Also getting this error

    Exception getting "Item": "urlOfFile
    Parameter name: Specified value is not supported for the urlOfFile parameter."
    At line:33 char:4
    + if($Files.Item($DocLibName +"/" + $FileName))
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], GetValueInvocationException
    + FullyQualifiedErrorId : ExceptionWhenGetting

    ReplyDelete
  8. can it taake metadata from excel ?

    ReplyDelete
  9. Hello,

    Is it possible to run the above script where SharePoint is not installed?

    Actually i am trying to upload documents to sharepoint site by running a script in non sharepoint server but its failing with an error.

    Could you please help me in achieving this.

    Thanks in Advance.

    ReplyDelete

Please Login and comment to get your questions answered!

You might also like:

Related Posts Plugin for WordPress, Blogger...