#PowerShell, #PowerWiseScripting, #ProjectWise, PWPS_DAB

How To: Deal with Long Paths

Be sure to check out my Scripting4Crypto initiative. It’s a fun way to get into using cryptocurrencies all while getting your PowerShell needs met.

I recently encountered an issue when exporting documents out of a ProjectWise datasource and importing them into another datasource.  The issue encountered had to do with the long path names. ProjectWise doesn’t care how long the path is to a folder or document. However, Windows does. There is a hard limit of 260 characters.

The following is one way to work around this limitation. The process was broken down into two steps.

First: Export the ProjectWise documents to the local drive without recreating the folder path and create an Excel spreadsheet to capture the full folder path, name, etc.

Second: Import the ProjectWise documents into the secondary ProjectWise datasource using the information within the Excel spreadsheet to recreate the folder structure.

Exporting documents from ProjectWise:

# Parameters
    [string] $PWFolder = 'Projects\BSI200 - Peterborough Geospatial Investigation Parent',
    [string] $ExportFolder = 'D:\Temp\testExport',
    [string] $OutputFile = "$ExportFolder\Output.xlsx"    

    $docs = Get-PWDocumentsBySearch -FolderPath $PWFolder -GetAttributes -Verbose

    #Create datatable
    $dt = New-Object System.Data.DataTable ('ExportDocs')
    $Columns = 'DocName', 'DocDesc', 'FullPath', 'ProjectID', 'ExportFolder'

    foreach ($Column in $Columns){
        $dt.Columns.Add($Column)
    }

    foreach ($doc in $docs) {
        # Create new datarow
        $dr = $dt.NewRow()
        
        $dr['DocName'] = $doc.Name
        $dr['DocDesc'] = $doc.Description
        $dr['FullPath'] = $doc.FullPath.Substring(0, $doc.FullPath.LastIndexOf('\'))   
        $dr['ProjectID'] = $doc.ProjectID
        $dr['ExportFolder'] = $ExportFolder
    
        # Add datarow to datatable
        $dt.Rows.Add($dr)
        
        CheckOut-PWDocuments -InputDocument $doc -CopyOut -ExportFolder $ExportFolder -NoReferences -Verbose
    }
    New-XLSXWorkbook -InputTables $dt -OutputFileName $OutputFile -Open -Verbose

Importing documents into ProjectWise:

# Parameters
    [string] $ImportFolder = 'D:\Temp\testExport',
    [string] $ImportFile = "$ImportFolder\Output.xlsx"

    # Import document information from spreadsheet created on export.
    $FromXLS = Get-TablesFromXLSXWorkbook -InputFileName $ImportFile -Verbose

    foreach ($item in $FromXLS.Rows) {
        try {
            Get-PWFolders -FolderPath $item.FullPath -JustOne -ErrorAction Stop
        } catch {
            New-PWFolder -FolderPath $item.FullPath -Verbose
        } # end try/catch

        try{
            Get-PWDocumentsBySearch -FolderPath $item.FullPath -DocumentName  $item.DocName -JustThisFolder -Verbose -ErrorAction Stop
            Write-Warning -Message ("Document '{0}' already exists in folder {1}" -f $item.DocName, $item.FullPath)
        } catch {
            New-PWDocument -FolderPath $item.FullPath -FilePath "$($item.ExportFolder)\$($item.DocName)" -Description $item.DocDesc -Verbose 
        } # try/catch

    } # end foreach($item...

Example Output to Excel Spreadsheet:

DocName : BSI200 – Peterborough Geospatial Investigation.pdf
DocDesc : Concat2.pdf
FullPath : Projects\BSI200 – Peterborough Geospatial Investigation
Parent\BSI200 – Peterborough Geospatial Investigation SubFolder
1\BSI200 – Peterborough Geospatial Investigation SubFolder 2
ProjectID : 3557
ExportFolder : D:\Temp\testExport

DocName : BSI200 – Peterborough Geospatial Investigation 3.pdf
DocDesc : Concat2.pdf
FullPath : Projects\BSI200 – Peterborough Geospatial Investigation
Parent\BSI200 – Peterborough Geospatial Investigation SubFolder
1\BSI200 – Peterborough Geospatial Investigation SubFolder 2\BSI200
– Peterborough Geospatial Investigation SubFolder 3
ProjectID : 3558
ExportFolder : D:\Temp\testExport

2 thoughts on “How To: Deal with Long Paths”

  1. Hi Brian, when I import the documents into the same datasource (and after moving the source folder to another location), I’m getting this error (see below). The script should recreate the folders if they don’t exist, correct? BTW – I altered the code slightly to use dmsSystem as the parent folder. The export worked great from that location. Thanks!

    WARNING: ‘dmsSystem\BSI200 – Peterborough Geospatial Investigation’ is not a valid folder name
    WARNING: Folder ‘dmsSystem\BSI200 – Peterborough Geospatial Investigation’ not found
    WARNING: Document ‘BSI200 – DOC – Webpage Information Layout.docx’ already exists in folder dmsSystem\BSI200 – Peterborough Geospatial Inv
    estigation

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.