Introduction

Consider a scenario where you need to upload thousands of files to SharePoint 2010. Before uploading the files you must prepare for it. This article outlines how to get prepared for uploading bulk files to SharePoint.

Preparation

There are at least the following 3 scenarios where the upload of the file can fail:

  1. Blocked file types
  2. Invalid special characters in the file name
  3. Size of the file
Not all the file formats can be uploaded to SharePoint (for example .exe files) and you cannot upload a file that has special characters in its name and there is a size restriction for a single file being uploaded in SharePoint. To find the list of blocked file types refer to this Link. The unsupported special characters in a file name are:

[~#%&*{}|:<>?/|"]

How to Upload Blocked file types

In order to upload the blocked file types in SP you need to either remove them from the blocked file types list (not recommended) or rename the file with a “.txt” extension. So when uploading the file SharePoint understands it as a .txt file and not as any other file type. In order to use the file you can download the file and rename it to the original file type.

The following piece of code renames the file to change its type to “.txt” format:

  1. $path = read-host "Enter the path"
  2. $TestPath = test-path $path
  3. if($TestPath)
  4. {
  5. Get-ChildItem -path $path -recurse |
  6. Foreach-Object
  7. {
  8. $name = $_.name
  9. if($name.contains(".ade") -or $name.contains(".adp") -or $name.contains(".app") -or $name.contains
  10. (".asa") -or $name.contains(".ashx") -or $name.contains(".asmx") -or $name.contains(".asp") -or
  11. $name.contains(".bas") -or $name.contains(".bat") -or $name.contains(".cdx") -or
  12. $name.contains(".cer") -or $name.contains(".chm") -or $name.contains(".class") -or
  13. $name.contains(".cmd") -or $name.contains(".com") -or $name.contains(".config") -or
  14. $name.contains(".cpl") -or $name.contains(".crt") -or $name.contains(".csh") -or
  15. $name.contains(".dll") -or $name.contains(".exe") -or $name.contains(".fxp") -or
  16. $name.contains(".hlp") -or $name.contains(".hta") -or $name.contains(".htr") -or
  17. $name.contains(".htw") -or $name.contains(".ida") -or $name.contains(".idc") -or
  18. $name.contains(".idq") -or $name.contains(".ins") -or $name.contains(".isp") -or
  19. $name.contains(".its") -or $name.contains(".jse") -or $name.contains(".ksh") -or
  20. $name.contains(".lnk") -or $name.contains(".mad") -or $name.contains(".maf") -or
  21. $name.contains(".mag") -or $name.contains(".mam") -or $name.contains(".maq") -or
  22. $name.contains(".mar") -or $name.contains(".mas") -or $name.contains(".mat") -or
  23. $name.contains(".mau") -or $name.contains(".mav") -or $name.contains(".maw") -or
  24. $name.contains(".mda") -or $name.contains(".mdb") -or $name.contains(".mde") -or
  25. $name.contains(".mdt") -or $name.contains(".mdw") -or $name.contains(".mdz") -or
  26. $name.contains(".msc") -or $name.contains(".msh") -or $name.contains(".msh1") -or
  27. $name.contains(".msh1xml") -or $name.contains(".msh2") -or $name.contains(".msh2xml") -or
  28. $name.contains(".mshxml") -or $name.contains(".msi") -or $name.contains(".msp") -or
  29. $name.contains(".mst") -or $name.contains(".ops") -or $name.contains(".pcd") -or
  30. $name.contains(".pif") -or $name.contains(".prf") -or $name.contains(".prg") -or
  31. $name.contains(".printer") -or $name.contains(".pst") -or $name.contains(".reg") -or
  32. $name.contains(".rem") -or $name.contains(".scf") -or $name.contains(".scr") -or
  33. $name.contains(".sct") -or $name.contains(".shb") -or $name.contains(".shs") -or
  34. $name.contains(".shtm") -or $name.contains(".shtml") -or $name.contains(".soap") -or
  35. $name.contains(".stm") -or $name.contains(".url") -or $name.contains(".vb") -or
  36. $name.contains(".vbe") -or $name.contains(".vbs") -or $name.contains(".ws") -or
  37. $name.contains(".wsc") -or $name.contains(".wsf") -or $name.contains(".wsh") -or
  38. $name.contains(".ADE") -or $name.contains(".ADP") -or $name.contains(".APP") -or
  39. $name.contains(".ASA") -or $name.contains(".ASHX") -or $name.contains(".ASMX") -or
  40. $name.contains(".ASP") -or $name.contains(".BAS") -or $name.contains(".BAT") -or
  41. $name.contains(".CDX") -or $name.contains(".CER") -or $name.contains(".CHM") -or
  42. $name.contains(".CLASS") -or $name.contains(".CMD") -or $name.contains(".COM") -or
  43. $name.contains(".CONFIG") -or $name.contains(".CPL") -or $name.contains(".CRT") -or
  44. $name.contains(".CSH") -or $name.contains(".DLL") -or $name.contains(".EXE") -or
  45. $name.contains(".FXP") -or $name.contains(".HLP") -or $name.contains(".HTA") -or
  46. $name.contains(".HTR") -or $name.contains(".HTW") -or $name.contains(".IDA") -or
  47. $name.contains(".IDC") -or $name.contains(".IDQ") -or $name.contains(".INS") -or
  48. $name.contains(".ISP") -or $name.contains(".ITS") -or $name.contains(".JSE") -or
  49. $name.contains(".KSH") -or $name.contains(".LNK") -or $name.contains(".MAD") -or
  50. $name.contains(".MAF") -or $name.contains(".MAG") -or $name.contains(".MAM") -or
  51. $name.contains(".MAQ") -or $name.contains(".MAR") -or $name.contains(".MAS") -or
  52. $name.contains(".MAT") -or $name.contains(".MAU") -or $name.contains(".MAV") -or
  53. $name.contains(".MAW") -or $name.contains(".MDA") -or $name.contains(".MDB") -or
  54. $name.contains(".MDE") -or $name.contains(".MDT") -or $name.contains(".MDW") -or
  55. $name.contains(".MDZ") -or $name.contains(".MSC") -or $name.contains(".MSH") -or
  56. $name.contains(".MSH1") -or $name.contains(".MSH1XML") -or $name.contains(".MSH2") -or
  57. $name.contains(".MSH2XML") -or $name.contains(".MSHXML") -or $name.contains(".MSI") -or
  58. $name.contains(".MSP") -or $name.contains(".MST") -or $name.contains(".OPS") -or
  59. $name.contains(".PCD") -or $name.contains(".PIF") -or $name.contains(".PRF") -or
  60. $name.contains(".PRG") -or $name.contains(".PRINTER") -or $name.contains(".PST") -or
  61. $name.contains(".REG") -or $name.contains(".REM") -or $name.contains(".SCF") -or
  62. $name.contains(".SCR") -or $name.contains(".SCT") -or $name.contains(".SHB") -or
  63. $name.contains(".SHS") -or $name.contains(".SHTM") -or $name.contains(".SHTML") -or
  64. $name.contains(".SOAP") -or $name.contains(".STM") -or $name.contains(".URL") -or
  65. $name.contains(".VB") -or $name.contains(".VBE") -or $name.contains(".VBS") -or
  66. $name.contains(".WS") -or $name.contains(".WSC") -or $name.contains(".WSF") -or $
  67. name.contains(".WSH"))
  68. {
  69. $newname = $_.name + ".txt"
  70. write-host $newname
  71. Rename-Item -Path $_.fullname -newname ($newName)
  72. }
  73. }
  74. }
  75. else
  76. {
  77. write-host "Invalid path details.... Please run the script again and enter the valid path" -fore cyan
  78. write-host "SCRIPT FINISHED" -fore yellow
  79. }
The special characters that are not accepted in the file name are:
[~#%&*{}|:<>?/|"].

The following piece of code loops through all the files given in the path and replaces the special characters in the name with an empty value.
  1. $path = read-host "Enter the path"
  2. $TestPath = test-path $path
  3. if($TestPath)
  4. {
  5. Get-ChildItem -path $path -recurse |
  6. Foreach-Object
    {
  7. $newName = $_.name -replace '[~#%&*{}|:<>?/|"]', ''
  8. if (-not ($_.name -eq $newname))
    {
  9. Rename-Item -Path $_.fullname -newname ($newName)
  10. }
  11. }
  12. }
  13. else
  14. {
  15. write-host "Invalid path details.... Please run the script again and enter the valid path" -fore cyan
  16. write-host "SCRIPT FINISHED" -fore yellow
  17. }
Complete Code

Code 1
  1. $LogTime = Get-Date -Format yyyy-MM-dd_hh-mm
  2. $LogFile = ".\ReplaceInvalidFileExtensionPatch-$LogTime.rtf"
  3. # Add SharePoint PowerShell Snapin
  4. if ( (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null )
  5. {
  6. Add-PSSnapin Microsoft.SharePoint.Powershell
  7. }
  8. start-transcript $logfile
  9. $path = read-host "Enter the path"
  10. $TestPath = test-path $path
  11. if($TestPath)
  12. {
  13. Get-ChildItem -path $path -recurse |
  14. Foreach-Object
  15. {
  16. $name = $_.name
  17. if($name.contains(".ade") -or $name.contains(".adp") -or $name.contains(".app") -or
  18. $name.contains(".asa") - or $name.contains(".ashx") -or $name.contains(".asmx") -or
  19. $name.contains(".asp") -or $name.contains(".bas") -or $name.contains(".bat") -or
  20. $name.contains(".cdx") -or $name.contains(".cer") -or $name.contains(".chm") -or
  21. $name.contains(".class") -or $name.contains(".cmd") -or $name.contains(".com") -or
  22. $name.contains(".config") -or $name.contains(".cpl") -or $name.contains(".crt") -or
  23. $name.contains(".csh") -or $name.contains(".dll") -or $name.contains(".exe") -or
  24. $name.contains(".fxp") -or $name.contains(".hlp") -or $name.contains(".hta") -or
  25. $name.contains(".htr") -or $name.contains(".htw") -or $name.contains(".ida") -or
  26. $name.contains(".idc") -or $name.contains(".idq") -or $name.contains(".ins") -or
  27. $name.contains(".isp") -or $name.contains(".its") -or $name.contains(".jse") -or
  28. $name.contains(".ksh") -or $name.contains(".lnk") -or $name.contains(".mad") -or
  29. $name.contains(".maf") -or $name.contains(".mag") -or $name.contains(".mam") -or
  30. $name.contains(".maq") -or $name.contains(".mar") -or $name.contains(".mas") -or
  31. $name.contains(".mat") -or $name.contains(".mau") -or $name.contains(".mav") -or
  32. $name.contains(".maw") -or $name.contains(".mda") -or $name.contains(".mdb") -or
  33. $name.contains(".mde") -or $name.contains(".mdt") -or $name.contains(".mdw") -or
  34. $name.contains(".mdz") -or $name.contains(".msc") -or $name.contains(".msh") -or
  35. $name.contains(".msh1") -or $name.contains(".msh1xml") -or $name.contains(".msh2") -or
  36. $name.contains(".msh2xml") -or $name.contains(".mshxml") -or $name.contains(".msi") -or
  37. $name.contains(".msp") -or $name.contains(".mst") -or $name.contains(".ops") -or $name.contains
  38. (".pcd") -or $name.contains(".pif") -or $name.contains(".prf") -or $name.contains(".prg") -or
  39. $name.contains(".printer") -or $name.contains(".pst") -or $name.contains(".reg") -or $name.contains
  40. (".rem") -or $name.contains(".scf") -or $name.contains(".scr") -or $name.contains(".sct") -or
  41. $name.contains(".shb") -or $name.contains(".shs") -or $name.contains(".shtm") -or $name.contains
  42. (".shtml") -or $name.contains(".soap") -or $name.contains(".stm") -or $name.contains(".url") -or
  43. $name.contains(".vb") -or $name.contains(".vbe") -or $name.contains(".vbs") -or $name.contains
  44. (".ws") -or $name.contains(".wsc") -or $name.contains(".wsf") -or $name.contains(".wsh") -or
  45. $name.contains(".ADE") -or $name.contains(".ADP") -or $name.contains(".APP") -or $name.contains
  46. (".ASA") -or $name.contains(".ASHX") -or $name.contains(".ASMX") -or $name.contains(".ASP") -or
  47. $name.contains(".BAS") -or $name.contains(".BAT") -or $name.contains(".CDX") -or $name.contains
  48. (".CER") -or $name.contains(".CHM") -or $name.contains(".CLASS") -or $name.contains(".CMD") -or
  49. $name.contains(".COM") -or $name.contains(".CONFIG") -or $name.contains(".CPL") -or $name.contains
  50. (".CRT") -or $name.contains(".CSH") -or $name.contains(".DLL") -or $name.contains(".EXE") -or
  51. $name.contains(".FXP") -or $name.contains(".HLP") -or $name.contains(".HTA") -or $name.contains
  52. (".HTR") -or $name.contains(".HTW") -or $name.contains(".IDA") -or $name.contains(".IDC") -or
  53. $name.contains(".IDQ") -or $name.contains(".INS") -or $name.contains(".ISP") -or $name.contains
  54. (".ITS") -or $name.contains(".JSE") -or $name.contains(".KSH") -or $name.contains(".LNK") -or
  55. $name.contains(".MAD") -or $name.contains(".MAF") -or $name.contains(".MAG") -or $name.contains
  56. (".MAM") -or $name.contains(".MAQ") -or $name.contains(".MAR") -or $name.contains(".MAS") -or
  57. $name.contains(".MAT") -or $name.contains(".MAU") -or $name.contains(".MAV") -or $name.contains
  58. (".MAW") -or $name.contains(".MDA") -or $name.contains(".MDB") -or $name.contains(".MDE") -or
  59. $name.contains(".MDT") -or $name.contains(".MDW") -or $name.contains(".MDZ") -or $name.contains
  60. (".MSC") -or $name.contains(".MSH") -or $name.contains(".MSH1") -or $name.contains(".MSH1XML") -or
  61. $name.contains(".MSH2") -or $name.contains(".MSH2XML") -or $name.contains(".MSHXML") -or
  62. $name.contains(".MSI") -or $name.contains(".MSP") -or $name.contains(".MST") -or $name.contains
  63. (".OPS") -or $name.contains(".PCD") -or $name.contains(".PIF") -or $name.contains(".PRF") -or
  64. $name.contains(".PRG") -or $name.contains(".PRINTER") -or $name.contains(".PST") -or $name.contains
  65. (".REG") -or $name.contains(".REM") -or $name.contains(".SCF") -or $name.contains(".SCR")
  66. -or $name.contains(".SCT") -or $name.contains(".SHB") -or $name.contains(".SHS") -or
  67. $name.contains(".SHTM") or $name.contains(".SHTML") -or $name.contains(".SOAP") -or
  68. $name.contains(".STM") -or $name.contains(".URL") -or $name.contains(".VB") -or $name.contains
  69. (".VBE") -or $name.contains(".VBS") -or $name.contains(".WS") -or $name.contains(".WSC") -or
  70. $name.contains(".WSF") -or $name.contains(".WSH"))
  71. {
  72. $newname = $_.name + ".txt"
  73. write-host $newname
  74. Rename-Item -Path $_.fullname -newname ($newName)
  75. }
  76. }
  77. }
  78. else
  79. {
  80. write-host "Invalid path details.... Please run the script again and enter the valid path" -fore cyan
  81. write-host "SCRIPT FINISHED" -fore yellow
  82. }
  83. stop-transcript
Code 2
  1. $LogTime = Get-Date -Format yyyy-MM-dd_hh-mm
  2. $LogFile = ".\ReplaceSpecialCharactersInFileNamePatch-$LogTime.rtf"
  3. # Add SharePoint PowerShell Snapin
  4. if ( (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null )
  5. {
  6. Add-PSSnapin Microsoft.SharePoint.Powershell
  7. }
  8. start-transcript $logfile
  9. $path = read-host "Enter the path"
  10. $TestPath = test-path $path
  11. if($TestPath)
  12. {
  13. Get-ChildItem -path $path -recurse |
  14. Foreach-Object
  15. {
  16. $newName = $_.name -replace '[~#%&*{}|:<>?/|"]', ''
  17. if (-not ($_.name -eq $newname))
  18. {
  19. Rename-Item -Path $_.fullname -newname ($newName)
  20. }
  21. }
  22. }
  23. else
  24. {
  25. write-host "Invalid path details.... Please run the script again and enter the valid path" -fore cyan
  26. write-host "SCRIPT FINISHED" -fore yellow
  27. }
  28. stop-transcript
Execution Procedure

Step 1: Download the script

Step 2: Navigate to the script path

Step 3: Execute the script



Enter the path where the files are placed.



Enter the path where the files are placed.

Conclusion

Thus this article explained how to prepare for uploading multiple files to SharePoint 2010 using a PowerShell script.