Tôi là người mới ở đây và tôi đang gặp sự cố với tập lệnh powershell của mình với các đường dẫn dài.
Tập lệnh này nhằm lấy đường dẫn tương đối và hàm băm từ tệp/thư mục và các thư mục con của nó. Nó hoạt động với một số với những người khác tôi gặp lỗi sau:
Get-ChildItem : Đường dẫn, tên tệp hoặc cả hai được chỉ định quá dài. Tên tệp đủ điều kiện phải ít hơn 260 ký tự và tên thư mục phải ít hơn 248 ký tự.
Tôi muốn biết cách xử lý việc này và tránh gây ra lỗi này cho tôi.
Tôi đã bật đường dẫn tệp dài trong máy chủ Windows 2012 nơi tôi đang chạy tập lệnh và nó vẫn không hoạt động.
Nếu tôi thêm cái này \\?\ trong biến đường dẫn, nó không thông báo rằng có các ký tự Bất hợp pháp trong đường dẫn ngay cả khi tôi thêm -LiteralPath.
Bất kỳ sự trợ giúp nào đều sẽ là tuyệt vời
Đây là tập lệnh mypowershell:
#Thông báo cho người dùng
Đầu ra ghi "`nTập lệnh này sẽ thu thập Tên tệp, Tên, Đường dẫn tương đối và Hàm băm của các tệp/thư mục bạn đã chọn."
"`nCuối cùng, nó sẽ cho bạn biết mất bao lâu để chạy tập lệnh"
Read-Host -Prompt "`nNhấn ENTER để tiếp tục hoặc CTRL+C để thoát"
#Đếm thời gian từ đầu
$starttime = (Nhận ngày)
#Biến
#Chỉ có thể thêm tối đa 3 đường dẫn. Nếu thêm nhiều hơn 3, nó có thể thay đổi đường dẫn tương đối
$root = "C:\mypath"
#Biến để tạo Tệp CSV
$report = "mycsvfile.csv"
#Quy trình tạo HASH
$hasher = [System.Security.Cryptography.SHA256]::Create()
$AllFiles = @()
"`n"#dấu cách dòng
Máy chủ ghi "Tạo hàm băm từ $root"
# Lấy thông tin từ thư mục
foreach ($file in get-childitem $root -recurse | Select-Object FullName, Directory, Name, PSIsContainer, Length)
{
$acl = get-acl $file.fullname | chủ sở hữu đối tượng chọn, chuỗi truy cập, nhóm
$obj = đối tượng mới psObject
#Tạo tệp HASH
if(!$file.PsIsContainer)
{
$relativePath = $file.FullName.Substring($root.Length)
Máy chủ ghi "Gỡ lỗi $relativePath" -ForegroundColor Green
$inputStream = Đối tượng mới IO.StreamReader $file.fullname
$hashBytes = $hasher.ComputeHash($inputStream.BaseStream)
$inputStream.Close()
$builder = Đối tượng mới System.Text.StringBuilder
$hashBytes | Foreach-Object { [void] $builder.Append($_.ToString("X2")) }
#Thêm thông tin vào TỆP CSV
$obj | Add-Member -membertype noteproperty -tên FilePathandName -Giá trị $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 để gửi thông tin tới CSV
$AllFiles += $obj
Clear-Biến tương đốiPath
}
Loại bỏ biến obj
}
#$Tất cả tệp += $obj
#Đang tạo TỆP CSV
$AllFiles |Xuất-Csv $report âNoTypeInformation
"n"
Máy chủ lưu trữ "$report Tệp đã được tạo"
"n"
Máy chủ lưu trữ "Kịch bản đã lấy:`n"
$endTime = Nhận ngày
New-TimeSpan -Bắt đầu $startTime -End $endTime