Я здесь новичок, и у меня возникли проблемы с моим скриптом 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