Ich habe ein Powershell-Skript, das einige Dateien für die spätere Verwendung von einem Python-Skript kopiert. Die Kopieroperation ist diese:Kopieren von Dateien ohne Berechtigungen
ls $env:MINGW_32 -r -ea silentlycontinue -fo -inc "*.dll" | % { cp $_.fullname "build\lib.win32-2.7" }
Nichts besonders interessant oder ungewöhnlich. Die interessante (frustrierend) Teil ist das, was später passiert:
error: [Error 5] Access is denied: 'build\\bdist.win32\\4758ccaeay32.dll'
CPython hat in der Tat Logik in distutils, dass die Dateiberechtigungen, nachdem es kopiert die DLLs explizit zurücksetzt, genau dieses Problem zu vermeiden. Ich habe versucht, dies in Powershell zu replizieren, aber noch nicht erfolgreich gewesen:
$location = ".\build";
#Search recursivly through location defined;
get-childitem -r $location | foreach{
$tempLocation = $_.FullName;
#Get ACL for tempLocation;
$acl = get-acl $tempLocation;
#Get SID of explicit ACL;
$acl.Access | where{
$_.isinherited -like $false} | foreach{
#Foreach SID purge the SID from the ACL;
$acl.purgeaccessrules($_.IdentityReference);
#Reapply ACL to file or folder without SID;
Set-Acl -AclObject $acl -path $tempLocation;
}
}
Gibt es irgendwelche Vorschläge zurücksetzen oder vorzugsweise vermeiden in erster Linie der Dateiberechtigungen kopieren, so dass der Python-Skript nicht ausfällt?
Beachten Sie, dass auch nach Anregungen und Änderungen in der Tat, um zu versuchen zu machen Das Skript noch robuster, ich lief immer noch in den Fehler. Ich werde das markieren, weil das wahrscheinlich in den meisten Szenarien zutrifft. – xaav