Sunt nou aici și mă confrunt cu probleme cu scriptul meu Powershell cu căi lungi.
Acest script își propune să obțină calea relativă și hash din fișiere/foldere și subfolderele sale. Funcționează cu unii cu alții, primesc următoarea eroare:
Get-ChildItem : Calea specificată, numele fișierului sau ambele sunt prea lungi. Numele de fișier complet calificat trebuie să aibă mai puțin de 260 de caractere, iar numele directorului trebuie să aibă mai puțin de 248 de caractere.
Aș dori să știu cum să rezolv acest lucru și să evit să-mi dau această eroare, vă rog.
Am activat căile lungi ale fișierelor în Windows Server 2012 unde rulez scriptul și încă nu funcționează.
Daca adaug asta \\?\ în variabila cale, nu reușește să spună că există caractere ilegale în cale chiar dacă adaug -LiteralPath.
Orice ajutor ar fi grozav
Acesta este scriptul mypowershell:
#Mesaj către utilizator
Scriere-Ieșire „`nAcest script va colecta FilePathName, Name, RelativePath și Hash-ul fișierelor/directoarelor pe care le-ați ales.”
„`nLa final, vă va spune cât timp a durat să rulați scriptul”
Read-Host -Prompt „`nApăsați ENTER pentru a continua sau CTRL+C pentru a ieși”
#Numărând timpul de la început
$starttime = (Get-Date)
#Variabile
#Se pot adăuga doar 3 căi maxim. Dacă se adaugă mai mult de 3, se poate schimba calea relativă
$root = "C:\mypath"
#Variabilă pentru crearea fișierului CSV
$report = "mycsvfile.csv"
#Proces de generare a HASH-ului
$hasher = [System.Security.Cryptography.SHA256]::Create()
$AllFiles = @()
"`n"#line space
Write-Host „Generarea hash-ului de la $root”
#Obținerea de informații din directoare
foreach ($fișier în get-childitem $root -recurse | Select-Object FullName, Director, Nume, PSIContainer, Lungime)
{
$acl = get-acl $fișier.nume complet | select-object owner,accesstostring,group
$obj = nou-obiect psObject
#Generarea fișierului HASH
if(!$file.PsIsContainer)
{
$relativePath = $file.FullName.Substring($root.Length)
Write-Host "Debug $relativePath" -ForegroundColor Green
$inputStream = Nou-Object IO.StreamReader $file.fullname
$hashBytes = $hasher.ComputeHash($inputStream.BaseStream)
$inputStream.Close()
$builder = Obiect nou System.Text.StringBuilder
$hashBytes | Foreach-Object { [void] $builder.Append($_.ToString("X2")) }
#Adăugați informații în FIȘIERUL CSV
$obj | Add-Member -membertype noteproperty -name FilePathandName -Value $file.FullName
$obj | Add-Member -membertype noteproperty -name Nume -Valoare $fișier.Nume
$obj | Add-Member -MemberType noteproperty -Nume 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 -Valoare $file.LastAccessTime
#$obj | Add-Member -MemberType noteproperty -Nume LastWriteTime -Valoare $file.LastWriteTime
#Variabilă pentru a trimite informații la CSV
$ToateFișierele += $obj
Clear-Variable relativePath
}
Eliminare-Variable obj
}
#$ToateFișierele += $obj
#Generarea fișierului CSV
$AllFiles |Export-Csv $raport âNoTypeInformation
"`n"
Write-Host „Fișierul $report a fost creat”
"`n"
Write-Host „Scriptul a luat:`n”
$endTime = Get-Date
New-TimeSpan -Start $startTime -End $endTime