Get-ChildItem : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.

Ed7 96 Reputation points
2021-12-20T18:17:41.143+00:00

HI,

I am having issues with my script that cannot get the path from certain files/folders.
Others files/folders it does the job but I would like to know how to handle this and avoiding to give me this erro please.

Here s my current script@

#Message to user
Write-Output "`nThis script will collect the FilePathName, Name, RelativePath and the Hash of the files/folders you have chosen."
             "`nAt the end, it will tell you how long it took to run the script"   
Read-Host -Prompt "`nPress ENTER to continue or CTRL+C to quit" 

#Counting the time from the beginning
$starttime = (Get-Date)

#Variables
#Can only be added 3 paths maximum. If added more than 3 it may change the relatrive path
$root = "C:\mypath"


#Variable for creating the CSV File
$report = "mycsvfile.csv"


#Process for generating the HASH
$hasher = [System.Security.Cryptography.SHA256]::Create()
$AllFiles = @() 

"`n"#line space

Write-Host "Generating the Hash from $root" 



#Getting information from directories
foreach ($file in get-childitem $root -recurse | Select-Object FullName, Directory, Name, PSIsContainer, Length)
{
    $acl = get-acl $file.fullname | select-object owner,accesstostring,group
    $obj = new-object psObject


#Generating HASH File
    if(!$file.PsIsContainer)
        {
        $relativePath = $file.FullName.Substring($root.Length)
        Write-Host "Debug $relativePath" -ForegroundColor Green

        $inputStream = New-Object IO.StreamReader $file.fullname
        $hashBytes = $hasher.ComputeHash($inputStream.BaseStream)
        $inputStream.Close()

        $builder = New-Object System.Text.StringBuilder
        $hashBytes | Foreach-Object { [void] $builder.Append($_.ToString("X2")) }

#Add info into CSV FILE
        $obj | Add-Member -membertype noteproperty -name FilePathandName -Value $file.FullName
        $obj | Add-Member -membertype noteproperty -name Name -Value $file.Name
        $obj | Add-Member -MemberType noteproperty -Name RelativePath -Value $relativePath #-force
        $obj | Add-Member -MemberType noteproperty -Name Hash -Value $builder.ToString()
        #$obj | Add-Member -membertype noteproperty -name CreationTime -Value $file.CreationTime
        #$obj | Add-Member -MemberType noteproperty -Name LastAccessTime -Value $file.LastAccessTime
        #$obj | Add-Member -MemberType noteproperty -Name LastWriteTime -Value $file.LastWriteTime


    #Variable to send info to CSV
    $AllFiles += $obj
    Clear-Variable relativePath
    }
Remove-Variable obj
}

#$AllFiles += $obj

#Generating CSV FILE
$AllFiles |Export-Csv $report –NoTypeInformation

"`n"
Write-Host "$report File has been created "

"`n"
Write-Host "The script took:`n"
$endTime = Get-Date
New-TimeSpan -Start $startTime -End $endTime
Windows Server
Windows Server
A family of Microsoft server operating systems that support enterprise-level management, data storage, applications, and communications.
12,127 questions
Office Development
Office Development
Office: A suite of Microsoft productivity software that supports common business tasks, including word processing, email, presentations, and data management and analysis.Development: The process of researching, productizing, and refining new or existing technologies.
3,488 questions
Windows Server PowerShell
Windows Server PowerShell
Windows Server: A family of Microsoft server operating systems that support enterprise-level management, data storage, applications, and communications.PowerShell: A family of Microsoft task automation and configuration management frameworks consisting of a command-line shell and associated scripting language.
5,363 questions
0 comments No comments
{count} votes

5 answers

Sort by: Most helpful
  1. MotoX80 31,571 Reputation points
    2021-12-20T18:37:28.05+00:00
    0 comments No comments

  2. Andreas Baumgarten 96,361 Reputation points MVP
    2021-12-20T18:41:39.507+00:00

    Hi @Ed7 ,

    Maybe you can try this:

    In line 11 modify this $root = "C:\mypath" to $root = "\\?\C:\mypath" .

    ----------

    (If the reply was helpful please don't forget to upvote and/or accept as answer, thank you)

    Regards
    Andreas Baumgarten


  3. Ed7 96 Reputation points
    2021-12-20T18:53:33.217+00:00

    After changing the $root for:
    $root = \?\C:\mypath"

    I get this error which I am confused and not understanding what may wrong in those lines.

    get-childitem : Illegal characters in path.
    At C:\mypath\myscript.ps1:29 char:19

    • foreach ($file in get-childitem $root -recurse | Select-Object FullName, Directo ...
    • ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    • CategoryInfo : NotSpecified: (:) [Get-ChildItem], ArgumentException
    • FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.GetChildItemCommand

    Export-Csv : Cannot bind argument to parameter 'InputObject' because it is null.
    At C:\mypath\myscript.ps1:69 char:13

    • $AllFiles | Export-Csv $report #–NoTypeInformation
    • ~~~~~~~~~~~~~~~~~~
    • CategoryInfo : InvalidData: (:) [Export-Csv], ParameterBindingValidationException
    • FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.ExportCsvCommand

    @Andreas Baumgarten and @MotoX80 Anythoughts on this


  4. MotoX80 31,571 Reputation points
    2021-12-20T22:09:18.627+00:00

    After enabling the long file paths in Windows it still does not work.

    Did you reboot?

    What OS is this?

    0 comments No comments

  5. Ed7 96 Reputation points
    2021-12-21T09:06:46.26+00:00

    Yes I have rebooted and it still does not work.

    This is windows server 2012 as I am transfering some data.