Add multiple folders in libraries using a CSV file
Summary
This script sample will allow you to create the folders (not nested) into the SharePoint libraries provided in the CSV file.
Create folders on single SharePoint site
Below is an example of the format needed for your .csv
file:
libName | folderName |
---|---|
Customers | Contracts |
Support | Roadmaps |
Support | Analysis |
Important
Make sure your target libraries contained in the file do exist in SharePoint Online site.
# Config Variables
$SiteURL = "https://contoso.sharepoint.com/sites/Ops"
$CSVFilePath = "C:\Temp\Folders.csv"
Try {
# Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
$Web = Get-PnPWeb
# Get the CSV file
$CSVFile = Import-Csv $CSVFilePath
# Read CSV file and create folders
ForEach($Row in $CSVFile)
{
# Get the Document Library and its site relative URL
$Library = Get-PnPList -Identity $Row.libName -Includes RootFolder
If($Web.ServerRelativeUrl -eq "/")
{
$LibrarySiteRelativeURL = $Library.RootFolder.ServerRelativeUrl
}
else
{
$LibrarySiteRelativeURL = $Library.RootFolder.ServerRelativeUrl.Replace($Web.ServerRelativeUrl,'')
}
# Replace Invalid Characters from Folder Name, If any
$FolderName = $Row.folderName
$FolderName = [RegEx]::Replace($FolderName, "[{0}]" -f ([RegEx]::Escape([String]'\"*:<>?/\|')), '_')
# Frame the Folder Name
$FolderURL = $LibrarySiteRelativeURL+"/"+$FolderName
# Create Folder if it doesn't exist
Resolve-PnPFolder -SiteRelativePath $FolderURL | Out-Null
Write-host "Ensured Folder:"$FolderName -f Green
}
}
catch {
write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}
Check out the PnP PowerShell to learn more at: https://aka.ms/pnp/powershell
The way you login into PnP PowerShell has changed please read PnP Management Shell EntraID app is deleted : what should I do ?
Create folders on multiple SharePoint sites
Below is an example of the format needed for your .csv
file:
libName | folderName | SiteUrl |
---|---|---|
Customers | Contracts | https://contoso.sharepoint.com/sites/site1 |
Support | Roadmaps | https://contoso.sharepoint.com/sites/site2 |
Support | Analysis | https://contoso.sharepoint.com/sites/site2 |
Important
Make sure your target libraries & sites contained in the file do exist in SharePoint Online.
#Config Variables
$CSVFilePath = "C:\Temp\Folders.csv"
Try {
# Get the CSV file
$CSVFile = Import-Csv $CSVFilePath
# Read CSV file and create folders
ForEach($Row in $CSVFile)
{
$SiteURL = $Row.SiteUrl
# Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
$Web = Get-PnPWeb
# Get the Document Library and its site relative URL
$Library = Get-PnPList -Identity $Row.libName -Includes RootFolder
If($Web.ServerRelativeUrl -eq "/")
{
$LibrarySiteRelativeURL = $Library.RootFolder.ServerRelativeUrl
}
else
{
$LibrarySiteRelativeURL = $Library.RootFolder.ServerRelativeUrl.Replace($Web.ServerRelativeUrl,'')
}
# Replace Invalid Characters from Folder Name, If any
$FolderName = $Row.folderName
$FolderName = [RegEx]::Replace($FolderName, "[{0}]" -f ([RegEx]::Escape([String]'\"*:<>?/\|')), '_')
# Frame the Folder Name
$FolderURL = $LibrarySiteRelativeURL+"/"+$FolderName
# Create Folder if it doesn't exist
Resolve-PnPFolder -SiteRelativePath $FolderURL | Out-Null
Write-host "Ensured Folder:"$FolderName -f Green
}
}
catch {
write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}
Check out the PnP PowerShell to learn more at: https://aka.ms/pnp/powershell
The way you login into PnP PowerShell has changed please read PnP Management Shell EntraID app is deleted : what should I do ?
Contributors
Author(s) |
---|
Jiten Parmar |
Ganesh Sanap |
Disclaimer
THESE SAMPLES ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.