This PowerShell script reads the csv file to get all the fields dynamically. It will create the List first and then adds the list columns. I have used different column types as shown below.
PowerShell to Create SharePoint List and Fields using CSV file
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
$SiteURL = "https://myclassbook.sharepoint.com/sites/capex"
$ListName = "ProjectDetails"
$csvPath = "C:\Users\mayur\OneDrive\Documents\Apurva\PS\Column Creation\book1.csv"
$ImportedColumnsData = Import-Csv -Path $csvPath
Try {
$Cred = Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = $Credentials
$ListCreationInfo = New-Object Microsoft.SharePoint.Client.ListCreationInformation
$ListCreationInfo.Title = $ListName
$ListCreationInfo.TemplateType = 100
$List = $Ctx.Web.Lists.Add($ListCreationInfo)
$List.Description = "This list contains project details"
$List.Update()
$Ctx.ExecuteQuery()
#Get the List
$List = $Ctx.Web.Lists.GetByTitle($ListName)
$Ctx.Load($List)
$Ctx.ExecuteQuery()
#Check if the column exists in list already
$Fields = $List.Fields
$Ctx.Load($Fields)
$Ctx.executeQuery()
for ($i = 0; $i -lt $ImportedColumnsData.length; $i++) {
Switch ($ImportedColumnsData[$i].Type) {
'Single Line of text' {
$FieldSchema = "<Field Type='Text' ID='{$FieldID}' DisplayName='" + $ImportedColumnsData[$i].DisplayName + "' Name='" + $ImportedColumnsData[$i].InternalName + "'/>"
}
'Number' {
$FieldSchema = "<Field Type='Number' ID='{$FieldID}' DisplayName='" + $ImportedColumnsData[$i].DisplayName + "' Name='" + $ImportedColumnsData[$i].InternalName + "'/>"
}
'Multiline of text' {
$FieldSchema = "<Field Type='Note' ID='{$FieldID}' DisplayName='" + $ImportedColumnsData[$i].DisplayName + "' Name='" + $ImportedColumnsData[$i].InternalName + "'/>"
}
'Person and group' {
$FieldSchema = "<Field Type='User' ID='{$FieldID}' DisplayName='" + $ImportedColumnsData[$i].DisplayName + "' Name='" + $ImportedColumnsData[$i].InternalName + "'/>"
}
'Choice' {
$ChoiceOptions = [string]::Empty
$Choices = $ImportedColumnsData[$i].Other.Split(",")
foreach ($Choice in $Choices) {
$ChoiceOptions = $ChoiceOptions + "<CHOICE>$Choice</CHOICE>"
}
$FieldSchema = "<Field Type='Choice' ID='{$FieldID}' DisplayName='" + $ImportedColumnsData[$i].DisplayName + "' Name='" + $ImportedColumnsData[$i].InternalName + "'><Default>" + $ImportedColumnsData[$i].Default + "</Default> <CHOICES>$ChoiceOptions</CHOICES></Field>"
}
'Hyperlink or Picture' {
$FieldSchema = "<Field Type='URL' ID='{$FieldID}' DisplayName='" + $ImportedColumnsData[$i].DisplayName + "' Name='" + $ImportedColumnsData[$i].InternalName + "' Format='"+$ImportedColumnsData[$i].Other+"'/>"
}
'Date and Time' {
$FieldSchema = "<Field Type='DateTime' ID='{$FieldID}' DisplayName='" + $ImportedColumnsData[$i].DisplayName + "' Name='" + $ImportedColumnsData[$i].InternalName + "' />"
}
'Yes or No' {
$FieldSchema = "<Field Type='Boolean' ID='{$FieldID}' DisplayName='" + $ImportedColumnsData[$i].DisplayName + "' Name='" + $ImportedColumnsData[$i].InternalName + "'><Default>" + $ImportedColumnsData[$i].Default + "</Default> </Field>"
}
'Currency' {
$FieldSchema = "<Field Type='Currency' ID='{$FieldID}' DisplayName='" + $ImportedColumnsData[$i].DisplayName + "' Name='" + $ImportedColumnsData[$i].InternalName + "' />"
}
}
$FieldID = New-Guid
$NewField = $Fields | Where-Object { ($_.Internalname -eq $ImportedColumnsData[$i].InternalName) -or ($_.Title -eq $ImportedColumnsData[$i].DisplayName) }
if ($null -ne $NewField) {
Write-host "Column $Name already exists in the List!" -f Yellow
}
else
{
$NewField = $List.Fields.AddFieldAsXml($FieldSchema, $True, [Microsoft.SharePoint.Client.AddFieldOptions]::AddFieldInternalNameHint)
$Ctx.ExecuteQuery()
Write-host "New Column Added to the List Successfully!" -ForegroundColor Green
}
}
}
Catch {
write-host -f Red "Error Adding Column to List!" $_.Exception.Message
}Downloads:1) Microsoft.SharePoint.Client.Runtime.dll
2) Microsoft.SharePoint.Client.dll
YouTube Video:

0 Comments