Я здесь новичок, и у меня возникли проблемы с моим скриптом powershell с длинными путями.
Этот скрипт предназначен для получения относительного пути и хэша из файлов/папок и их подпапок. Это работает с некоторыми, с другими я получаю следующую ошибку:
Get-ChildItem : указанный путь, имя файла или оба слишком длинные. Полное имя файла должно быть меньше 260 символов, а имя каталога должно быть меньше 248 символов.
Я хотел бы знать, как справиться с этим и избежать этой ошибки, пожалуйста.
Я включил длинные пути к файлам в Windows Server 2012, где я запускаю скрипт, и он все еще не работает.
Если я добавлю это \\?\ в переменной пути он не говорит, что в пути есть недопустимые символы, даже если я добавляю -LiteralPath.
Любая помощь будет отличной
Это скрипт mypowershell:
#Сообщение пользователю
  Write-Output "`nThis script соберет FilePathName, Name, RelativePath и Hash файлов/папок, которые вы выбрали."
               "`nВ конце будет указано, сколько времени потребовалось для запуска скрипта"   
  Read-Host -Prompt «nНажмите ENTER, чтобы продолжить, или CTRL+C, чтобы выйти» 
        
  #Считаем время с начала
  $starttime = (дата получения)
        
  #Переменные
  #Можно добавить максимум 3 пути. Если добавлено более 3, это может изменить относительный путь
  $ root = "C:\мой путь"
        
        
  #Переменная для создания файла CSV
  $ отчет = "mycsvfile.csv"
        
        
  #Процесс генерации HASH
  $hasher = [Система.Безопасность.Криптография.SHA256]::Создать()
  $Все файлы = @() 
        
  "`n"#строчный пробел
        
  Write-Host "Создание хэша из $root" 
        
        
        
  #Получение информации из каталогов
  foreach ($file в get-childitem $root -recurse | Select-Object FullName, Directory, Name, PSIsContainer, Length)
  {
      $acl = get-acl $file.fullname | select-object owner,accesstostring,group
      $obj = новый объект psObject
        
        
  #Создание HASH-файла
      если(!$файл.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 = новый объект System.Text.StringBuilder
          $хэшбайт | Foreach-Object {[void] $builder.Append($_.ToString("X2")) }
        
  #Добавить информацию в CSV-ФАЙЛ
          $объект | Add-Member -membertype noteproperty -name FilePathandName -Value $file.FullName
          $объект | Add-Member -membertype noteproperty -name Name -Value $file.Name
          $объект | Add-Member -MemberType noteproperty -Name RelativePath -Value $relativePath #-force
          $объект | Add-Member -MemberType noteproperty -Name Hash -Value $builder.ToString()
          #$объект | Add-Member -membertype noteproperty -name CreationTime -Value $file.CreationTime
          #$объект | Add-Member -MemberType noteproperty -Name LastAccessTime -Value $file.LastAccessTime
          #$объект | Add-Member -MemberType noteproperty -Name LastWriteTime -Value $file.LastWriteTime
        
                
      #Переменная для отправки информации в CSV
      $Все файлы += $obj
      Относительный путь Clear-Variable
      }
  Удалить переменную obj
  }
        
  #$ВсеФайлы += $obj
        
  #Создание CSV-ФАЙЛА
  $AllFiles |Export-Csv $report âNoTypeInformation
        
  "н"
  Write-Host "Файл $report создан"
        
  "н"
  Write-Host "Сценарий взял:`n"
  $endTime = Get-Date
  New-TimeSpan -Начало $startTime -Конец $endTime