Upload files to SharePoint Library with Metadata
Upload Files and Metadata
A PowerShell with SharePoint tutorial
SharePoint
has several methods to
upload files from Windows Explorer to a document library,
but if you want to do it automatically, you should use a
PowerShell script. In earlier articles, we have seen how
do create such a script and how set a task to run it automatically.
In two earlier articles we have prepared the addition of
not just the files but also four categories of metadata
to the SharePoint library. This metadata is taken from files
in a Windows Explorer folder named CVs.
The folder has three subfolders: Hired, Maybe and No. A
file's placement in one of those folders gives us the first
keyword.
The files are all named in a consistent way, so the file
names can be used to extract three more keywords for each
file: first name, last name and department.
In the demo below, Peter Kalmström uses PowerShell key-value
pairs to direct each keyword to the correct SharePoint library
column.
"I have been trying to figure out how to migrate files and their metadata from another system for a while now, and all the solutions were really complicated or expensive. Yours is great: simple, straightforward and with the tools we already have in place. With a few scripting changes to match my use case, it's going to do wonders. Thanks for a helpful and very pedagogically presented demo."
Michael Davis
Peter created some parts of the script below in the
previous demo. The demo below is the last one in this
short series about metadata retention, and it show how Peter
ties everything together and get the files with their metadata
added to SharePoint.
Class CV{
$FirstName
$LastName
$Department
$Decision
}
$AllCVFiles = Get-ChildItem -Path "C:\Users\PeterKalmström\Documents\CVs" -Recurse -File
foreach($CVFile in $AllCVFiles){
#$CVFile
= $AllCVFiles[0]
$CVObj = New-Object CV
$CVObj.Decision = $CVFile.DirectoryName
$FileNameParts = $CVFile.BaseName -split '
- '
$CVObj.Department = $FileNameParts[1]
$NameParts = $FileNameParts[0] -split ', '
$CVObj.LastName = $NameParts[0]
$CVObj.FirstName = $NameParts[1]
#Write-Host
(ConvertTo-Csv $CVObj)
$CVValues = @{}
$CVValues += @{'Title'=$CVFile.BaseName }
$CVValues += @{'CVDecision'=$CVObj.Decision}
$CVValues += @{'CVFirstName'=$CVObj.FirstName }
$CVValues += @{'CVLastName'=$CVObj.LastName}
$CVValues += @{'CVDepartment'=$CVObj.Department}
Add-PnPFile -Path $CVFile.FullName -Folder "CVs" -Values $CVValues
}
Create a task in Windows Task Scheduler to automate
the running of this script.
|